Usando QTDesigner con PyQT y Python 2.6

Soy nuevo en Python y estoy empezando a aprender a progtwigr GUI (con suerte) usando PyQT4.7 y Python 2.6

Acabo de descargar el paquete completo de PyQT / QT4 (incluido QTDesigner) del sitio web de PyQT, sin embargo, parece que QTDesigner, que parece increíble de usar como novato (ya que puede ver todos los atributos / propiedades / valores predeterminados, etc.) de cada widget y visualmente editar las propiedades es genial, pero PyQT parece no configurar QTDesigner para que se integre directamente con PyQT y PyQTs scripts de generación de código python:

es decir: al pulsar “Ver código”, intenta ejecutar el script de Designer-> C ++ llamado (uic) en lugar del script pyuic.py, etc.

¿Hay alguna manera de lograr que QTDesigner se integre estrechamente con PyQT para la generación de código sobre la marcha como lo hace con C ++?

Si no, ¿significa que tengo que codificar la GUI QT completa dentro de mi IDE de Python y buscar toda la documentación y el código de referencia para cada widget? (parece muy ineficiente y poco elegante en comparación con el hecho de tener solo QTDesigner + integración con Python).

¿Cuál es el flujo de producción habitual de la cadena de herramientas // de usar Designer con PyQT? (Si no es posible una integración directa, ¿los usuarios de python + pyQT simplemente omiten el uso de QTDesigner y escriben manualmente todo el código QT GUI en python?)

Cualquier consejo / sugerencia adicional para un novato de PyQT sería apreciado. ¡Gracias!

PD: Sé que muchos de ustedes probablemente me dirán que simplemente lo absorban y codifiquen a mano la interfaz de usuario de QT, pero si uso Designer mientras aprendo según lo solicitado anteriormente, proporcione una manera de hacerlo para que pueda aprenderlo más fácilmente, gracias!

Comencé a escribir mi primera aplicación PyQT (PyQT se usa solo para manejar GUI), y parece que esa buena cadena de herramientas es: QtDesigner para generar .ui s y manejar recursos y algunos IDE, que pueden hacer que QtDesigner los edite. Yo uso Eclipse, porque es altamente personalizable. Puede comstackr su .qrc y .ui por demanda haciendo algo como esto al inicio de la aplicación, en la configuración o en cualquier otro momento:

os.system("pyrcc4.exe -o ui/images_rc.py ui/images/images.qrc") uic.compileUiDir(appDir + '/ui', True) 

y luego usando clases generadas de esta manera:

 class MyMainWindow(QtGui.QMainWindow): def __init__(self, owner): QtGui.QMainWindow.__init__(self) # 'Ui_MyMainWindow' is the class, that was generated by uic, # naming convention is: 'Ui_' plus the name of root widget in designer self.ui = Ui_MyMainWindow() self.ui.setupUi(self) 

o puede cargar .ui directamente cuando el contenedor se encuentra en:

  QtGui.QMainWindow.__init__(self) self.ui = None uic.loadUi('MyMainWindowUI.ui', self.ui) #now you have the instance of Ui_MyMainWindow in self.ui too, as above 

nota, que he agregado el sufijo UI al nombre del archivo .ui, se hizo para evitar la intersección del nombre, porque el nombre del archivo .py, generado por uic, no es el nombre de la clase que comienza con ‘Ui_’, sino solo el widget raíz.

Y otra nota: al final del archivo generado, uic coloca la cadena ‘importar% .qrc nombre% _rc’ (por defecto es importar images_rc), por lo que debe tener esto en cuenta al usar pyrcc4.

Todo el enfoque es lo suficientemente flexible, toma todo el trabajo de encoding ui ficticio de usted; pero aún puede hacer algunos ajustes en el atributo MyMainWindow.ui, donde se encuentra la instancia de Ui_MyMainWindow; y evita herencias innecesarias. Personalmente, hago los métodos _connectSlots e _initIntefrace en MyMainWindow para hacer algunos trabajos que el diseñador no pueda.

Aún así, debo tener en cuenta que escribir un código de interfaz por ti mismo es un buen enfoque, ya que el código generado por uic es UGLY. Prefiero cargar .ui en su lugar por loadUi () debido a esto 🙂 Y si tienes muchos controles personalizados de PyQT, es muy bueno llevarlos a QtDesigner …

Lo que hice fue crear mi propio ejecutable uic que es un contenedor para el script pyuic.py.

Necesitarás…

  1. Para obtener e instalar py2exe

  2. Reemplace PYTHON_PATH en el siguiente código uic.py

  3. Edite el archivo qt.conf en el sitio-paquetes \ PyQt4 y establezca Binaries = Ruta a la carpeta que contiene el archivo uic una vez que esté creado.

  4. Ponga uic.py y setup.py en la misma carpeta

  5. En el símbolo del sistema, vaya a la carpeta donde setup.py y uic.py luego ejecute el siguiente comando “python setup.py py2exe”.

//—-uic.py

 #uic.py import subprocess import sys args = "" for arg in sys.argv: if sys.argv[0] != arg: args += arg + " " # Start pyuic.py script command = 'python %PYTHON_PATH%\\PyQt4\\uic\\pyuic.py '+ args out = '' child = subprocess.Popen(command, shell=True, stderr=subprocess.PIPE) complete = False while True: out = child.stderr.read(1) if out == '' and child.poll() != None: break if out != '': sys.stdout.write(out) sys.stdout.flush() 

// —– setup.py

 #setup.py from distutils.core import setup import py2exe setup(windows=[{"script":"uic.py"}], options={"py2exe" : {"includes" : ["sip", "PyQt4.QtCore"]}}) 

Puedes ejecutar pyuic (o más bien pyuic4 ) desde la mano, en tu consola. Puedes hacer tu GUI usando el diseñador con Python, tal como lo harías con C ++.

Por cierto: he escrito todas las cosas de GUI para mi aplicación (10k de código) a mano. Realmente no me gustan los diseñadores de GUI y trabajar con código generado, cuando necesitas modificar algo.

QtDesigner utiliza uic.exe para generar sobre la marcha el código de C ++. uic.exe es una herramienta de línea de comandos, obtiene nombres de archivos como parámetros de entrada. Para la integración con python, puede escribir un progtwig de python que use pyuic.py , hacer coincidir las entradas con la entrada de uic.exe (orden, interruptores, etc.), convertirlo en un ejecutable (usando py2exe) y cambiar el nombre del ejecutable a uic.exe . luego reemplácelo con uic.exe en el directorio bin de Qt (uic.exe no existe en PyQt como sé). Solo debe tener cuidado con los argumentos de entrada de uic.exe y su macro escrita a mano (deben coincidir).

Creo que su progtwig necesitará conocer la ruta de python (para poder usar pyuic). Si está usando Windows, puede obtener la ruta del registro.