如何在 PySide6 的特定坐标处显示标签

How to show a lable at specific co-ordinate in PySide6

假设我有这个标签

text = QtWidgets.QLabel("Hello World")

现在我想在坐标 100、90 处显示此标签,这意味着我希望它的最左上角像素位于该坐标处。我该怎么做?

我已经尝试过使用缩进,但它似乎将对象在 x 和 y 方向上都推了 100 像素

text = QtWidgets.QLabel("Hello World", indent = 100)

有没有类似的

text.exec(QtCore.QPoint(100, 90))

额外信息:此示例已在 PySide 文档中提供

import sys
import random
from PySide6 import QtCore, QtWidgets, QtGui


class MyWidget(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.hello = ["Hallo Welt", "Hei maailma", "Hola Mundo", "Привет мир"]
        self.button = QtWidgets.QPushButton("File")
        self.text = QtWidgets.QLabel("Hello World")
        self.layout = QtWidgets.QVBoxLayout(self)
        self.layout.addWidget(self.text)
        self.layout.addWidget(self.button)

        self.button.clicked.connect(self.magic)

    @QtCore.Slot()
    def magic(self):
        self.text.setText(random.choice(self.hello))

if __name__ == "__main__":
    app = QtWidgets.QApplication([])

    widget = MyWidget()
    widget.resize(800, 600)
    widget.show()

    sys.exit(app.exec())

对于这种特定情况,设置样式表的填充就足够了:

self.text.setStyleSheet('padding-left: 100px; padding-top: 90px;')

或者,使用内容边距可能有效,但不能保证所有小部件以及所有 OS 和样式:

self.text.setContentsMargins(100, 90, 0, 0)

在这种情况下,可以将小部件添加到布局中,然后将该布局添加到主布局中:

textLayout = QtWidgets.QVBoxLayout()
textLayout.setContentsMargins(100, 90, 0, 0)
textLayout.addWidget(self.text)
self.layout.addLayout(textLayout)

请注意,所有这些都不能确保小部件始终停留在该位置,以防父级大小增加。一个可能的解决方案是根据提示设置最大尺寸:

# after setting the margins
self.text.setMaximumSize(self.text.sizeHint)

注意这个必须被调用每次标签的文本被改变。