簡體   English   中英

為什么 PyQt 中的這段代碼允許我不選中所有單選按鈕?

[英]Why does this code in PyQt allow me to leave all radio buttons unchecked?

我使用 PyQt 編寫了一個迷你代碼,當我注意到它允許我不選中左側的所有按鈕時,我感到很驚訝。 我不想要這種行為:應該始終選擇其中之一。 不過,窗口的右側有效。 我真的不知道為什么。 這是代碼:

from PyQt5 import QtWidgets, QtGui, QtCore

class Win(QtWidgets.QDialog):
    def __init__(self, parent=None):
        super(Win, self).__init__(parent)
        top_layout = QtWidgets.QHBoxLayout()

        top_layout_1 = QtWidgets.QHBoxLayout()
        self.thresh_btns = [QtWidgets.QRadioButton('L1'),
                            QtWidgets.QRadioButton('L2'),
                            QtWidgets.QRadioButton('L3')]
        self.thresh_btns[0].setChecked(True)
        for btn in self.thresh_btns:
            top_layout_1.addWidget(btn)

        timestamp_groupbox = QtWidgets.QGroupBox('Timestamp')
        top_layout_2 = QtWidgets.QVBoxLayout()
        self.timestamp_current = QtWidgets.QRadioButton('Current')
        self.timestamp_current.setChecked(True)
        self.timestamp_target = QtWidgets.QRadioButton('Last')
        top_layout_2.addWidget(self.timestamp_current)
        top_layout_2.addWidget(self.timestamp_target)
        timestamp_groupbox.setLayout(top_layout_2)

        top_layout.addLayout(top_layout_1)
        top_layout.addWidget(timestamp_groupbox)
        self.setLayout(top_layout)

if __name__ == '__main__':
   app = QtWidgets.QApplication([])
   ex = Win()
   ex.show()
   app.exec_()

如果你想要這種行為,你必須使用QButtonGroup

from PyQt5 import QtCore, QtGui, QtWidgets

class Win(QtWidgets.QDialog):
    def __init__(self, parent=None):
        super(Win, self).__init__(parent)
        top_layout = QtWidgets.QHBoxLayout()

        top_layout_1 = QtWidgets.QHBoxLayout()
        self.thresh_btns = [QtWidgets.QRadioButton('L1'),
                            QtWidgets.QRadioButton('L2'),
                            QtWidgets.QRadioButton('L3')]
        group_button = QtWidgets.QButtonGroup(self) # <---
        self.thresh_btns[0].setChecked(True)
        for btn in self.thresh_btns:
            top_layout_1.addWidget(btn)
            group_button.addButton(btn)             # <---

        timestamp_groupbox = QtWidgets.QGroupBox('Timestamp')
        top_layout_2 = QtWidgets.QVBoxLayout()
        self.timestamp_current = QtWidgets.QRadioButton('Current')
        self.timestamp_current.setChecked(True)
        self.timestamp_target = QtWidgets.QRadioButton('Last')
        top_layout_2.addWidget(self.timestamp_current)
        top_layout_2.addWidget(self.timestamp_target)
        timestamp_groupbox.setLayout(top_layout_2)

        top_layout.addLayout(top_layout_1)
        top_layout.addWidget(timestamp_groupbox)
        self.setLayout(top_layout)

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    ex = Win()
    ex.show()
    sys.exit(app.exec_())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM