Foros del Web » Programando para Internet » Python »

Unas preguntas sobre PyQt4

Estas en el tema de Unas preguntas sobre PyQt4 en el foro de Python en Foros del Web. Buenas a todos, hace 3 dias que me puse con python asi que soy nuevo en el campo y estoy viendo el entorno gráfico con ...
  #1 (permalink)  
Antiguo 13/03/2012, 12:41
 
Fecha de Ingreso: octubre-2010
Mensajes: 73
Antigüedad: 13 años, 6 meses
Puntos: 0
Pregunta Unas preguntas sobre PyQt4

Buenas a todos, hace 3 dias que me puse con python asi que soy nuevo en el campo y estoy viendo el entorno gráfico con PyQt4.

Version de Python: 3.2.2 x64
PyQt4 Designer: 4.8.0 x64
Sistema Operativo: Windows 7 x64

Tengo los siguientes errores.

1- Cuando convierto con el pyuic4 una vista (.ui) me lo genera perfectamente, dentro de lo que vendría hacer el controlador armo todo perfectamente pero al ejecutar la aplicación me tira el siguiente error en la vista (.ui convertido a .py)


Código:
test_ip_app.setCentralWidget(self.centralwidget)
object has no a attribute 'setCentralWidget'

Si borro esta linea

El mismo error salta al

Código:
test_ip_app.setMenuBar(self.menubar)
Sigo y borro esta linea también

El mismo error

Luego de borrar esas líneas el programa se ejecuta perfectamente, realmente no entiendo todavia a que se debe este error ya que es la vista que genera el Designer con el Pyuic4.


2- Tema Estilos:

Dentro del Designer cuando intento ponerle un background-image al MainWindow
me agrega la imagen de fondo a todos los objetos :S, para solucionarlo temporalmente tengo que ponerle a los demás objetos background-image: url();


Si alguien tiene idea de que puede estar pasando, en que la estoy pifiando o si es algún bug del programa se les agradece.





Saludos.-

Última edición por Onsterion; 13/03/2012 a las 12:56
  #2 (permalink)  
Antiguo 13/03/2012, 14:46
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Unas preguntas sobre PyQt4

Este error se debe a que tu variable test_ip_app, no del tipo correcto.

De hecho con tan poca información que nos das es lo único que podemos concluir.

Ni siquiera sabemos en que parte asignaste test_ip_app o por lo menos tener un ejemplo funcional que reproduzca el error.
  #3 (permalink)  
Antiguo 13/03/2012, 21:02
 
Fecha de Ingreso: octubre-2010
Mensajes: 73
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Unas preguntas sobre PyQt4

Tenes razón ahi te paso todo el código



El Principal:

Código:
import sys
import socket
from PyQt4 import QtCore,  QtGui
from red_test_vista import Ui_test_ip_app

