[英]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()
I am trying to group r0,r1 and ra,rb ie when r0 is checked, r1 should be unchecked with no effect on states of ra or rb.我试图将 r0,r1 和 ra,rb 分组,即当 r0 被选中时,r1 应该被取消选中,对 ra 或 rb 的状态没有影响。 How can I achieve this?我怎样才能做到这一点? The code indicates what I have tried so far.代码表明我到目前为止已经尝试过。
A QMainWindow
provides a layout already, you can't simply replace that with your own. QMainWindow
已经提供了布局,您不能简单地将其替换为您自己的布局。 Either inherit from a plain QWidget
, or create a new widget and add the layout and buttons to that.要么从一个普通的QWidget
继承,要么创建一个新的小部件并添加布局和按钮。
Your naming is confusing too, QButtonGroup
isn't a layout.您的命名也令人困惑, QButtonGroup
不是布局。 It doesn't actually provide any visible UI.它实际上并不提供任何可见的 UI。 If you need a UI element that groups buttons, you should look at QGroupBox
instead.如果您需要一个对按钮进行分组的 UI 元素,您应该查看QGroupBox
。
Here's a simple variation on what you have above:这是您上述内容的简单变化:
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()
Grouping of radio buttons can be done by all containers.所有容器都可以对单选按钮进行分组。 You don't necessarily need QGroupBox, you can use QFrame instead or a QTabWidget.您不一定需要 QGroupBox,您可以使用 QFrame 或 QTabWidget。 Your choice.你的选择。 Here's a sample code.这是一个示例代码。
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.