【问题标题】:How to show a lable at specific co-ordinate in PySide6如何在 PySide6 中的特定坐标处显示标签
【发布时间】:2021-10-15 18:40:46
【问题描述】:

假设我有这个标签

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())

【问题讨论】:

  • @musicamante 我提供的所有信息是标题不足以传达吗?我不知道要添加什么额外内容。我只想在特定坐标处显示标签,而不是通过对齐或缩进来显示它。我的问题没有解释吗?
  • 这还不够,对不起。例如,标签是否添加到“父”小部件/窗口?它是布局的一部分吗?或者它是一个独立的小部件(又名顶级窗口)?请求的坐标是基于父级,还是相对于窗口的绝对位置,还是基于用于它的布局项?如果它是布局的一部分,标签是否应该在调整父级大小时考虑“边距”,以确保在调整父级大小时它不会部分隐藏?如您所见,您的问题有很多方面没有考虑,这就是为什么我们要求您添加更多详细信息。
  • @musicamante 我用你想要的信息编辑了它
  • 我现在不能直接测试,但是在创建标签后尝试添加以下内容:self.text.setStyleSheet('padding-left: 100px; padding-top: 90px;')

标签: python qlabel pyside6


【解决方案1】:

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

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

或者,使用内容边距可能有效,但不能保证适用于所有小部件以及所有操作系统和样式:

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)

请注意,每次更改标签的文本时都必须调用这个

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-29
    • 1970-01-01
    相关资源
    最近更新 更多