本篇是Pyside6的第八篇,本章来看看另一个知识点。
文本标签QLabel。它不仅仅可以用于文本,还可以显示富文本和图像。它是一个多功能的小部件,可以根据需要显示不同类型的内容。
部分源码
class QLabel(QFrame): """ QLabel(self, parent: Optional[PySide6.QtWidgets.QWidget] = None, f: PySide6.QtCore.Qt.WindowType = Default(Qt.WindowFlags)) -> None QLabel(self, text: str, parent: Optional[PySide6.QtWidgets.QWidget] = None, f: PySide6.QtCore.Qt.WindowType = Default(Qt.WindowFlags)) -> None """
很明显,有两种方式创建,跟之前的按钮类似。
from PySide6.QtWidgets import QApplication,QWidget,QLabel class Label(QWidget): def __init__(self): super(Label, self).__init__() self.UI() self.setWindowTitle("QLabel") self.setGeometry(200,200,500,300) def UI(self): label_ = QLabel(self) label_.setText("账号") label_.setGeometry(100,100,30,30) label_1 = QLabel("密码",self) label_1.setGeometry(100, 140, 30, 30) self.show() if __name__ == '__main__': app = QApplication([]) label = Label() app.exec()
好了,基础的玩意介绍完毕,接下来就是正题了。
对齐方式
❝为什么这里要讲,因为后面很多时候都会用到。
❞
水平对齐: Qt.AlignLeft 与左边缘对齐 Qt.AlignRight 与右边缘对齐 Qt.AlignHCenter 在可用空间中水平居中 Qt.AlignJustify 两端对齐(尽可能使文字占满横向空间) 垂直对齐: Qt.AlignTop 与顶部对齐 Qt.AlignBottom 与底部对齐 Qt.AlignVCenter 在可用空间中垂直居中 Qt.AlignBaseline 与基线对齐
from PySide6.QtCore import Qt from PySide6.QtWidgets import QApplication, QWidget, QLabel class Label(QWidget): def __init__(self): super(Label, self).__init__() self.UI() self.setWindowTitle("QLabel") self.setGeometry(200, 200, 500, 300) def UI(self): label_ = QLabel(self) label_.setText("账号") label_.setGeometry(100, 100, 70, 30) label_.setAlignment(Qt.AlignLeft) label_.setStyleSheet("background-color: #D7C0AE") label_1 = QLabel("密码", self) label_1.setGeometry(100, 140, 70, 30) label_1.setAlignment(Qt.AlignRight) label_1.setStyleSheet("background-color: #EEE3CB") self.show() if __name__ == '__main__': app = QApplication([]) label = Label() app.exec()
❝上述中使用了setStyleSheet设置样式,后续也会讲到,这里暂做了了解,知道background-color是用来设置背景颜色的。
❞
设置文本格式
❝官方其实弄了很多的格式,这里就不搞什么虚的了,介绍一下不常用中的常用的。
❞
from PySide6.QtWidgets import QApplication, QWidget, QLabel class Label(QWidget): def __init__(self): super(Label, self).__init__() self.UI() self.setWindowTitle("QLabel") self.setGeometry(200, 200, 500, 300) def UI(self): label_ = QLabel(self) label_.setText("<html><body>我的博客 <a href='https://blog.csdn.net/weixin_52040868'>CSDN-清安无别事</a><b>公众号 </b> <i>测个der</i></body></html>") label_.setGeometry(100, 100, 160, 70) label_.setWordWrap(True) # 设置自动换行 self.show() if __name__ == '__main__': app = QApplication([]) label = Label() app.exec()
图标
from PySide6.QtGui import QPixmap from PySide6.QtWidgets import QApplication, QWidget, QLabel class Label(QWidget): def __init__(self): super(Label, self).__init__() self.UI() self.setWindowTitle("QLabel") self.setGeometry(200, 200, 500, 300) def UI(self): label_ = QLabel(self) pix = QPixmap('close.png') pix_size = pix.scaled(30, 30) # 设置图标大小 label_.setPixmap(pix_size) # 显示的图像 label_.setGeometry(100, 100, 30, 30) self.show() if __name__ == '__main__': app = QApplication([]) label = Label() app.exec()
❝在后续的开发过程中,也可以使用QLbel来作为一个衬托图,使用QSS来设置QLabel的背景图,进而制作UI,也不会将QLabel局限于用来左一个文本标签。
❞
❝如上图所示,红色区域就是一个QLbel标签,使用了setStyleSheet的border-image或者background-image来设置背景图。
❞
快捷键与信号槽
❝它本身是没有内置的信号与槽的。但是可以与其他小部件或信号进行交互
❞
链接点击事件(linkActivated):当用户点击QLabel上的链接时触发该信号。 链接悬停事件(linkHovered):当鼠标悬停在QLabel上的链接上时触发该信号。
from PySide6.QtGui import QShortcut, QKeySequence from PySide6.QtWidgets import QApplication, QWidget, QLabel class Label(QWidget): def __init__(self): super(Label, self).__init__() self.UI() self.setWindowTitle("QLabel") self.setGeometry(200, 200, 500, 300) def UI(self): label_ = QLabel(self) label_.setText("<a href='https://gitee.com/qinganan_admin/Pyside6_Information'>我的Pyside6代码笔记</a>") shortcut = QShortcut(QKeySequence("Ctrl+o"), label_) # z设置CTRL+o为快捷键 label_.setGeometry(100, 100, 200, 30) label_.linkHovered.connect(self.labelTest1) # 当鼠标悬停在QLabel上的链接上时触发该信号。 label_.linkActivated.connect(self.labelTest2) # 当用户点击QLabel上的链接时触发该信号。 shortcut.activated.connect(self.labelTest3) # 设置快捷键的信号与槽 self.label_1 = QLabel(self) self.label_1.setGeometry(140, 140, 200, 30) self.show() def labelTest1(self, txt): self.label_1.setText(txt) def labelTest2(self): self.label_1.setStyleSheet("background-color: #EEE3CB") def labelTest3(self): self.label_1.setStyleSheet("background-color: #9BABB8") if __name__ == '__main__': app = QApplication([]) label = Label() app.exec()
如果你需要上述图片中的登录界面源码,那么就去:
https://gitee.com/qinganan_admin/pyqt5-case-study/tree/master/%E7%99%BB%E5%BD%95%E7%95%8C%E9%9D%A2
最后,本章的代码在:
https://gitee.com/qinganan_admin/Pyside6_Information/tree/master/%E7%AC%AC%E5%9B%9B%E7%AB%A0%EF%BC%8CQLabel