gpt4 book ai didi

QT 嵌套小部件框模型行为

转载 作者:行者123 更新时间:2023-12-04 12:55:10 24 4
gpt4 key购买 nike

我正在使用 PyQt 和 Qt StyleSheets 编写应用程序,但在使用 BoxModel 时遇到了一些问题.

我能够用这个小的对象层次结构(每个对象都有一个 BoxLayout)重现问题:

  1. MainWindow(QWidget 的子类)
  2. Q微件
  3. 2 个 QLabel

我的样式表非常简单:

  • 标签 (3) 的 1 像素纯蓝色边框
  • 小部件 (2) 的 1px 实心红色边框
  • 小部件 (2) 的 50 像素边距

我希望看到(从应用程序的顶部到中心):

  • 50 像素的边距
  • 红色边框
  • 标准布局间距/contentmargin
  • 蓝色边框

然而,事实并非如此。似乎内部标签不是相对于小部件的内容矩形定位的,而是相对于外部窗口的内容矩形定位的。标签(及其文本)的蓝色边框实际上延伸到其父小部件的红色边框之外。

Screenshot showing the issue

完整代码在这里:

import sys

from PyQt4 import QtGui

qss_string = """
QWidget#card {
border: 1px solid red;
margin: 50px;
}

QLabel {
border: 1px solid blue;
}
"""

class MainWindow(QtGui.QWidget):
def __init__(self, parent = None):
super(MainWindow, self).__init__(parent)

window_layout = QtGui.QHBoxLayout()

card = QtGui.QWidget(self)

widget_layout = QtGui.QVBoxLayout()
widget_layout.addWidget(QtGui.QLabel("a long testing text which should fit inside a box", card))
widget_layout.addWidget(QtGui.QLabel("a short text", card))
card.setLayout(widget_layout)

card.setObjectName("card")
window_layout.addWidget(card)

self.setLayout(window_layout)

self.setObjectName("window")
self.setStyleSheet(qss_string)


def main():
app = QtGui.QApplication(sys.argv)
main_window = MainWindow()
main_window.show()
return app.exec_()


if __name__ == "__main__":
sys.exit(main())

最佳答案

两种可能的解决方案对我有用(但是在 Pyqt5 中)

  1. 使用 QFrame 而不是 QWidget 作为容器(卡片)

  2. 命名您的标签让我们说 label1 和 label2 然后添加以下命令

    label1.setStyleSheet("QLabel{margin:50px;margin-bottom:0px;}")
    label2.setStyleSheet("QLabel{margin:50px;margin-top:0px;}")

我认为第一个更好,第二个只是一种解决方法

关于QT 嵌套小部件框模型行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21143429/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com