连接QT设计器中的按钮数组



所以我在QT Designer GUI应用程序上有大量的按钮,全部命名为LED_i,其中I的范围从0-191,即:LED_0, LED_1,…, LED_191。我想基本上相同的事情发生时,点击除了改变输入I。所以,当点击LED_0将调用函数OnClick(0), LED_75将调用OnClick(75)等。

我正在连接我的按钮与

ui.LED_0.clicked.connect(OnClick0)

通常为每个按钮使用单独的功能。然而,这将需要191个函数,并且像上面那样的191行将我的按钮连接到它们的函数。我确信我可以编辑它。我可以通过传递被单击的按钮名称并从中获取数字来使用相同的函数,但这仍然需要191行button.clicked.connect。有什么办法能更有效地做到这一点吗?

TIA

PyQt5不是不可能的。这是一个很适合QButtonGroup。有几种方法可以接近它。

QButtonGroup using Designer

要在设计器中设置QButtonGroup,请执行以下操作:

  • 选择两个或多个按钮、单选框或复选框
  • 右键单击其中一个按钮,您将获得一个上下文菜单项,Assign to button group—>New button group

在此之后,您将看到buttonGroup(默认名称)出现在对象检查器中。

要在单击某个按钮时运行代码,可以使用QButtonGroup的buttonClicked信号。它会给你一个被点击的按钮的引用,从objectName中,你可以知道该怎么做。

ui.buttonGroup.buttonClicked.connect(self.OnClicked)

然后

def OnClicked(self, button):
# button objectName follows pattern LED_<number>
button_number = int(button.objectName()[4:])
... do stuff here with button_number

代码中的QButtonGroup

在最初的帖子中,设计师中有191个按钮。有很多按钮要排列。如果出于某种原因,你想在代码中完成它,你可以为每个按钮分配一个id,因为它被添加到组中,然后你可以使用idClicked信号:

grid = QGridLayout()
buttonGroup = QButtonGroup()
buttonGroup.idClicked.connect(OnClick)
buttonList = []
for row in range(14):
rowList = []
for col in range(14):
button_number = 14*row + col
button = QPushButton(f'{button_number}', objectName=f'LED_{button_number}')
rowList.append(button)
buttonGroup.addButton(button, button_number)
grid.addWidget(button, row, col)

然后

def OnClick(self, idClicked):
... do something with idClicked here


相关内容

  • 没有找到相关文章

最新更新