2015-12-11 64 views
0

從.ui QtDesigner文件生成了類GUI_XMLtool。 還有一個MyApp類。現在我正嘗試將PushButton(XSD_path_PB)單擊連接到MyApp方法調用。我通過兩種方式tryng(其中一個被註釋掉)PyQt4 PushButton連接問題

from PyQt4 import QtCore, QtGui 
from GUI import GUI_XMLtool 
import sys 

class MyApp(QtGui.QMainWindow, GUI_XMLtool): 
    def __init__(self): 
     QtGui.QMainWindow.__init__(self) 

     self.ui = GUI_XMLtool() 
     self.ui.setupUi(self) 

     self.connect(self.ui.XSD_path_PB, QtCore.SIGNAL("clicked()"), self.someMethod()) 
     #self.ui.XSD_path_PB.clicked.connect(self.someMethod()) 

    def someMethod(self): 
     print "wahwah" 

if __name__ == "__main__": 
    app = QtGui.QApplication(sys.argv) 
    window = MyApp() 
    window.show() 
    sys.exit(app.exec_()) 

這是最簡單的事情,但我得到一個可怕的錯誤跟蹤:

wahwah 
Traceback (most recent call last): 
    File "C:/Users/***/PycharmProjects/XMLTool/GUI/Main.py", line 20, in <module> 
    window = MyApp() 
    File "C:/Users/***/PycharmProjects/XMLTool/GUI/Main.py", line 12, in __init__ 
    self.connect(self.ui.XSD_path_PB, QtCore.SIGNAL("clicked()"), self.someMethod()) 
TypeError: arguments did not match any overloaded call: 
    QObject.connect(QObject, SIGNAL(), QObject, SLOT(), Qt.ConnectionType=Qt.AutoConnection): argument 3 has unexpected type 'NoneType' 
    QObject.connect(QObject, SIGNAL(), callable, Qt.ConnectionType=Qt.AutoConnection): argument 3 has unexpected type 'NoneType' 
    QObject.connect(QObject, SIGNAL(), SLOT(), Qt.ConnectionType=Qt.AutoConnection): argument 3 has unexpected type 'NoneType' 

有什麼不對?

回答

0

隨着新型信號和插槽(一個註釋),你應該寫:

self.ui.XSD_path_PB.clicked.connect(self.someMethod) 

,而不是

self.ui.XSD_path_PB.clicked.connect(self.someMethod()) 

當執行第二行,self.someMethod()被調用,並返回一個值(在你的情況下默認返回值None)。然後,用此值調用connect。它期望這個值是一個Python可調用的(一種方法),但它不是(它是None),所以你得到一個TypeError

要獲得Python中調用,您只需使用self.someMethod

>>>type(someMethod)                             
<class 'function'> 
+0

太謝謝你了 –