【问题标题】:PyQt widget alignment with other elementsPyQt 小部件与其他元素对齐
【发布时间】:2015-12-20 15:13:28
【问题描述】:

考虑这个应该显示两个 GroupBox 的小型 GUI 示例。第一个放在自定义的QWidget中:

import sys
from PyQt4 import QtGui

class SomeBoxWidget(QtGui.QWidget):
    def __init__(self):
        super(SomeBoxWidget, self).__init__()

        #create GroupBox and layout
        self.group_box = QtGui.QGroupBox("group box in widget")
        self.group_box_layout = QtGui.QVBoxLayout()
        self.group_box.setLayout(self.group_box_layout)

        #place some stuff there
        self.btn = QtGui.QPushButton("button", self)
        self.group_box_layout.addWidget(self.btn)

        self.main_layout = QtGui.QVBoxLayout()
        self.main_layout.addWidget(self.group_box)
        self.setLayout(self.main_layout)

这个 QWidget 放置在第二个 QGroupBox 旁边,该 QGroupBox 直接放置在主 GUI 布局中:

class SomeGui(QtGui.QWidget):

    def __init__(self):
        super(SomeGui, self).__init__()

        #create 2nd GroupBox and layout
        self.group_box = QtGui.QGroupBox("group box in layout")
        self.group_box_layout = QtGui.QVBoxLayout()
        self.group_box.setLayout(self.group_box_layout)

        self.btn = QtGui.QPushButton("button", self)
        self.group = SomeBoxWidget()

        self.group_box_layout.addWidget(self.btn)

        self.main_layout = QtGui.QVBoxLayout()
        self.main_layout.addWidget(self.group_box)
        self.main_layout.addWidget(self.group)

        self.setLayout(self.main_layout)

        self.show()

def main():
    app = QtGui.QApplication(sys.argv)
    ex = SomeGui()
    app.exec_()        

if __name__ == '__main__':
    main()

你会注意到两个 QGroupBox 没有对齐,我假设是因为第一个放置在 QWidget 内。如何对齐它们以保持小部件内的第一个框?如果可能,不要以某种方式设置默认的固定高度/宽度值。

编辑:我假设我需要 setContensMargins 之类的东西,但对于外部区域...

【问题讨论】:

    标签: python alignment pyqt4 groupbox


    【解决方案1】:

    您可以将 SomeBoxWidget 容器小部件布局的内容边距设置为 0,方法是将其添加到您的类 __init__

    self.main_layout.setContentsMargins(0, 0, 0, 0)
    

    setContentsMargins 的参数分别是布局的左、上、右和下边距。根据文档:

    默认情况下,QLayout 使用样式提供的值。在大多数平台上,所有方向的边距都是 11 像素。

    在您提供的代码中执行上述操作会导致:

    【讨论】:

      猜你喜欢
      • 2014-12-01
      • 2018-11-23
      • 2013-03-05
      • 2015-12-09
      • 2021-07-30
      • 2018-08-14
      • 1970-01-01
      • 1970-01-01
      • 2016-01-22
      相关资源
      最近更新 更多