
QLabel控件功能示例
发布日期:2021-05-06 22:02:02
浏览次数:8
分类:技术文章
本文共 11381 字,大约阅读时间需要 37 分钟。
import sysimport randomimport tracebackfrom PyQt5 import QtWidgets, QtCore, QtGuiclass QLabelDemo(QtWidgets.QWidget): def __init__(self): super(QLabelDemo, self).__init__() try: self.setFixedSize(800, 400) # 创建4个标签 self.label = MyQLabel(self) # setText():设置Qlabel的文本内容 self.label.setText('这是一个文本标签\n这是一个QLabel控件') self.label.setFrameShape(QtWidgets.QFrame.Box) self.label.setFixedSize(370, 370) vbox1 = QtWidgets.QVBoxLayout() vbox1.addWidget(self.label) self.labels = [] self.comboxs = [] self.sliders = [] self.lineedits = [] self.pushbuttons = [] self.labels.append(QtWidgets.QLabel('Alignment')) infomation1 = ["AlignLeft", "AlignRight", "AlignHCenter", "AlignJustify", "AlignTop", "AlignBottom", "AlignVCenter", "AlignBaseline", "AlignCenter"] self.comboxs.append(QtWidgets.QComboBox(self)) self.comboxs[-1].addItems(infomation1) self.comboxs[-1].activated[str].connect(self.change_alignment) self.labels.append(QtWidgets.QLabel('indent')) self.sliders.append(QtWidgets.QSlider(QtCore.Qt.Horizontal)) self.sliders[-1].valueChanged.connect(self.change_indent) self.sliders[-1].setRange(-1, 400) self.lineedits.append(QtWidgets.QLineEdit()) self.lineedits[-1].setText(str(self.sliders[-1].value())) self.lineedits[-1].setMaximumWidth(40) # check1 = QtWidgets.QCheckBox('dd') self.labels.append(QtWidgets.QLabel('margin')) self.sliders.append(QtWidgets.QSlider(QtCore.Qt.Horizontal)) self.sliders[-1].valueChanged.connect(self.change_margin) self.sliders[-1].setRange(0, 400) self.lineedits.append(QtWidgets.QLineEdit()) self.lineedits[-1].setText(str(self.sliders[-1].value())) self.lineedits[-1].setMaximumWidth(40) self.labels.append(QtWidgets.QLabel('pixmap')) self.pushbuttons.append(QtWidgets.QPushButton('set pixmap')) self.pushbuttons[-1].setCheckable(True) self.pushbuttons[-1].clicked.connect(self.change_pixmap) self.labels.append(QtWidgets.QLabel('Scaled Contents')) self.pushbuttons.append(QtWidgets.QPushButton('set Scaled Contents')) self.pushbuttons[-1].setCheckable(True) self.pushbuttons[-1].clicked.connect(self.change_scaled_contents) self.labels.append(QtWidgets.QLabel('TextInteractionFlags')) self.pushbuttons.append(QtWidgets.QPushButton('set TextInteractionFlags')) self.pushbuttons[-1].setCheckable(True) self.pushbuttons[-1].clicked.connect(self.change_TextInteractionFlags) self.labels.append(QtWidgets.QLabel('has selected text')) self.lineedits.append(QtWidgets.QLineEdit()) self.lineedits[-1].setText('') self.labels.append(QtWidgets.QLabel('text')) infomation2 = ["QLabel用于显示文本或图像。没有提供用户交互功能。标签的视觉外观可以以各种方式配置,并且可以用于为另一个小部件指定焦点助记键。", "This is a heading
"] self.comboxs.append(QtWidgets.QComboBox(self)) self.comboxs[-1].addItems(infomation2) self.comboxs[-1].activated[str].connect(self.change_text) self.labels.append(QtWidgets.QLabel('WordWrap')) self.pushbuttons.append(QtWidgets.QPushButton('set WordWrap')) self.pushbuttons[-1].setCheckable(True) self.pushbuttons[-1].clicked.connect(self.change_WordWrap) self.labels.append(QtWidgets.QLabel('&Buddy')) self.pushbuttons.append(QtWidgets.QPushButton('set Buddy')) self.pushbuttons[-1].setCheckable(True) self.pushbuttons[-1].clicked.connect(self.change_Buddy) self.lineedits.append(QtWidgets.QLineEdit()) self.lineedits[-1].setText('Alt + B') self.labels.append(QtWidgets.QLabel('&Puddy')) self.pushbuttons[-1].setCheckable(True) self.pushbuttons[-1].clicked.connect(self.change_Buddy) self.lineedits.append(QtWidgets.QLineEdit()) self.lineedits[-1].setText('Alt + P') self.pushbuttons.append(QtWidgets.QPushButton('Enable mouseTracking')) self.pushbuttons[-1].setCheckable(True) self.pushbuttons[-1].clicked.connect(self.change_mouseTracking) grid = QtWidgets.QGridLayout() grid.addWidget(self.labels[0], 0, 0, 1, 2) grid.addWidget(self.comboxs[0], 0, 2, 1, 3) grid.addWidget(self.labels[1], 1, 0, 1, 2) grid.addWidget(self.sliders[0], 1, 2, 1, 2) grid.addWidget(self.lineedits[0], 1, 4, 1, 1) grid.addWidget(self.labels[2], 2, 0, 1, 2) grid.addWidget(self.sliders[1], 2, 2, 1, 2) grid.addWidget(self.lineedits[1], 2, 4, 1, 1) grid.addWidget(self.labels[3], 3, 0, 1, 2) grid.addWidget(self.pushbuttons[0], 3, 2, 1, 3) grid.addWidget(self.labels[4], 4, 0, 1, 2) grid.addWidget(self.pushbuttons[1], 4, 2, 1, 3) grid.addWidget(self.labels[5], 5, 0, 1, 2) grid.addWidget(self.pushbuttons[2], 5, 2, 1, 3) grid.addWidget(self.labels[6], 6, 0, 1, 2) grid.addWidget(self.lineedits[2], 6, 2, 1, 3) grid.addWidget(self.labels[7], 7, 0, 1, 2) grid.addWidget(self.comboxs[1], 7, 2, 1, 3) grid.addWidget(self.labels[8], 8, 0, 1, 2) grid.addWidget(self.pushbuttons[3], 8, 2, 1, 3) grid.addWidget(self.labels[9], 9, 0, 1, 2) grid.addWidget(self.pushbuttons[4], 9, 2, 2, 2) grid.addWidget(self.lineedits[3], 9, 4, 1, 1) grid.addWidget(self.labels[10], 10, 0, 1, 2) grid.addWidget(self.lineedits[4], 10, 4, 1, 1) grid.addWidget(self.pushbuttons[5], 11, 0, 1, 5) # 垂直布局相关属性设置 hbox = QtWidgets.QHBoxLayout() # 添加标签到垂直布局中 hbox.addLayout(vbox1) hbox.addLayout(grid) hbox.setStretch(0, 8) hbox.setStretch(0, 1) # hbox.addLayout(vbox3) # 加载布局:前面设置好的垂直布局 self.setLayout(hbox) # 设置标题 self.setWindowTitle('Qlabel例子') except Exception as e: traceback.print_exc() def change_alignment(self, txt): if txt == 'AlignLeft': self.label.setAlignment(QtCore.Qt.AlignLeft) if txt == 'AlignRight': self.label.setAlignment(QtCore.Qt.AlignRight) if txt == 'AlignHCenter': self.label.setAlignment(QtCore.Qt.AlignHCenter) if txt == 'AlignJustify': self.label.setAlignment(QtCore.Qt.AlignJustify) if txt == 'AlignTop': self.label.setAlignment(QtCore.Qt.AlignTop) if txt == 'AlignBottom': self.label.setAlignment(QtCore.Qt.AlignBottom) if txt == 'AlignVCenter': self.label.setAlignment(QtCore.Qt.AlignVCenter) if txt == 'AlignBaseline': self.label.setAlignment(QtCore.Qt.AlignBaseline) if txt == 'AlignCenter': self.label.setAlignment(QtCore.Qt.AlignCenter) def change_indent(self, value): self.label.setIndent(value) self.lineedits[0].setText(str(self.sliders[0].value())) def change_margin(self, value): self.label.setMargin(value) self.lineedits[1].setText(str(self.sliders[1].value())) def change_pixmap(self): try: if self.pushbuttons[0].isChecked(): p = QtGui.QPixmap() p.load("./images/key154px_capslock.png") self.label.setPixmap(p) else: self.label.setText('这是一个文本标签\n这是一个QLabel控件') except Exception as e: print(e) def change_scaled_contents(self): if self.pushbuttons[1].isChecked(): self.label.setScaledContents(True) else: self.label.setScaledContents(False) def change_TextInteractionFlags(self): try: if self.pushbuttons[2].isChecked(): self.label.setTextInteractionFlags(QtCore.Qt.TextSelectableByMouse) else: self.label.setTextInteractionFlags(QtCore.Qt.NoTextInteraction) except Exception as e: traceback.print_exc() def check_state(self): while True: if self.label.hasSelectedText(): self.lineedits[2].setText(self.label.selectedText()) QtWidgets.QApplication.processEvents(QtCore.QEventLoop.AllEvents, 100) def change_text(self, str): self.label.setText(str) def change_WordWrap(self): if self.pushbuttons[3].isChecked(): self.label.setWordWrap(True) else: self.label.setWordWrap(False) def change_Buddy(self): try: if self.pushbuttons[4].isChecked(): self.labels[9].setBuddy(self.lineedits[3]) self.labels[10].setBuddy(self.lineedits[4]) else: self.labels[9].setBuddy(None) self.labels[10].setBuddy(None) except Exception as e: traceback.print_exc() def change_mouseTracking(self): if self.pushbuttons[5].isChecked(): self.label.setMouseTracking(True) else: self.label.setMouseTracking(False)class MyQLabel(QtWidgets.QLabel): def __init__(self, parent=None): super(MyQLabel, self).__init__(parent) # 右键菜单 def contextMenuEvent(self, event): try: self.setText('QLabel打开右键菜单事件') Context = QtWidgets.QMenu() Context.addAction('cut') Context.addAction('copy') Context.exec_(event.globalPos()) except Exception as e: traceback.print_exc() # 由于qlable默认无法选中,需要打开TextInteractionFlags def focusInEvent(self, event): try: self.setText('QLabel获得焦点事件') except Exception as e: traceback.print_exc() def focusOutEvent(self, event): try: self.setText('QLabel失去焦点事件') except Exception as e: traceback.print_exc() # 必须获得焦点后才能捕获到key def keyPressEvent(self, event): self.setText(str(event.key())) # 必须按键拖动才会触发,打开mouseTracking可以任意捕获 def mouseMoveEvent(self, event): try: self.setText('全局位置:' + str(event.globalPos()) + # 屏幕左上角 '\n局部位置:' + str(event.localPos()) + # 控件左上角 '\n屏幕位置:' + str(event.screenPos()) + # 和全局位置一样 '\n窗口位置:' + str(event.windowPos())) # 界面左上角 except Exception as e: traceback.print_exc() def mousePressEvent(self, event): self.setText('鼠标点击事件' + str(event.button()) + str(event.globalPos())) def mouseReleaseEvent(self, event): self.setText('鼠标松开事件' + str(event.button()) + str(event.globalPos())) # 重写paintEvent会直接清空界面,需要重新绘制 # def paintEvent(self, event): # try: # print('paintEvent 触发') # self.setText('paintEvent 触发') # except Exception as e: # traceback.print_exc()if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) win = QLabelDemo() win.show() win.check_state() sys.exit(app.exec_())
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年03月19日 23时17分16秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
LINQ之Single,SingleOrDefault
2019-03-04
LINQ之ElementAt,ElementAtOrDefault
2019-03-04
OpenCV6边缘检测[Canny算法]
2019-03-04
Hadoop_Scala操作Hbase
2019-03-04
Scala_1.控制台打印,变量定义,函数定义
2019-03-04
Linux Vim操作-添加行号
2019-03-04
十五.Python异常处理
2019-03-04
c++备考期末必须看的知识点(一篇就够了)
2019-03-04
qt中初始化界面的几种方法
2019-03-04
【图论】游乐场
2019-03-04
【图论】【最短路】USACO 2.4 牛的旅行 (最短路)
2019-03-04
【图论】【最短路】工厂的烦恼
2019-03-04
【图论】刻录光盘
2019-03-04
【离散化】容易的网络游戏
2019-03-04
03-C语言进阶——模拟实现字符串操作函数
2019-03-04
C语言初阶——指针
2019-03-04
[88]. 合并两个有序数组(C语言)
2019-03-04
docker部署Hadoop环境
2019-03-04
最全环境搭建-常用软件安装
2019-03-04
Linux 安装 MySql
2019-03-04