【发布时间】:2014-07-30 10:10:20
【问题描述】:
我正在尝试创建一个子表单来读取程序中的文件。我有多个按钮,它们基本上在不同的文件上重复相同的过程。
按钮单击调用函数“loadfiles”。使用 lambda 函数传递给“loadfiles”的参数是字符串和标签。
self.btnPts.clicked.connect(lambda: self.loadfiles("PtsFile",self.label))
self.btnIll.clicked.connect(lambda: self.loadfiles("IllFile",self.label_2))
self.btnSigIll.clicked.connect(lambda: self.loadfiles("SigIll",self.label_3))
self.btn.clicked.connect(lambda: self.loadfiles("FutureFile",self.label_4)
有没有一种方法可以将所有按钮组合在一起并将这些语句压缩成一个语句(类似于 Excel VBA 中的事件)。
我可以将按钮添加到列表中,然后将“clicked.connect”绑定到它,以便它随时调用我的函数。
(我在两周前才开始使用 Python 编码,这是我第一次来这里。所以如果问题中提供的详细信息足够,请告诉我。)
更新 . .
我能够通过使用部分函数来完成这项工作。正如我在上面的问题中提到的,我想在单击按钮时将特定字符串和相关标签传递给函数。我想以不那么冗长的方式做到这一点。
我使用字典来存储我的按钮并使用标签作为键。然后我使用了一个 for 循环来遍历字典。
按钮 = {self.btnPts:self.label,self.btnIll:self.label_2,self.btnSigIll:self.label_3,self.btn:self.label_4}
for button in buttons:
button.clicked.connect(partial(self.loadfiles,button.objectName(),buttons[button]))
信用:我能够通过这个答案工作.. Connecting slots and signals in PyQt4 in a loop
【问题讨论】:
-
那么您是只想拥有一个按钮还是拥有多个功能相同的按钮?
-
嗨,我有多个按钮。我想调用相同的函数。
-
那又怎样?成功了吗?
-
没有。你能解释一下语法吗?我没有找到 on_clicked 函数。
-
天哪,你必须自己定义!
标签: python python-3.x pyqt