【问题标题】:How to get the checked radiobutton from a groupbox in pyqt如何从pyqt中的组框中获取选中的单选按钮
【发布时间】:2013-07-01 10:36:46
【问题描述】:

我有一个带有一些单选按钮的组合框。我如何知道哪个被选中。

【问题讨论】:

    标签: pyqt4


    【解决方案1】:

    另一种方法是使用按钮组。例如:

    import sys
    from PyQt4.QtGui import *
    from PyQt4.QtCore import *
    
    class MoodExample(QGroupBox):
    
        def __init__(self):
            super(MoodExample, self).__init__()
    
            # Create an array of radio buttons
            moods = [QRadioButton("Happy"), QRadioButton("Sad"), QRadioButton("Angry")]
    
            # Set a radio button to be checked by default
            moods[0].setChecked(True)
    
            # Radio buttons usually are in a vertical layout
            button_layout = QVBoxLayout()
    
            # Create a button group for radio buttons
            self.mood_button_group = QButtonGroup()
    
            for i in xrange(len(moods)):
                # Add each radio button to the button layout
                button_layout.addWidget(moods[i])
                # Add each radio button to the button group & give it an ID of i
                self.mood_button_group.addButton(moods[i], i)
                # Connect each radio button to a method to run when it's clicked
                self.connect(moods[i], SIGNAL("clicked()"), self.radio_button_clicked)
    
            # Set the layout of the group box to the button layout
            self.setLayout(button_layout)
    
        #Print out the ID & text of the checked radio button
        def radio_button_clicked(self):
            print(self.mood_button_group.checkedId())
            print(self.mood_button_group.checkedButton().text())
    
    app = QApplication(sys.argv)
    mood_example = MoodExample()
    mood_example.show()
    sys.exit(app.exec_())
    

    我在以下位置找到了更多信息:

    http://codeprogress.com/python/libraries/pyqt/showPyQTExample.php?index=387&key=QButtonGroupClick

    http://www.pythonschool.net/pyqt/radio-button-widget/

    【讨论】:

    • button_group.checkedButton() 是这里的重要部分,以防有人不想浏览所有代码。
    【解决方案2】:

    您将需要遍历组框中的所有单选按钮并检查每个单选框的属性isChecked()

    例如:

    radio1 = QtGui.QRadioButton("button 1")
    radio2 = QtGui.QRadioButton("button 2")
    radio3 = QtGui.QRadioButton("button 3")
    
    for i in range(1,4):
        buttonname = "radio" + str(i)
        if buttonname.isChecked():
            print buttonname + "is Checked"
    

    供参考,请查看http://pyqt.sourceforge.net/Docs/PyQt4/qradiobutton.html

    【讨论】:

    • 很好的解决方案。但是如果我不知道有多少单选按钮,我该如何更改?
    • 在从0到大数的迭代中使用try和catch,当你得到复选框时你应该打破循环,如果复选框不存在则捕获异常。
    【解决方案3】:

    我设法通过结合使用索引和循环来解决这个问题。

    indexOfChecked = [self.ButtonGroup.buttons()[x].isChecked() for x in range(len(self.ButtonGroup.buttons()))].index(True)
    

    【讨论】:

    • 为什么不简单:self.ButtonGroup.checkedId()
    • 当有多个按钮组时,这对我不起作用。我不断收到诸如 -4、-3 等条目:(
    • 只有在添加按钮时没有设置 ID 时才会发生这种情况。所以像这样添加它们:self.ButtonGroup.addButton(button, index).
    【解决方案4】:
        def izle(self):
            radios=["radio1","radio2","radio3","radio4"]
    
            for i in range(0,4):
                selected_radio = self.ui.findChild(QtGui.QRadioButton, self.radios[i])
                if selected_radio.isChecked():
                    print selected_radio.objectName() + "is Checked"
    

    【讨论】:

      【解决方案5】:

      您可以从所需的父级获取类的所有 chaild 对象。像

      class MainWindow(QMainWindow, Ui_MainWindow):
          def __init__(self, parent=None, *args, **kwargs):
              super(MainWindow, self).__init__(*args, **kwargs)
              self.setupUi(self)
              self.show()
      
              print(self.getCheckedRbName(self.gbRadioButtonsGroup))
      
          def getCheckedRbName(self, rbParent: QWidget) -> str:
              for rb in rbParent.findChildren(QRadioButton):
                  if rb.isChecked():
                      return rb.objectName()
      

      给你

      #> 'rbThirdOption' is checked
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-06
        • 2019-10-01
        • 1970-01-01
        • 2020-06-11
        • 1970-01-01
        • 2021-10-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多