From 6b9232a0070c8422f0055ec2d6bdaff50916e4ba Mon Sep 17 00:00:00 2001 From: muzing Date: Fri, 24 Jun 2022 18:22:21 +0800 Subject: [PATCH] Add 03-05-02 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit QLabel-文本对齐、缩进、换行 --- .../02-QLabel-文本对齐、缩进、换行.py | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 03-QtWidgets-常用控件/05-QLabel-标签/02-QLabel-文本对齐、缩进、换行.py diff --git a/03-QtWidgets-常用控件/05-QLabel-标签/02-QLabel-文本对齐、缩进、换行.py b/03-QtWidgets-常用控件/05-QLabel-标签/02-QLabel-文本对齐、缩进、换行.py new file mode 100644 index 0000000..f4a26a8 --- /dev/null +++ b/03-QtWidgets-常用控件/05-QLabel-标签/02-QLabel-文本对齐、缩进、换行.py @@ -0,0 +1,103 @@ +import sys + +from PySide6 import QtWidgets +from PySide6.QtCore import Qt + +""" +QLabel 文本的对齐、缩进、换行 + +=================================== 对齐 =================================== + +.setAlignment(Qt.Alignment) 设置文本对齐方式,详见下方Qt.Alignment +.alignment() -> Qt.Alignment 获取文本对齐方式 + +默认对齐方式为 Qt.AlignLeft | Qt.AlignVCenter,即水平靠左、垂直居中对齐 + + +Qt.AlignmentFlag 中又分为水平对齐方式与垂直对齐方式,具体有如下数种: +https://doc.qt.io/qt-6/qt.html#AlignmentFlag-enum + +水平对齐: +Qt.AlignLeft 与左边缘对齐 +Qt.AlignRight 与右边缘对齐 +Qt.AlignHCenter 在可用空间中水平居中 +Qt.AlignJustify 两端对齐(尽可能使文字占满横向空间) + +垂直对齐: +Qt.AlignTop 与顶部对齐 +Qt.AlignBottom 与底部对齐 +Qt.AlignVCenter 在可用空间中垂直居中 +Qt.AlignBaseline 与基线对齐 + +若需同时设置水平、垂直两个维度的对齐方式,只需将两个Flags用或运算符连接,例如: +Qt.AlignCenter 等价于 Qt.AlignVCenter | Qt.AlignHCenter + + +=================================== 缩进 =================================== + +.setIndent(indent: int) 设置缩进,默认为-1,即不进行缩进 +.indent() -> int 获取缩进数 + +缩进的方向与对齐方向有关,Qt.AlignLeft则缩进出现在左边缘,Qt.AlignTop则出现在上边缘,以此类推 + +如果 indent 为负数,或者没有设置缩进,则label计算有效缩进的方法如下: +若 frameWidth() 为0,则有效缩进变为0;若 frameWidth() 大于0,则有效缩进为控件当前 font() 的 +"x" 字母宽度的一半 + +=================================== 换行 =================================== +QLabel 可以开启自动换行功能,即在需要时从单词之间换行 + +.setWordWrap(on: bool) 设置是否开启自动换行,默认关闭 +.wordWrap() -> bool 获取是否开启自动换行 + +""" + +description = """QLabel is used for displaying text or an image. No user interaction functionality is provided. +The visual appearance of the label can be configured in various ways, +and it can be used for specifying a focus mnemonic key for another widget.""" + + +class MyWidget(QtWidgets.QWidget): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.setWindowTitle("QLabel-文本操作") + self.resize(800, 600) + self.setup_ui() + + def setup_ui(self) -> None: + """设置界面与测试功能""" + label = QtWidgets.QLabel(self) + # 手动设置尺寸,而非由内容自动设置 + label.resize(300, 300) + label.move( + (self.width() - label.width()) // 2, (self.height() - label.height()) // 2 + ) + label.setStyleSheet("background-color: cyan;") + + # 注意测试以下三种功能时,会相互影响。 + # 如改变对齐方式会改变缩进方向、开启自动换行时每一行都会受到缩进影响等。 + + # ==========测试对齐方式============ + label.setText("PySide6 Code Tutorial") # 建议测试对齐方式功能时使用这个短内容文本 + # label.setAlignment(Qt.AlignTop) # 上对齐 + # label.setAlignment(Qt.AlignJustify) # 两侧对齐 + + # label.setAlignment(Qt.AlignCenter) # 居中对齐,等价于下一行 + label.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter) # 居中对齐 + + # =========测试缩进================= + # label.setText(description) + # label.setIndent(30) # 设置缩进,缩进方向对对齐方向相关 + print(label.indent()) + + # =========测试自动换行============= + # label.setText(description) + label.setWordWrap(True) # 若关闭自动换行,则超出单行的部分无法显示 + print(label.wordWrap()) + + +if __name__ == "__main__": + app = QtWidgets.QApplication(sys.argv) + window = MyWidget() + window.show() + sys.exit(app.exec())