1

这是我在这里的第一个问题,我希望尽可能清楚。

我有一个带有两个内部元素的 Widget:WidgetA 应该在右上角,而 WidgetB 应该环绕第一个元素(所以它里面的文本应该在 WidgetA 下面)。

这就是我想要实现的目标:

________________________
|  _________     _____ |
|  |   B    |    | A | |
|  |  some  |    |___| |
|  |  text  |--------- |
|  | should go here  | |  
|  |_________________| |
|______________________|
  • 我已经搜索了一整天,但找不到任何与我的案例匹配的东西。
  • 我试图建立一个FlowLayout但仍然不是我想要的。
  • 我尝试将它设计为将 HTML 和 CSS 放在 QLabel 中,但我发现在 PyQt 中不支持浮动(诺基亚你真丢脸!!)
  • 我已经开始构建自定义 QGraphicsView + QGraphicsItem,但这对我来说有点困难,我希望也许有一个更简单的解决方案。

你们建议我使用什么布局?我应该编写自己的自定义布局吗?

在我的特殊情况下,WidgetA 是 QLabel(带有 QPixmap),而 WidgetB 是 QFormLayout(我现在认为这不是 Widget,但我认为这种方式可能对其他人更有帮助)。

我已经构建了一个代码示例,但这更像是一个设计问题,也许代码并不重要。

from PyQt4 import QtGui, QtCore

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

        self.layout = QtGui.QVBoxLayout()

        self.hLayout = QtGui.QHBoxLayout()

        self.smallLabel = QtGui.QLabel("small small")

        self.longLabel = QtGui.QLabel('''
            very very very very very very very 
            very very very very very very very 
            very very very very very very very
            long label''')
        self.longLabel.setWordWrap(True)

        self.hLayout.addWidget(self.longLabel)
        self.hLayout.addWidget(self.smallLabel)


        self.layout.addLayout(self.hLayout)

        self.setLayout(self.layout)

# I run this in Maya, so I don't care about  __main__ and apps      
w = MyWidget()
w.show()

谢谢!

4

1 回答 1

1

你试过QWebView吗?这是一个基于 Webkit 的浏览器小部件,您也可以使用它来显示静态 HTML。这应该支持大多数 CSS 和 HTML。

于 2013-03-16T23:17:35.313 回答