gpt4 book ai didi

python - 将参数传递给 PyQt SIGNAL 连接

转载 作者:行者123 更新时间:2023-11-28 22:50:12 27 4
gpt4 key购买 nike

是否可以将参数传递给 PyQt4 信号连接?在我的例子中,我有 n 个按钮,它们设置了在界面上动态创建的相同菜单,具体取决于用户的输入:

for j in range(0, len(self.InputList)):

arrow = QtGui.QPushButton(Form)
arrow.setGeometry(QtCore.QRect(350, 40*(j+3)+15, 19, 23))

menu = QtGui.QMenu(Form)
for element in SomeList:
cb = QtGui.QRadioButton(element,menu)
ca = QtGui.QWidgetAction(menu)
ca.setDefaultWidget(cb)
QtCore.QObject.connect(cb,QtCore.SIGNAL("stateChanged(int)"),self.SomeFunction)
arrow.setMenu(menu)

虽然进入界面的所有按钮的菜单都是相同的,但用户应该能够从任何按钮中选择一个值,并且对于其中任何一个,操作都是相同的(“将所选值添加到行编辑”),唯一的区别是行编辑可能是 1st 以及 23

那么我想问的是,是否有任何方法可以在此处传递参数j:

QtCore.QObject.connect(cb,QtCore.SIGNAL("stateChanged(int)"),self.SomeFunction(j))

示例:

在这次执行中,用户的输入是 3,所以我将有 3 行编辑和三个具有相同菜单的按钮:

Line Edit 1:
Line Edit 2:
Line Edit 3:

使用相同的函数 SomeFunction,我想编辑 Line Edits 的值。因此,如果用户正在触摸附加到第二行编辑的菜单,则应使用参数 2 SomeFunction(2) 调用函数 SomeFunction,因此可以理解相同的方法本身哪个行编辑是正确的:

Line Edit 1:
Line Edit 2: modified
Line Edit 3:

我需要这个,因为主窗口中行编辑的数量取决于用户选择的内容。我是一个新手,到目前为止,我总是为 GUI 中的任何对象创建一个函数,但这次数字是动态的,我确信有一些更优雅的方法来创建这种信号连接,我虽然到目前为止我的文档阅读还没有理解。

最佳答案

这是一种不同的方法:不是将数据作为参数附加到信号处理程序,而是将其附加到菜单项本身。这提供了更大的灵 active ,因为数据没有隐藏在匿名函数中,因此可以由应用程序的任何部分访问。

实现起来非常容易,因为Qt已经提供了必要的API。如果您采用这种方法,您的示例代码将如下所示:

        for j in range(0, len(self.InputList)):

arrow = QtGui.QPushButton(self)
arrow.setGeometry(QtCore.QRect(350, 40*(j+3)+15, 19, 23))

menu = QtGui.QMenu(self)
group = QtGui.QActionGroup(menu)
for element in SomeList:
action = menu.addAction(element)
action.setCheckable(True)
action.setActionGroup(group)
action.setData(j)
arrow.setMenu(menu)

group.triggered.connect(self.SomeFunction)

def SomeFunction(self, action):
print(action.data())

关于python - 将参数传递给 PyQt SIGNAL 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22856614/

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