我有大约25-30个按钮,我必须连接到同一个功能。我不喜欢通过写
手动完成所有这些操作self.__mybutton_1.clicked.connect(self.__MyConnectedFunction)
我的所有按钮都具有相同的命名布局,因此下一个按钮将是__mybutton_2
。我想做那样的事情
for i in range(10):
self.__mybutton_i.clicked.connect(self.__MyConnectedFunction)
在python中是否可以这样做以及如何做到这一点?
答案 0 :(得分:1)
这是可能的,但不推荐。您可以使用eval("self.__mybutton_{}".format(i)).connect(self.__MyConnectedFunction)
,但最好创建一个按钮列表并改为使用buttons[i]
。
答案 1 :(得分:0)
如果所有按钮都是同一个窗口小部件/窗口的子窗口,您可以使用QObject.findChildren
方法动态获取按钮列表:
btns = self.findChildren(QtGui.QPushButton, QtCore.QRegExp(r'__mybutton_\d+'))
for btn in btns:
btn.connect(self._MyConnectedFunction)
这也假设您将按钮的objectName
设置为与其python变量名称相同的名称(.ui
文件应该已经存在)。
这样做的好处是,您可以在将来添加更多按钮,只要您遵守命名约定(__my_button_#
),连接代码就会自动连接它。
答案 2 :(得分:0)
是的,您可以使用getattr完全按照自己的意愿执行操作:
for i in range(10):
button = getattr(self, '__mybutton_%s' % i)
button.clicked.connect(self.__MyConnectedFunction)