在 PyQT 中以编程方式生成按钮

问题描述 投票:0回答:1

我需要在循环内生成按钮,并在该循环内为每个按钮分配不同的任务。
我知道已经有人问过类似的问题,通过进行一些搜索,我获得了以下代码:

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 的使用。 我问是否有更好的方法来完成我的需要。

pyqt pyqt5
1个回答
0
投票

尝试一下:

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())

© www.soinside.com 2019 - 2024. All rights reserved.