我不明白矩阵是什么类型的结构,但我认为它相当于一个字典列表。
问题是您必须将其作为参数传递给分配它的 lambda 函数,单击的信号采用一个布尔值作为参数,该布尔值指示按钮是否被选中(默认情况下此属性被禁用,因此该值为 false ),您必须添加另一个参数。
class App(QMainWindow):
def launch(self, filepath):
subprocess.run(filepath)
def __init__(self):
super(App, self).__init__()
matrix = [{"path": "path1", "setIcon": "icon1", "posx": 0, "posy": 0},
{"path": "path2", "setIcon": "icon2", "posx": 0, "posy": 150},
{"path": "path3", "setIcon": "icon3", "posx": 0, "posy": 300}]
for value in matrix:
filepath = value['path']
icon = value['setIcon']
posx = value['posx']
posy = value['posy']
btn = QToolButton(self)
btn.setIcon(QIcon(icon))
btn.setIconSize(QSize(64, 64))
btn.resize(100, 100)
btn.move(posx, posy)
btn.clicked.connect(lambda checked, arg=filepath: self.launch(arg))
self.initUI()
def initUI(self):
self.setGeometry(150, 150, 1250, 650)
self.setWindowTitle('LinuxLauncher')
self.show()