python - riverbankcomputing - qt designer pyqt5 download
¿Cómo puedo subclase QApplication correctamente? (2)
Intente agregar QtGui.qApp = self
a su método __init__
(o intente usar QApplication.instance()
lugar de qApp
).
Espero que eso ayude.
Soy un novato con PyQt4 (y QT en total), y estoy enfrentando un problema,
He subclasificado QApplication (para tener datos globales y funciones que realmente son globales para la aplicación):
class App(QApplication):
def __init__(self):
QApplication.__init__(self)
self.foo = None
def bar(self,x):
do_something()
Cuando trato de agregar una ranura a mi ventana principal, como:
self.connect(bar, SIGNAL(''triggered()''), qApp.bar)
Aparece un error: AttributeError: bar
¿Qué estoy haciendo mal? ¿O debería hacer las cosas, quiero cosas globales y global stuff
lugar de atributos y métodos de la subclase QApplication? (o algo más, si es así, ¿qué?)
Nota: todo funcionó bien cuando los métodos y atributos "globales" estaban en mi QMainWindow -subclass ...
Un enfoque orientado a objetos puros es:
from PySide.QtCore import *
from PySide.QtGui import *
import sys
....import your classes ...
''''''
classes needing ''global'' application attributes use for example:
QCoreApplication.instance().mainWindow
''''''
class MyApp(QApplication):
def __init__(self, args):
super(MyApp, self).__init__(args)
self.mainWindow = MainWindow() # ''global''
...
self.exec_() # enter event loop
app = MyApp(sys.argv) # instantiate app object
Como se discutió en la "Construcción de software orientada a objetos" de Bertrand Meyer, un programa OO ejemplifica un objeto, el objeto de la aplicación. El uso de un procedimiento main()
es una reliquia de la programación de procedimientos de estilo C.
Además, el siguiente código puede bloquearse: en otras palabras, MyApp.__init__()
debería ingresar al bucle de evento principal, no a main()
.
...
def main(args):
app = MyApp(args)
...
sys.exit(app.exec_()) # Qt event loop
if __name__ == "__main__":
main(sys.argv)
Vea otros ejemplos: http://en.wikibooks.org/wiki/Python_Programming/PyQt4