gpt4 book ai didi

python - 理解 pyqt 中的 connectSlotsByName() 有问题吗?

转载 作者:太空狗 更新时间:2023-10-30 02:06:35 25 4
gpt4 key购买 nike

我无法理解 pyuic4 主要使用的 connectSlotsByName() 方法。到目前为止,该类在 PyQt 文件中是单一的,这没关系,因为我们可以使用 self,它将始终与单个对象关联。但是当我们尝试使用来自不同文件的各种类时,问题和使用 connectSlotsByName() 的需要出现了。这就是我遇到的奇怪的情况。

我创建了一个堆叠小部件..

  • 我把我的第一个小部件放在上面..它有一个名为“Next >”的按钮。

  • 点击下一步它隐藏当前小部件并添加另一个带有“点击我”按钮的小部件..

这里的问题是第二个“单击我”按钮的单击事件没有被捕获。这是我可以为我的原始问题提供的一个最小示例。请帮助我。

这是 1 号文件..(它有父级堆叠小部件并且它是第一页)。单击下一步时,它会添加第二个页面,该页面在 file2 中有“clickme”按钮..

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)

第二个对话框中的点击信号没有得到处理。提前致谢..可能是一个初学者问题..

最佳答案

一个更好的问题是“为什么不只使用新型信号和槽?”。它们更简单,不需要任何奇怪的命名约定:

from sys import argv, exit
from PyQt4 import QtCore, QtGui

class MyWidget(QtGui.QWidget):
def __init__(self, parent=None):
super(MyWidget, self).__init__(parent)

self._layout = QtGui.QVBoxLayout()
self.setLayout(self._layout)

self._button = QtGui.QPushButton()
self._button.setText('Click NOW!')
self._layout.addWidget(self._button)

self._button.clicked.connect(self._printMessage)

@QtCore.pyqtSlot()
def _printMessage(self):
print("Hai")

if __name__ == "__main__":
app = QtGui.QApplication(argv)

main = MyWidget()
main.show()
exit(app.exec_())

关于python - 理解 pyqt 中的 connectSlotsByName() 有问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2462401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com