我正在使用PyQt和Qt StyleSheets编写应用程序,但BoxModel存在一些问题。
我能够通过这个小的对象层次结构(每个都有一个BoxLayout)重现问题:
我的样式表非常简单:
我希望看到(从应用程序的顶部到中心):
但事实并非如此。内部标签似乎没有相对于窗口小部件的内容矩形定位,而是定位到外窗口的内容矩形。标签的蓝色边框(及其文本)实际上延伸到其父窗口小部件的红色边框之外。
完整的代码在这里:
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())
答案 0 :(得分:2)
两种可能对我有用的解决方案(但在Pyqt5中)
使用QFrame代替QWidget作为容器(卡片)
将标签命名为label1和label2,然后添加以下命令
label1.setStyleSheet("QLabel{margin:50px;margin-bottom:0px;}")
label2.setStyleSheet("QLabel{margin:50px;margin-top:0px;}")
在我看来,第一个更好,第二个只是一个解决方法