QLabel Widget#

keywords: QLabel, Label

Label Widget 可能是最简单的 Widget 了, 常用于显式一些文本.

label_widget_1.py
 1# -*- coding: utf-8 -*-
 2
 3"""
 4展示了一些关于 Label 的基本操作.
 5"""
 6
 7import sys
 8from PySide6 import QtCore, QtWidgets
 9
10
11class MainWidget(QtWidgets.QWidget):
12    """
13    Ref:
14
15    - QLabel: https://doc.qt.io/qtforpython-6/PySide6/QtWidgets/QLabel.html
16    """
17
18    def __init__(self, parent):
19        super().__init__(parent)
20        # fmt: off
21        # define
22        # 这是最基本的定义一个 Label 的语法
23        # 你还可以设置其最大宽度, 对齐方式等.
24        self.label_1_wgt = QtWidgets.QLabel("label 1", self)
25        # 默认是跟随 UI 的大小自动设置, 你可以设置一个上下限
26        self.label_1_wgt.setMaximumWidth(60)
27        # 默认是左对齐, 你可以设置为居中对齐
28        self.label_1_wgt.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
29        # 默认 Label 是不能被选中的, 你可以设置为可以用鼠标选择
30        self.label_1_wgt.setTextInteractionFlags(
31            self.label_1_wgt.textInteractionFlags()
32            | QtCore.Qt.TextInteractionFlag.TextSelectableByMouse
33        )
34
35        # 默认情况下 label 是可以是 HTML 的. 你可以放一个 <a> tag 用于实现一个超链接
36        # 当然你还可以用 HTML 来实现颜色, style 等等.
37        # 你需要 connect ``linkActivated`` signal 来处理点击事件, 决定用户点击链接的时候
38        # 会发生什么.
39        self.label_2_wgt = QtWidgets.QLabel("<font color='red'>label 2</font>: <a href='https://www.google.com'>Click here to visit Google</a>", self)
40        self.label_2_wgt.linkActivated.connect(self.label_2_link_activated_handler)
41
42        # 当然我们默认情况下都是希望用户点击链接后就在浏览器中打开, 那么你可以
43        # 调用 ``setOpenExternalLinks(True)`` 来将其设为可以通过点击打开链接.
44        # 这等于是 QT 帮你实现了这个 signal, 你就无需自己实现了.
45        self.label_3_wgt = QtWidgets.QLabel("<font color='green'>label 3</font>: <a href='https://www.google.com'>Click here to visit Google</a>", self)
46        self.label_3_wgt.setOpenExternalLinks(True)
47        # fmt: on
48
49        self.main_lay = QtWidgets.QVBoxLayout()  # Vertical Box layout
50        self.main_lay.addWidget(self.label_1_wgt)
51        self.main_lay.addWidget(self.label_2_wgt)
52        self.main_lay.addWidget(self.label_3_wgt)
53        self.setLayout(self.main_lay)
54
55    @QtCore.Slot()
56    def label_2_link_activated_handler(self):
57        print("trigger label_2_link_activated_handler")
58
59
60class MainWindow(QtWidgets.QMainWindow):
61    def __init__(self):
62        super().__init__()
63        self.main_wgt = MainWidget(self)
64        self.setCentralWidget(self.main_wgt)
65        self.setGeometry(
66            int(screen_width * 0.25),  # x, at 25% of screen width
67            int(screen_height * 0.25),  # y, at 25% of screen height
68            int(screen_width * 0.5),  # w, 50% screen width
69            int(screen_height * 0.5),  # h, 50% screen height
70        )
71        self.setWindowTitle("ratio_widget")
72        self.show()
73
74
75if __name__ == "__main__":
76    app = QtWidgets.QApplication(sys.argv)
77    screen_width, screen_height = app.screens()[0].size().toTuple()
78    main = MainWindow()
79    sys.exit(app.exec())