0

我需要根据动态生成的 JSON 文件的内容动态构建一个屏幕,该文件包含可变数量的小部件,以及可变大小、位置、颜色等。我希望内容填满整个屏幕。

问题是,在让 Scene 和 View 很好地适应之后,在边缘有一个漂亮的小边框,添加一个 GroupBox ——好吧,无论如何设置标题,使场景?看法?比屏幕大。

在我取消注释之前,以下非常精简的示例具有正确的外观self.box.setTitle("Speaker 1")。原始代码有几个带有 CSS 样式的 GroupBox,它们看起来是正确的。然而,屏幕底部的场景/视图边框消失了,不管我给 GroupBoxes 的高度是多少。

(我最初尝试在不使用 View / Scene 的情况下编写此代码,但无法按照我想要的方式定位 / 调整 QGroupBoxes 的大小。)

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import sys

from PySide.QtCore import *
from PySide.QtGui  import *


class Viewport(QGraphicsView):
    def __init__(self, parent=None):
        super(Viewport, self).__init__(parent)
        self.parent = parent
        self.setFixedSize(self.parent.width  - 21,
                          self.parent.height - 21)
        self.scene = QGraphicsScene(0, 0,
                                    self.parent.width  - 42,
                                    self.parent.height - 42,
                                    self)
        self.setScene(self.scene)
        self.box = QGroupBox(self)
#       self.box.setTitle("Speaker 1")       # THIS BREAKS IT
        self.box.setObjectName("speaker1")
        self.box.setGeometry(12, 12, 200, 200)


class UI(QDialog):
    def __init__(self, width, height, parent=None):
        super(UI, self).__init__(parent)
        self.parent  = parent
        self.width   = width
        self.height  = height
        self.view = Viewport(self)
        gridLayout = QGridLayout()
        gridLayout.addWidget(self.view, 0, 0, 1, 1)
        self.setLayout(gridLayout)
        self.setWindowFlags(Qt.FramelessWindowHint)
        self.showFullScreen()


app = QApplication(sys.argv)
screen_resolution = app.desktop().screenGeometry()
width, height = screen_resolution.width(), screen_resolution.height()
ui = UI(width, height)
ui.show()
sys.exit(app.exec_())

从我想做的更复杂的事情开始:

没有 QGroupBoxes,底部边框出现 如果没有 QGroupBoxes,屏幕的底部边框就会出现。

使用 QGroupBoxes,屏幕底部边框消失 使用 QGroupBoxes,屏幕底部边框消失

(上面包含的代码应该会产生相同的效果,只是它只有一个 QGroupBox,而且我没有设置它来显示边框,也没有让它像我的第二个屏幕截图中的那样高。)

添加标题还会导致包含所有内容的 QDialog 不再使用整个屏幕。请注意第二张图像顶部的系统栏的外观。

4

0 回答 0