【问题标题】:grouping radio buttons in PyQt在 PyQt 中对单选按钮进行分组
【发布时间】:2013-01-25 17:21:44
【问题描述】:
import sys
from PyQt4 import QtCore, QtGui

class Class1(QtGui.QMainWindow):
    def __init__(self):
        super(Class1, self).__init__()
        self.func()

    def func(self):

        r0=QtGui.QRadioButton("0",self)
        r1=QtGui.QRadioButton("1",self)
        ra=QtGui.QRadioButton("a",self)
        rb=QtGui.QRadioButton("b",self)
        r0.move(100,100)
        r1.move(400,100)
        ra.move(100,400)
        rb.move(400,400)
        number_layout=QtGui.QButtonGroup()
        letter_layout=QtGui.QButtonGroup()
        number_layout.addButton(r0)
        number_layout.addButton(r1)
        letter_layout.addButton(ra)
        letter_layout.addButton(rb)
        layout=QtGui.QHBoxLayout(self)
        self.show()




def main():
    app = QtGui.QApplication(sys.argv)
    mw = Class1()
    mw.show()
    sys.exit(app.exec_())


if __name__=='__main__':
    main()

我正在尝试组r0,r1和ra,rb i.e.当检查R0时,应该不会检查R1,没有对RA或RB的状态影响。我怎样才能做到这一点?该代码表明了我到目前为止所尝试的内容。

【问题讨论】:

    标签: python qt4 pyqt pyqt4


    【解决方案1】:

    QMainWindow 已经提供了一个布局,您不能简单地将其替换为您自己的。要么从普通的QWidget 继承,要么创建一个新的小部件并将布局和按钮添加到其中。

    您的命名也令人困惑,QButtonGroup 不是布局。它实际上并没有提供任何可见的 UI。如果您需要对按钮进行分组的 UI 元素,则应改为查看 QGroupBox

    这是您上面的一个简单变化:

    def func(self):
        layout=QtGui.QHBoxLayout()  # layout for the central widget
        widget=QtGui.QWidget(self)  # central widget
        widget.setLayout(layout)
    
        number_group=QtGui.QButtonGroup(widget) # Number group
        r0=QtGui.QRadioButton("0")
        number_group.addButton(r0)
        r1=QtGui.QRadioButton("1")
        number_group.addButton(r1)
        layout.addWidget(r0)
        layout.addWidget(r1)
    
        letter_group=QtGui.QButtonGroup(widget) # Letter group
        ra=QtGui.QRadioButton("a")
        letter_group.addButton(ra)
        rb=QtGui.QRadioButton("b")
        letter_group.addButton(rb)
        layout.addWidget(ra)
        layout.addWidget(rb)
    
        # assign the widget to the main window
        self.setCentralWidget(widget)
        self.show()
    

    【讨论】:

    • 你好。很抱歉复活了 3 岁的答案,但是您能否添加如何使用 QGroupBox 的示例?我找不到 QGroupBox 的任何示例,并且文档很难理解
    • @KarelBílek 是的,我也是。
    【解决方案2】:

    单选按钮的分组可以由所有容器完成。您不一定需要 QGroupBox,您可以使用 QFrame 或 QTabWidget。你的选择。这是一个示例代码。

        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.layoutWidget1 = QtWidgets.QWidget(self.centralwidget)
        self.frame_1       = QtWidgets.QFrame(self.layoutWidget1)
        self.radio_btn_a   = QtWidgets.QRadioButton(self.frame_1)
        self.radio_btn_a.setGeometry(QtCore.QRect(160, 80, 40, 17))
        self.radio_btn_a.setObjectName("radio_btn_a")
        MainWindow.setCentralWidget(self.centralwidget)
    

    【讨论】:

      猜你喜欢
      • 2013-06-02
      • 1970-01-01
      • 2011-11-01
      • 2013-06-14
      • 2012-06-12
      • 1970-01-01
      • 1970-01-01
      • 2013-10-09
      • 2014-03-30
      相关资源
      最近更新 更多