如何在 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)
注意这个必须被调用每次标签的文本被改变。
假设我有这个标签
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)
注意这个必须被调用每次标签的文本被改变。