繁体   English   中英

PyQt 中的单选按钮分组

[英]grouping radio buttons in PyQt

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 分组,即当 r0 被选中时,r1 应该被取消选中,对 ra 或 rb 的状态没有影响。 我怎样才能做到这一点? 代码表明我到目前为止已经尝试过。

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()

所有容器都可以对单选按钮进行分组。 您不一定需要 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM