2010-05-26 37 views
1

我是從PyQt4開始的,現在我遇到了一個事件問題。PyQT中事件的識別來源

我有一個主要類讓我們說MainWindow。 MainWindow有一個ButtonX類型的按鈕列表(內置形式QPu​​shButton)。我想實現2個解決方案之一(取決於哪個更容易)。

1)點擊列表中的一個按鈕後,我想運行一個MainWindow方法。我希望能夠閱讀那裏的事件源(承認點擊按鈕)

2)第二種解決方案是運行ButtonX類中定義的方法。

我想的是:

QtCore.QObject.connect(self.getButton(0, 0), QtCore.SIGNAL("clicked()"), self.getButton(0, 0).buttonMethod()) 

QtCore.QObject.connect(self.getButton(0, 0), QtCore.SIGNAL("clicked()"), self.getButton(0, 0), QtCore.SLOT("incrementValue()")) 

,甚至這條線occure暫停Python解釋器

QtCore.QObject.connect(self.getButton(0, 0), QtCore.SIGNAL("clicked()"), self.getButton(0, 0), QtCore.SLOT("incrementValue")) 

回答

4

1)單擊列表中的按鈕中的一個之後,我想運行MainWindow的一種方法。我希望能夠讀取事件的來源有(認點擊的按鈕)

您可以訪問使用QObject.sender()事件的來源。但是,正如說明所指出的那樣,使用QSignalMapper通常更好,或者以面向對象的方式進行操作。

2)第二種解決方案是運行ButtonX類中定義的方法。

self.getButton(0, 0).buttonMethod() 

以上將評估getButton與參數0, 0,然後,該對象上,呼叫buttonMethod方法:仔細在你輸入的第一個連接調用的最後一個參數

看。因此,除非buttonMethod返回方法,否則您將使用返回值buttonMethod作爲連接調用的最後一個參數。如果這個方法返回一個函數,那麼這就好了。

相反,我希望看到類似以下內容:

self.getButton(0, 0).buttonMethod # note no parenthesis at end 

看看提供的PyQt PyQt的例子目錄中,他們會表現出確切的語法,並作爲很好的例子。

這裏有一個小例子:

class MW(QMainWindow): 
    def __init__(self, *args) 
     QMainWindow.__init__(self, *args) 
     layout = QHBoxLayout(self) 
     self.b1 = QPushButton("Button1") 
     self.b2 = QPushButton("Button2") 
     layout.addWidget(self.b1) 
     layout.addWidget(self.b2) 
     self.connect(self.b1, SIGNAL("clicked()"), self.buttonWasPressed) 
     self.connect(self.b2, SIGNAL("clicked()"), self.buttonWasPressed) 

    def buttonWasPressed(self): 
     print "button %s was pressed" % self.sender() 
+0

在QT4你可以使用新的風格插槽和信號,在你的例子看起來會像: 'self.b1.clicked.connect(self.buttonWasPressed)' – mrossi 2013-01-29 07:34:31