我創建一個使用2個窗口簡單的應用程序,我想用pyqtsignal與按鈕連接,但是當我運行的應用程序的顯示信息「類型錯誤:pyqtSignal必須綁定到一個QObject,而不是‘Form1的’」:如何在PyQt中使用pyqtSignal連接2個窗口?
from PyQt4 import QtCore, QtGui
import form2
import sys
from functools import partial
from PyQt4.QtCore import pyqtSignal
from lib2to3.fixer_util import String
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class Form1(QtGui.QMainWindow):
Form2Signal = pyqtSignal(str, str)
def __init__(self, MainWindow):
MainWindow.setObjectName(_fromUtf8("MainWindow"))
MainWindow.resize(319, 147)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
self.bt_form1 = QtGui.QPushButton(self.centralwidget)
self.bt_form1.setGeometry(QtCore.QRect(110, 30, 101, 41))
self.bt_form1.setObjectName(_fromUtf8("bt_form1"))
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 319, 21))
self.menubar.setObjectName(_fromUtf8("menubar"))
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtGui.QStatusBar(MainWindow)
self.statusbar.setObjectName(_fromUtf8("statusbar"))
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
self.bt_form1.clicked.connect(self.Form2Signal.emit(String))
MainWindow.setWindowTitle(_translate("MainWindow", "Form_1", None))
self.bt_form1.setText(_translate("MainWindow", "FORM_1", None))
class Form2(QtGui.QMainWindow):
Form1Signal = pyqtSignal(str, str)
def __init__(self, MainWindow):
MainWindow.setObjectName(_fromUtf8("MainWindow"))
MainWindow.resize(319, 147)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
self.bt_form2 = QtGui.QPushButton(self.centralwidget)
self.bt_form2.setGeometry(QtCore.QRect(110, 30, 101, 41))
self.bt_form2.setObjectName(_fromUtf8("bt_form2"))
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 319, 21))
self.menubar.setObjectName(_fromUtf8("menubar"))
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtGui.QStatusBar(MainWindow)
self.statusbar.setObjectName(_fromUtf8("statusbar"))
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
self.bt_form2.clicked.connect(self.Form1Signal.emit)
MainWindow.setWindowTitle(_translate("MainWindow", "Form_2", None))
self.bt_form2.setText(_translate("MainWindow", "FORM_2", None))
class MainWidget(QtGui.QMainWindow):
def __init__(self, parent=None):
super(MainWidget, self).__init__(parent)
self.stack = QtGui.QStackedWidget()
layout = QtGui.QVBoxLayout(self)
layout.addWidget(self.stack)
self.form1 = Form1(self)
self.form2 = Form2(self)
self.stack.addWidget(self.form1)
self.stack.addWidget(self.form2)
self.form1.Form2Signal.connect(partial(self.stack.setCurrentWidget,self.form2))
self.form2.Form1Signal.connect(partial(self.stack.setCurrentWidget,self.form1))
self.stack.setCurrentWidget(self.form1)
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
w = MainWidget()
w.show()
app.exec_()
sys.exit()
這樣的線'self.bt_form1.clicked.connect(self.Form2Signal.emit(String))'沒有任何意義。你試圖用這行代碼做什麼?這也可能是一個好主意,通過閱讀教程來重新理解信號和插槽,如下所示:http://zetcode.com/gui/pyqt4/eventsandsignals/這種方式你可以解釋你正在嘗試做什麼稍微好一些,我們將能夠幫助 –