class Iniciar_control_red (QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        
        self.test_ping = Ui_test_ip_app()
        self.test_ping.setupUi(self)

        self.connect(self.test_ping.pushButton_ver_ip_btn,  QtCore.SIGNAL('clicked()'),  self.realizar_ping)

    def realizar_ping(self):
            if self.test_ping.lineEdit_ingresar_ip.text() == '':
                self.test_ping.lineEdit_resultado_del_ip.setText('IP o Dominio inválido')
            else : 
                self.test_ping.lineEdit_resultado_del_ip.setText('IP o Dominio inválido')
                self.test_ping.texto_del_campo = self.test_ping.lineEdit_ingresar_ip.text()
                try:
                    self.test_ping.pc1_dominio = socket.gethostbyaddr(self.test_ping.texto_del_campo)
                    self.test_ping.lineEdit_resultado_del_ip.setText('Nombre de la PC: ' + self.test_ping.pc1_dominio[0])
                except socket.gaierror:
                    raise self.test_ping.lineEdit_resultado_del_ip.setText('IP o Dominio inválido')
    
def main ():
    app = QtGui.QApplication(sys.argv)
    test_ping = Iniciar_control_red()
    test_ping.show()
    sys.exit(app.exec_())
    
if __name__ == "__main__":
    main()

La vista:

Código:
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'red_test_vista.ui'
#
# Created: Tue Mar 13 14:35:42 2012
#      by: PyQt4 UI code generator 4.9.1
#
# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    _fromUtf8 = lambda s: s

class Ui_test_ip_app(object):
    def setupUi(self, test_ip_app):
        test_ip_app.setObjectName(_fromUtf8("test_ip_app"))
        test_ip_app.resize(758, 357)
        test_ip_app.setWindowOpacity(2.0)
        test_ip_app.setStyleSheet(_fromUtf8("background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(7, 7, 7, 187), stop:1 rgba(7, 7, 7, 185));"))
        self.centralwidget = QtGui.QWidget(test_ip_app)
        self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
        self.label_sub_titulo = QtGui.QLabel(self.centralwidget)
        self.label_sub_titulo.setGeometry(QtCore.QRect(70, 110, 111, 21))
        self.label_sub_titulo.setLayoutDirection(QtCore.Qt.LeftToRight)
        self.label_sub_titulo.setStyleSheet(_fromUtf8("background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(0, 0, 0, 198), stop:1 rgba(0, 0, 0, 165));\n"
"background-image: url();\n"
"text-decoration: underline;\n"
"font: 87 9pt \"Arial Black\";\n"
"color: rgb(255, 255, 255);"))
        self.label_sub_titulo.setAlignment(QtCore.Qt.AlignCenter)
        self.label_sub_titulo.setObjectName(_fromUtf8("label_sub_titulo"))
        self.lineEdit_resultado_del_ip = QtGui.QLineEdit(self.centralwidget)
        self.lineEdit_resultado_del_ip.setGeometry(QtCore.QRect(340, 80, 341, 211))
        self.lineEdit_resultado_del_ip.setStyleSheet(_fromUtf8("background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(0, 0, 0, 198), stop:1 rgba(0, 0, 0, 165));\n"
"background-image: url();\n"
"font: 87 9pt \"Arial Black\";\n"
"color: rgb(255, 255, 255);"))
        self.lineEdit_resultado_del_ip.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
        self.lineEdit_resultado_del_ip.setReadOnly(True)
        self.lineEdit_resultado_del_ip.setObjectName(_fromUtf8("lineEdit_resultado_del_ip"))
        self.label_titulo = QtGui.QLabel(self.centralwidget)
        self.label_titulo.setGeometry(QtCore.QRect(30, 40, 191, 31))
        self.label_titulo.setStyleSheet(_fromUtf8("background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(0, 0, 0, 198), stop:1 rgba(0, 0, 0, 165));\n"
"background-image: url();\n"
"text-decoration: underline;\n"
"font-size: 15px;\n"
"font: 87 9pt \"Arial Black\";\n"
"color: rgb(255, 255, 255);"))
        self.label_titulo.setAlignment(QtCore.Qt.AlignCenter)
        self.label_titulo.setObjectName(_fromUtf8("label_titulo"))
        self.pushButton_ver_ip_btn = QtGui.QPushButton(self.centralwidget)
        self.pushButton_ver_ip_btn.setGeometry(QtCore.QRect(60, 190, 131, 41))
        self.pushButton_ver_ip_btn.setStyleSheet(_fromUtf8("background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(12, 12, 12, 255), stop:1 rgba(46, 45, 45, 255));\n"
"border-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(221, 221, 221, 255), stop:1 rgba(216, 216, 216, 255));\n"
"background-image: url();\n"
"font: 87 9pt \"Arial Black\";\n"
"color: rgb(255, 255, 255);"))
        self.pushButton_ver_ip_btn.setObjectName(_fromUtf8("pushButton_ver_ip_btn"))
        self.lineEdit_ingresar_ip = QtGui.QLineEdit(self.centralwidget)
        self.lineEdit_ingresar_ip.setGeometry(QtCore.QRect(70, 150, 113, 20))
        self.lineEdit_ingresar_ip.setStyleSheet(_fromUtf8("background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(0, 0, 0, 198), stop:1 rgba(0, 0, 0, 165));\n"
"background-image: url();\n"
"font: 87 9pt \"Arial Black\";\n"
"color: rgb(255, 255, 255);"))
        self.lineEdit_ingresar_ip.setObjectName(_fromUtf8("lineEdit_ingresar_ip"))
        test_ip_app.setCentralWidget(self.centralwidget)
        self.menubar = QtGui.QMenuBar(test_ip_app)#        self.menubar.setGeometry(QtCore.QRect(0, 0, 758, 21))
        self.menubar.setObjectName(_fromUtf8("menubar"))
        self.statusbar = QtGui.QStatusBar(test_ip_app)
        self.statusbar.setObjectName(_fromUtf8("statusbar"))

        self.retranslateUi(test_ip_app)
        QtCore.QMetaObject.connectSlotsByName(test_ip_app)

    def retranslateUi(self, test_ip_app):
        test_ip_app.setWindowTitle(QtGui.QApplication.translate("test_ip_app", "Test IP - Dominio", None, QtGui.QApplication.UnicodeUTF8))
        self.label_sub_titulo.setText(QtGui.QApplication.translate("test_ip_app", "Realizar Testeo", None, QtGui.QApplication.UnicodeUTF8))
        self.label_titulo.setText(QtGui.QApplication.translate("test_ip_app", "Testeo de IP - Dominio", None, QtGui.QApplication.UnicodeUTF8))
        self.pushButton_ver_ip_btn.setText(QtGui.QApplication.translate("test_ip_app", "Ejecutar Consulta", None, QtGui.QApplication.UnicodeUTF8))


Ahora si :P?
__________________
Página Principal: http://www.almightysystem.com.ar/
  #4 (permalink)  
Antiguo 14/03/2012, 09:20
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Unas preguntas sobre PyQt4

Creo que tu objeto principal no debe ser un QWidget, sino un QMainWindow
  #5 (permalink)  
Antiguo 14/03/2012, 10:23
 
Fecha de Ingreso: octubre-2010
Mensajes: 73
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Unas preguntas sobre PyQt4

Cita:
Iniciado por AlvaroG Ver Mensaje
Creo que tu objeto principal no debe ser un QWidget, sino un QMainWindow
Perfecto era ese el problema 1 :P me colge con los tutoriales y nunca cambié eso :P

Grax ^^

Ahora falta el problema 2 xD:

2- Tema Estilos:

Dentro del Designer cuando intento ponerle un background-image al MainWindow
me agrega la imagen de fondo a todos los objetos :S, para solucionarlo temporalmente tengo que ponerle a los demás objetos background-image: url();

Además la imagen de background se ve como cortada en ves de auto ajustarse a la ventana
__________________
Página Principal: http://www.almightysystem.com.ar/
  #6 (permalink)  
Antiguo 14/03/2012, 13:25
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Unas preguntas sobre PyQt4

Pues en CSS funciona así, el fondo se hereda a menos que se sobreescriba. Además, no hay una propiedad CSS que te permita "estirar" una imagen para cubrir el espacio de su contenedor, tendrás que usar una imagen más grande :D
Eso considerando que sea CSS estándar lo que admiten los elementos y no alguna extensión de CSS que permita esa clase de cosas. Tendrás que ir a la documentación
  #7 (permalink)  
Antiguo 14/03/2012, 14:05
 
Fecha de Ingreso: octubre-2010
Mensajes: 73
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Unas preguntas sobre PyQt4

Cita:
Iniciado por AlvaroG Ver Mensaje
Pues en CSS funciona así, el fondo se hereda a menos que se sobreescriba. Además, no hay una propiedad CSS que te permita "estirar" una imagen para cubrir el espacio de su contenedor, tendrás que usar una imagen más grande :D
Eso considerando que sea CSS estándar lo que admiten los elementos y no alguna extensión de CSS que permita esa clase de cosas. Tendrás que ir a la documentación
La propiedad background-image: transparent; o background-image: none; no funcionan =/

La imágen ya pude hacer que se vea completa, aunque me resulta raro que no estén esas propiedades y tenga que poner background-image: url(); para sacarla de los demás objetos =/
__________________
Página Principal: http://www.almightysystem.com.ar/
  #8 (permalink)  
Antiguo 14/03/2012, 15:06
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Unas preguntas sobre PyQt4

Ahh entiendo, no es lo que pensé en un primer momento. Pero bueno, todo vale si solucionás el problema :D

Etiquetas: onsterion, pyqt4, python3
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:24.