str - python畫圖標題




如何正確地繼承QApplication? (2)

嘗試將QtGui.qApp = self添加到您的__init__方法(或嘗試使用QApplication.instance()而不是qApp )。

我希望有幫助。

我是一個PyQt4(和QT)的新手,並且面臨一個問題,

我已經分類了QApplication(具有真正全局的應用程序的全局數據和函數):

class App(QApplication):
    def __init__(self):
        QApplication.__init__(self)
        self.foo = None

    def bar(self,x):
        do_something()

當我嘗試添加一個插槽到我的主窗口,如:

self.connect(bar, SIGNAL('triggered()'), qApp.bar)

我收到一個錯誤: AttributeError: bar

我究竟做錯了什麼? 或者我應該做的東西我想要全球性的, global stuff而不是QApplication子類的屬性和方法? (或其他東西,如果是的話,是什麼?)

注意:當“全局”方法和屬性在我的QMainWindow子類中時,這一切工作正常...


純面向對象的方法是:

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

如Bertrand Meyer的“面向對象的軟件構造”中所討論的,OO程序實例化一個對象,即應用對象。 使用main()過程是C風格程序編程的殘局。

此外,下面的代碼可能會崩潰:換句話說, MyApp.__init__()應該進入主事件循環,而不是main()

...

def main(args):
    app = MyApp(args)
    ...
    sys.exit(app.exec_()) # Qt event loop

if __name__ == "__main__":
    main(sys.argv)

查看其他示例: http : //en.wikibooks.org/wiki/Python_Programming/PyQt4





pyqt4