2015-12-11 2 views
0

Существует класс GUI_XMLtool, который был сгенерирован из файла .ui QtDesigner. И есть класс 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 callable (метод), но это не так (это None), поэтому вы получаете TypeError.

Чтобы получить питона отозваны, вы просто используете self.someMethod

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

Спасибо большое –

Смежные вопросы