标签: qgroupbox

从QGroupBox中删除标题

是否可以完全删除标题QGroupBox?如果你只是给它一个空标题,标题所在的标签仍会占用空间.它看起来像这样:

在此输入图像描述

但我希望它看起来像这样:

在此输入图像描述

我没有成功地尝试了以下事项:

  • 将标题字体大小设置为零
  • 通过样式表在标题大小为零 setStyleSheet("QGroupBox:title{ max-width: 0; max-height: 0; }");
  • 通过框移动标题 setStyleSheet("QGroupBox:title{ subcontrol-position: center center;}")

注意:您可能会说没有标题的组框是用例QFrame.这个问题是我想要混合有和没有标题的组/帧,但框架具有与组框不同的视觉风格.所以,如果你能告诉我如何使这样QFrame看起来QGroupBox也能解决我的问题.

c++ qt qt5 qtstylesheets qgroupbox

9
推荐指数
2
解决办法
2151
查看次数

如何使用QGroupBox代替QButtonGroup

我正在试图找出如何使用QGroupBox小部件代替QButtonGroup小部件,因为qt docs(下面的链接)'强烈建议不要使用它'.

https://doc.qt.io/archives/qt-4.7/q3buttongroup.html

QButtonGroup有一个方便的方法调用QtGui.QButtonGroup.checkedButton(),我正在寻找一种方法来查找QGroupBox中包含的已检查单选按钮.这是什么新的最佳做法?

qt button qt4.7 qgroupbox qbuttongroup

6
推荐指数
1
解决办法
2857
查看次数

调整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)

它看起来几乎是正确的 - 但边界现在切入标题.

在此输入图像描述

如何移动组合框的标题,使其仍然在左侧但是超过框曲率,并且曲率保持可见,例如在设计中?

qt qtstylesheets qgroupbox

6
推荐指数
1
解决办法
4275
查看次数

将小部件添加到 QGroupBox 中

我正在尝试将 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,这意味着我需要使用QVBoxLayoutQHBoxLayout等。

有没有办法解决这个问题,在不使用任何布局的情况下添加小部件?我正在使用 PyQt。

pyqt widget qgroupbox

6
推荐指数
1
解决办法
9363
查看次数

QGroupBox 找到选定的单选按钮

我创建了一个简单的 UI,其中包含QGroupBox一堆QRadioButtons(确切地说是 32 个),我希望能够找到所选的一个。

我查看了论坛和其他东西,但我找到的答案不起作用,并且一个参考文档涉及一种不存在的QGroupBox.

鉴于以下代码片段,我将如何找到选定的QRadioButton(如果有)?

QGroupBox* thingGroup = ui->thingGroupBox;
Run Code Online (Sandbox Code Playgroud)

c++ qt qt5 qradiobutton qgroupbox

6
推荐指数
1
解决办法
5666
查看次数

将焦点设置在带有组框的应用程序中的按钮上

假设我有一个带有许多 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)

python pyqt pyqt4 qpushbutton qgroupbox

5
推荐指数
2
解决办法
4167
查看次数

在布局内的小部件内循环小部件

与我们在 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可以指出我正确的方向吗?

python pyqt qgroupbox

4
推荐指数
2
解决办法
2697
查看次数

覆盖可检查的QGroupBox切换行为

我已经将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)

到目前为止,我的插槽已被执行.但是,组框的内容也会启用/禁用.有办法防止这种情况吗?或者我是否必须手动重置原始启用/禁用状态?

checkbox qt overriding toggle qgroupbox

3
推荐指数
1
解决办法
2564
查看次数

带有动态创建的 GroupBox 的 PyQt5 QScrollArea 小部件

我正在尝试制作一个可以执行各种不同操作的工具箱小部件。但我在 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)

但这只给了我滚动的小部件的一小部分固定部分。但我真正想要的是,如果小部件/窗口小于所有组框的总大小,则整个小部件可以滚动。即,我希望使用该小部件,就像它都是固定宽度一样,但如果用户将小部件调整为小于该宽度,它将适当滚动。我尝试了各种不同的方法,但没有取得好的结果,所以现在我听从那些在布局管理方面比我更有经验的人。谢谢您的宝贵时间。

python pyqt qscrollarea qgroupbox pyqt5

3
推荐指数
1
解决办法
2626
查看次数

为什么 QGroupBox 小部件不会随着窗口的其余部分动态调整大小?

我有一个 QMainWindow,其中的小部件排列在网格中。当窗口按预期调整大小时,它们都按比例调整大小,除了放置在 QGroupBox 内的小部件。QGroupBox 本身会调整大小,但里面的小部件只是停留在同一个地方。如果我在 QGroupBox 上应用布局,小部件将失去其原始位置。请注意,我将 .ui 文件与 PyQt4 一起使用。您可以在此处获取该文件。

这就是发生的事情:

在此处输入图片说明

在此处输入图片说明

qt resize pyqt qwidget qgroupbox

2
推荐指数
1
解决办法
4755
查看次数

标题在组框中的位置

我有一个分组框,如下所示:

在此输入图像描述

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)

qt-designer qtstylesheets qgroupbox

2
推荐指数
1
解决办法
4507
查看次数

当 QGroupbox 中的单选按钮之一更改时,我可以从 QGroupbox 获取信号吗?

我正在 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)

但这仅在组框本身被切换时才有效。当其中一个单选按钮发生变化时,有什么方法可以从组框中获取信号,或者我是否必须找到某种方法来处理来自单选按钮的单独信号?

python pyqt qgroupbox pyqt5

1
推荐指数
1
解决办法
3869
查看次数