Я не мог понять метод connectSlotsByName(), который преимущественно используется pyuic4. Поскольку класс один в файле PyQt, это нормально, поскольку мы можем использовать self, который будет связан с одним объектом повсюду. Но когда мы попытаемся чтобы использовать различные классы из разных файлов, возникает проблема и необходимость использования connectSlotsByName(). Вот что я обнаружил, что странно..
Я создал виджет с накоплением..
Я разместил на нем свой первый виджет. На нем есть кнопка «Далее >».
При нажатии «Далее» он скрывает текущий виджет и добавляет другой виджет с кнопкой «щелкни меня».
Проблема здесь в том, что событие щелчка для кнопки «нажми меня» за секунду не фиксируется. Это минимальный пример, который я могу привести для моей исходной проблемы. Пожалуйста, помогите мне..
Это файл № 1.. (у которого есть родительский сложенный виджет и его первая страница). При нажатии «Далее» добавляется вторая страница с кнопкой «clickme» в файле2..
from PyQt4 import QtCore, QtGui
import file2
class Ui_StackedWidget(QtGui.QStackedWidget):
def __init__(self,parent=None):
QtGui.QStackedWidget.__init__(self,parent)
self.setObjectName("self")
self.resize(484, 370)
self.setWindowTitle(QtGui.QApplication.translate("self", "stacked widget", None, QtGui.QApplication.UnicodeUTF8))
self.createWidget1()
def createWidget1(self):
self.page=QtGui.QWidget()
self.page.setObjectName("widget1")
self.pushButton=QtGui.QPushButton(self.page)
self.pushButton.setGeometry(QtCore.QRect(150, 230, 91, 31))
self.pushButton.setText(QtGui.QApplication.translate("self", "Next >", None, QtGui.QApplication.UnicodeUTF8))
self.addWidget(self.page)
QtCore.QMetaObject.connectSlotsByName(self.page)
QtCore.QObject.connect(self.pushButton,QtCore.SIGNAL('clicked()'),self.showWidget2)
def showWidget2(self):
self.page.hide()
obj=file2.widget2()
obj.createWidget2(self)
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
ui = Ui_StackedWidget()
ui.show()
sys.exit(app.exec_())
Вот файл2
from PyQt4 import QtGui,QtCore
class widget2():
def createWidget2(self,parent):
self.page = QtGui.QWidget()
self.page.setObjectName("page")
self.parent=parent
self.groupBox = QtGui.QGroupBox(self.page)
self.groupBox.setGeometry(QtCore.QRect(30, 20, 421, 311))
self.groupBox.setObjectName("groupBox")
self.groupBox.setTitle(QtGui.QApplication.translate("self", "TestGroupBox", None, QtGui.QApplication.UnicodeUTF8))
self.pushButton = QtGui.QPushButton(self.groupBox)
self.pushButton.setGeometry(QtCore.QRect(150, 120, 92, 28))
self.pushButton.setObjectName("pushButton")
self.pushButton.setText(QtGui.QApplication.translate("self", "Click Me", None, QtGui.QApplication.UnicodeUTF8))
self.parent.addWidget(self.page)
self.parent.setCurrentWidget(self.page)
QtCore.QMetaObject.connectSlotsByName(self.page)
QtCore.QObject.connect(self.pushButton,QtCore.SIGNAL('clicked()'),self.printMessage)
def printMessage(self):
print("Hai")
Хотя в обоих виджетах (я имею в виду страницы)
QtCore.QMetaObject.connectSlotsByName(self.page)
сигнал щелчка во втором диалоговом окне не обрабатывается. Заранее спасибо.. Может быть вопрос новичка..