是否可以完全删除标题QGroupBox?如果你只是给它一个空标题,标题所在的标签仍会占用空间.它看起来像这样:
但我希望它看起来像这样:
我没有成功地尝试了以下事项:
setStyleSheet("QGroupBox:title{ max-width: 0; max-height: 0; }");setStyleSheet("QGroupBox:title{ subcontrol-position: center center;}")注意:您可能会说没有标题的组框是用例QFrame.这个问题是我想要混合有和没有标题的组/帧,但框架具有与组框不同的视觉风格.所以,如果你能告诉我如何使这样QFrame看起来QGroupBox也能解决我的问题.
我正在试图找出如何使用QGroupBox小部件代替QButtonGroup小部件,因为qt docs(下面的链接)'强烈建议不要使用它'.
https://doc.qt.io/archives/qt-4.7/q3buttongroup.html
QButtonGroup有一个方便的方法调用QtGui.QButtonGroup.checkedButton(),我正在寻找一种方法来查找QGroupBox中包含的已检查单选按钮.这是什么新的最佳做法?
我想设计一个QGroupBox符合某些设计要求的样式:
注意 - 顶部的组标题应位于左侧,但应超过框曲率.
使用以下样式表,我得到下面的图像(如果我删除单词"left",则为第二个图像):
QGroupBox {
font: bold;
border: 1px solid silver;
border-radius: 6px;
margin-top: 6px;
}
QGroupBox::title {
subcontrol-origin: margin;
subcontrol-position: top left; // for second image: top;
padding: 0 2px 0 2px;
}
Run Code Online (Sandbox Code Playgroud)
所以,看起来我想要的subcontrol-position: top left;只是增加了偏移量.我找不到任何地方.
添加填充会删除该行,因此它不是我想要的.
我刚才找到了一个选项 - 一个不同的选项subcontrol-origin::
QGroupBox::title {
subcontrol-origin: padding;
subcontrol-position: top left;
padding: -16 12px 0 12px;
}
Run Code Online (Sandbox Code Playgroud)
它看起来几乎是正确的 - 但边界现在切入标题.
如何移动组合框的标题,使其仍然在左侧但是超过框曲率,并且曲率保持可见,例如在设计中?
我正在尝试将 QPushButton 小部件添加到 QGroupBox 中,例如:
self.btn = QtGui.QPushButton('Push Button')
self.grp_box = QtGui.QGroupBox('Button Section')
self.grp_box.addWidget(self.btn)
Run Code Online (Sandbox Code Playgroud)
当尝试运行代码时,我收到此错误:AttributeError: 'NoneType' object has no attribute 'addWidget'
经过一些在线检查,似乎 QGroupBox 只允许setLayout,这意味着我需要使用QVBoxLayout或QHBoxLayout等。
有没有办法解决这个问题,在不使用任何布局的情况下添加小部件?我正在使用 PyQt。
我创建了一个简单的 UI,其中包含QGroupBox一堆QRadioButtons(确切地说是 32 个),我希望能够找到所选的一个。
我查看了论坛和其他东西,但我找到的答案不起作用,并且一个参考文档涉及一种不存在的QGroupBox.
鉴于以下代码片段,我将如何找到选定的QRadioButton(如果有)?
QGroupBox* thingGroup = ui->thingGroupBox;
Run Code Online (Sandbox Code Playgroud) 假设我有一个带有许多 QGroupBox 的应用程序,如下所示:
import sys
from PyQt4 import QtGui, QtCore
class Main(QtGui.QWidget):
# pylint: disable=too-many-statements
def __init__(self, main):
super(Main, self).__init__()
self.grid_layout = QtGui.QGridLayout()
self.line_edit = QtGui.QLineEdit()
self.grid_layout.addWidget(self.create_settings_group(), 0, 0, 2, 1)
self.push_button = QtGui.QPushButton("go", self)
self.grid_layout.addWidget(self.create_controls_group(), 0, 1)
self.setLayout(self.grid_layout)
main.setCentralWidget(self)
def create_settings_group(self):
group_box_settings = QtGui.QGroupBox(self)
group_box_settings.setTitle("group1")
grid = QtGui.QGridLayout()
grid.addWidget(self.line_edit, 0, 0)
group_box_settings.setLayout(grid)
return group_box_settings
def create_controls_group(self):
group_box_settings = QtGui.QGroupBox(self)
group_box_settings.setTitle("group2")
grid = QtGui.QGridLayout()
grid.addWidget(self.push_button, 0, 0, 1, 2)
group_box_settings.setLayout(grid)
return group_box_settings
class GUI(QtGui.QMainWindow):
def __init__(self):
super(GUI, self).__init__()
self.ui = …Run Code Online (Sandbox Code Playgroud) 与我们在 PyQt Layout 中 Loop over widgets 的问题类似,但有点复杂...
我有
QVGridLayout
QGroupBox
QGridLayout
QLineEdit
Run Code Online (Sandbox Code Playgroud)
我想访问 QLineEdit 但到目前为止我不知道如何访问 QGroupBox 的孩子
for i in range(self.GridLayout.count()):
item = self.GridLayout.itemAt(i)
for i in range(item.count()):
lay = item.itemAt(i)
edit = lay.findChildren(QLineEdit)
print edit.text()
Run Code Online (Sandbox Code Playgroud)
any1可以指出我正确的方向吗?
我已经将QGroupBox类子类化,并启用了checkable属性.我试图覆盖切换/检查事件的行为.
这是代码:
class SideWidgetGroupBox: public QGroupBox
{
Q_OBJECT
public:
SideWidgetGroupBox(QWidget* parent = 0): QGroupBox(parent)
{
this->setCheckable(true);
connect(this, SIGNAL(toggled(bool)), this, SLOT(my_toggled(bool)));
}
private slots:
void my_toggled (bool on)
{
std::cout << "my toggled method" <<std::endl;
}
};
Run Code Online (Sandbox Code Playgroud)
到目前为止,我的插槽已被执行.但是,组框的内容也会启用/禁用.有办法防止这种情况吗?或者我是否必须手动重置原始启用/禁用状态?
我正在尝试制作一个可以执行各种不同操作的工具箱小部件。但我在 QScrollArea 的布局管理方面遇到了麻烦。在代码的剥离版本之后,我有:
from PyQt5 import QtWidgets
import sys
class MyScrollWidget(QtWidgets.QWidget):
def __init__(self):
super(MyScrollWidget, self).__init__()
scrollArea = QtWidgets.QScrollArea(self)
top_widget = QtWidgets.QWidget()
top_layout = QtWidgets.QVBoxLayout()
for i in range(10):
group_box = QtWidgets.QGroupBox()
group_box.setTitle('GroupBox For Item {0}'.format(i))
layout = QtWidgets.QHBoxLayout(group_box)
label = QtWidgets.QLabel()
label.setText('Label For Item {0}'.format(i))
layout.addWidget(label)
push_button = QtWidgets.QPushButton(group_box)
push_button.setText('Run Button')
push_button.setFixedSize(100, 32)
layout.addWidget(push_button)
group_box.setLayout(layout)
top_layout.addWidget(group_box)
top_widget.setLayout(top_layout)
scrollArea.setWidget(top_widget)
self.resize(200, 500)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
widget = MyScrollWidget()
widget.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
但这只给了我滚动的小部件的一小部分固定部分。但我真正想要的是,如果小部件/窗口小于所有组框的总大小,则整个小部件可以滚动。即,我希望使用该小部件,就像它都是固定宽度一样,但如果用户将小部件调整为小于该宽度,它将适当滚动。我尝试了各种不同的方法,但没有取得好的结果,所以现在我听从那些在布局管理方面比我更有经验的人。谢谢您的宝贵时间。
我有一个 QMainWindow,其中的小部件排列在网格中。当窗口按预期调整大小时,它们都按比例调整大小,除了放置在 QGroupBox 内的小部件。QGroupBox 本身会调整大小,但里面的小部件只是停留在同一个地方。如果我在 QGroupBox 上应用布局,小部件将失去其原始位置。请注意,我将 .ui 文件与 PyQt4 一起使用。您可以在此处获取该文件。
这就是发生的事情:
我有一个分组框,如下所示:
QGroupBox{
background-color: #000044;
font: 12px consolas;
color: cyan;
}
Run Code Online (Sandbox Code Playgroud)
我希望边框更蓝,然后我得到:
QGroupBox{
border: 1px solid cyan;
background-color: #000044;
font: 12px consolas;
color: cyan;
}
Run Code Online (Sandbox Code Playgroud)
标题未与组框的顶部边框居中,我不知道该怎么做。
编辑:
ekhumoro 提出的可能解决方案不起作用。我想念左上角。
QGroupBox{
border: 1px solid cyan;
background-color: #000044;
font: 12px consolas;
color: cyan;
margin-top: 0.5em;
}
QGroupBox::title {
padding-top: -16px;
padding-left: 8px;
}
Run Code Online (Sandbox Code Playgroud)
QGroupBox{
border: 1px solid cyan;
background-color: #000044;
font: 12px consolas;
color: cyan;
margin-top: 0.5em;
}
QGroupBox::title {
background-color: transparent;
padding-top: -16px;
padding-left: 8px;
}
Run Code Online (Sandbox Code Playgroud) 我正在 PYQT 5 中制作一个用户界面。它包括一个包含几个 QRadioButton 的 QGroupBox。当发生切换事件时,我检查按钮并执行一些操作。问题是有两个切换事件,因为一个按钮打开,一个按钮关闭,所以我的代码总是运行两次。
我一直在寻找来自 QGroupBox 的事件。当我切换单选按钮时,这种情况应该只发生一次而不是两次。
def __init__(self):
self.radioButton1.toggled.connect(self.update_stimulus)
self.radioButton2.toggled.connect(self.update_stimulus)
self.radioButton3.toggled.connect(self.update_stimulus)
def update_stimulus(self):
if self.radioButton1.isChecked():
print('1')
if self.radioButton2.isChecked():
print('2')
if self.radioButton3.isChecked():
print('3')
# Do stuff based on button positions
Run Code Online (Sandbox Code Playgroud)
我尝试使用
self.groupBox.toggled.connect(self.update_stimulus)
Run Code Online (Sandbox Code Playgroud)
但这仅在组框本身被切换时才有效。当其中一个单选按钮发生变化时,有什么方法可以从组框中获取信号,或者我是否必须找到某种方法来处理来自单选按钮的单独信号?
qgroupbox ×12
pyqt ×6
qt ×6
python ×4
c++ ×2
pyqt5 ×2
qt5 ×2
button ×1
checkbox ×1
overriding ×1
pyqt4 ×1
qbuttongroup ×1
qpushbutton ×1
qradiobutton ×1
qscrollarea ×1
qt-designer ×1
qt4.7 ×1
qwidget ×1
resize ×1
toggle ×1
widget ×1