User Tools

Site Tools


python:qt

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
python:qt [2009/07/30 18:47]
nejo links added
python:qt [2009/08/18 22:04] (current)
josep overload
Line 5: Line 5:
 PyQt (Librerias de Qt para Python) (A la hora de instalar, especificar la ruta exacta del directorio python dentro de django)\\ ​ PyQt (Librerias de Qt para Python) (A la hora de instalar, especificar la ruta exacta del directorio python dentro de django)\\ ​
 http://​www.riverbankcomputing.co.uk/​static/​Downloads/​PyQt4/​PyQt-Py2.6-gpl-4.5.1-1.exe http://​www.riverbankcomputing.co.uk/​static/​Downloads/​PyQt4/​PyQt-Py2.6-gpl-4.5.1-1.exe
- 
-   1. Creamos con Qt Creator el formulario 
-   2. pyuic4 <​nombre.ui>​ -o <​nombre.py>​ 
-   3. Modificamos el .py que ejecuta la clase poniendo el from del archivo correcto y el nombre de la clase nueva 
-   4. Ejecutamos el que llama a todo .py 
  
 En QT, para mantener espaciado y que funcione con el redimensionado de la ventana, crearé Layouts, pero para mayor libertad de posicionamiento de los elementos, dentro de los mismos introduciremos Muelles (Spacers) En QT, para mantener espaciado y que funcione con el redimensionado de la ventana, crearé Layouts, pero para mayor libertad de posicionamiento de los elementos, dentro de los mismos introduciremos Muelles (Spacers)
 +
 +===== Código base =====
 +Primero de todo creamos con Qt Designer un formulario **Main Window** que sera la ventana principal del programa.
 +
 +Guardamos el archivo, que tendrá extensión **.ui**. Mediante la utilidad **pyuic.py** (normalmente se encuentra en C:​\Python26\Lib\site-packages\PyQt4\uic\pyuic.py) ejecutamos lo siguiente para convertirlo a extensión **.py**:
 +<​code>​
 +python pyuic.py main_window.ui -o main_window.py
 +</​code>​
 +
 +Podemos usar el siguiente **main.py** para lanzar la interfaz que acabamos de crear:
 +<code python>
 +import sys
 +from PyQt4 import QtGui
 +#Importamos el archivo con el codigo del formulario principal
 +import main_window_code
 + 
 +app = QtGui.QApplication(sys.argv)
 +#Creamos una ventana
 +window = QtGui.QMainWindow()
 +#Creamos el objeto de la clase del formulario, de la forma Ui_<​nombre>​
 +ui = main_window_code.Ui_MainWindow_Code()
 +ui.setupUi(window)
 + 
 +#Se inicia el bucle de ejecucion principal de QT
 +window.show()
 +sys.exit(app.exec_())
 +</​code>​
 +
 +Si queremos añadir signals y código, podemos hacerlo en el mismo fichero **main_window.py**,​ pero si cambiamos alguna cosa de la interfaz y volvemos a ejecutar **pyuic.py**,​ se machacarán los cambios que hubieramos hecho. Para evitar que suceda esto podemos crear un fichero nuevo, **main_window_code.py** que contendrá todo lo que queramos añadir al fichero principal. La estructura es la siguiente:
 +<code python>
 +from PyQt4 import QtCore, QtGui
 +#Importamos el fichero que contiene el codigo generado por pyuic.py
 +import main_window
 +
 +#Esta clase tiene como primer parametro el nombre del fichero y la clase principal generada por pyuic.py
 +class Ui_MainWindow_Code(main_window.Ui_MainWindow):​
 + def setupUi(self,​MainWindow):​
 + #Llamamos a la superclase
 + main_window.Ui_MainWindow.setupUi(self,​MainWindow)
 +
 + #Todas las signals y personalizaciones de la interfaz las ponemos a continuacion para que no se machaquen
 + QtCore.QObject.connect(self.buttonEjemplo,​QtCore.SIGNAL("​clicked()"​),​self.funcion_ejemplo)
 +
 + #Todas las funciones de la clase las ponemos a continuacion
 + def funcion_ejemplo(self):​
 + QtGui.QMessageBox("​Ejemplo","​Mensaje de ejemplo",​QtGui.QMessageBox.Information,​1,​0,​0).exec_()
 +
 +</​code>​
 +
 +===== Overload sobre funciones de clases instanciadas =====
 +Si tenemos una clase que ya ha sido instanciada y que contiene funciones, podemos sobreescribir las llamadas a esas funciones para que ejecuten otra función distinta:
 +<code python>
 +self.claseInstanciada.__class__.funcionAntigua = self.funcionNueva
 +</​code>​
 +
 +===== Drag and drop =====
 +Tenemos que sobreescribir tres funciones para tener en cuenta el drag & drop:
 +<code python>
 +self.myWidget.__class__.dragEnterEvent = self.myDrag
 +self.myWidget.__class__.dragMoveEvent = self.myMove
 +self.myWidget.__class__.dropEvent = self.myDrop
 +
 +def myDrag(self,​ event):
 + event.accept()
 + event.ignore()
 +</​code>​
 +
python/qt.1248972442.txt.gz · Last modified: 2016/10/16 18:40 (external edit)