我需要在循环内生成按钮,并在该循环内为每个按钮分配不同的任务。
我知道已经有人问过类似的问题,通过进行一些搜索,我获得了以下代码:
def pressed_0():
print(0)
def pressed_1():
print(1)
def pressed_2():
print(2)
for i in range(0,3):
setattr(self,f"pressed_{i}", qtw.QPushButton(f"button {i}"))
exec(f"self.pressed_{i}.clicked.connect(lambda:pressed_{i}())")
self.layout().addWidget(getattr(self, f"pressed_{i}"))
我不太喜欢的是 exec() 函数和 setattr / getattr 的使用。 我问是否有更好的方法来完成我的需要。
尝试一下:
import sys
from PyQt5.Qt import *
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.layout = QVBoxLayout(self)
for i in range(0, 3):
button = QPushButton(f"button {i}")
button.clicked.connect(lambda ch, i=i: self._pressed(i))
self.layout.addWidget(button)
def _pressed(self, i):
print(i)
''' or
if i == 0:
print(0)
elif i == 1:
print(1)
elif i == 2:
print(2)
'''
if __name__ == "__main__":
app = QApplication(sys.argv)
app.setStyle('Fusion')
w = MainWindow()
w.show()
sys.exit(app.exec())