在for循环

时间:2016-02-22 13:05:16

标签: python pyqt

我有大约25-30个按钮,我必须连接到同一个功能。我不喜欢通过写

手动完成所有这些操作
self.__mybutton_1.clicked.connect(self.__MyConnectedFunction)

我的所有按钮都具有相同的命名布局,因此下一个按钮将是__mybutton_2。我想做那样的事情

for i in range(10):
    self.__mybutton_i.clicked.connect(self.__MyConnectedFunction)

在python中是否可以这样做以及如何做到这一点?

3 个答案:

答案 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)