gpt4 book ai didi

python-3.x - RadioBox 信号困惑

转载 作者:行者123 更新时间:2023-12-04 09:51:12 24 4
gpt4 key购买 nike

我试图创建多个 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-------------------")

另一种解决方案是使用 clicked 信号:
button.clicked.connect(self.radio_func)

关于python-3.x - RadioBox 信号困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62009400/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com