RadioBox信号混乱
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RadioBox信号混乱相关的知识,希望对你有一定的参考价值。
我试图创建多 QRadioButton
在不同 QGroupBox
. 之后,我想... print()
其中 QRadioButton
在屏幕上按下。
当我按下屏幕上的第一个按钮 QGroupBox
没有问题。然而,在第二次尝试中,第一个和第二个按钮打印到屏幕上。如果你试一下我的代码,你就会明白我的意思。
当代码工作正常后,我将为每个QRadioButton连接不同的功能。这就是为什么输出信号对我来说很重要的原因。
这是我的代码。
from PyQt5.QtWidgets import *
import sys
class ButtonWidget(QWidget):
def __init__(self):
super(ButtonWidget, self).__init__()
groups = "Functions": ("Sinus", "Cosines"),
"Colors": ("Red", "Green"),
"Lines": ("Solid", "Dashed")
# Main Group
main_group = QGroupBox("Operations")
main_group_layout = QHBoxLayout()
# loop on group names
for group, buttons in groups.items():
group_box = QGroupBox(group)
group_layout = QVBoxLayout()
for button_text in buttons:
button = QRadioButton(button_text)
button.setObjectName("radiobutton_%s" % button_text)
button.toggled.connect(self.radio_func)
group_layout.addWidget(button)
group_box.setLayout(group_layout)
main_group_layout.addWidget(group_box)
main_group.setLayout(main_group_layout)
# Widget
main_widget = QWidget()
main_widget_layout = QVBoxLayout()
main_widget.setLayout(main_widget_layout)
main_widget_layout.addWidget(main_group)
# Layout Set
self.setLayout(main_widget_layout)
self.show()
def radio_func(self):
radio_btn = self.sender()
print(f"radio_btn.text()\n-------------------")
if __name__ == "__main__":
app = QApplication(sys.argv)
ui = ButtonWidget()
sys.exit(app.exec_())
答案
拨动信号通知QRadioButton的状态变化,一开始所有的按钮都是未选中的,所以当按下一个按钮时,其中一个按钮的状态由未选中变为选中,当你按下另一个按钮时,那么选中的按钮变为未选中,而按下的由未选中变为选中,也就是说,有2个按钮的状态发生了变化,所以会发出2个信号。
一种可能的解决方案是使用信号传输的状态。
def radio_func(self, on):
if on:
radio_btn = self.sender()
print(f"radio_btn.text()\n-------------------")
另一个解决方案是使用点击的信号。
button.clicked.connect(self.radio_func)
以上是关于RadioBox信号混乱的主要内容,如果未能解决你的问题,请参考以下文章