博客
关于我
QLabel控件功能示例
阅读量:295 次
发布时间:2019-03-03

本文共 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_())

转载地址:http://huwq.baihongyu.com/

你可能感兴趣的文章
Express Animate for mac(动画特效制作软件)
查看>>
macOS Big Sur系统中如何开启设置触控板三指拖拽功能?
查看>>
修复苹果Mac中的快速视频播放错误的方法
查看>>
苹果HomePod智能音箱怎么使用广播功能?
查看>>
Mac系统投屏到电视机的方法
查看>>
【Docker&ARM】ARM架构服务器上docker的安装
查看>>
【Tinyproxy】CentOS7.X http代理tinyproxy的安装配置与使用
查看>>
php-foreach遍历一维数组
查看>>
php--自定义错误处理函数的使用方法
查看>>
php--异常处理主动抛出异常的使用方法
查看>>
php--简易的相册1
查看>>
php---xml基础知识
查看>>
php--class static
查看>>
php--匿名函数的使用
查看>>
php--json_decode
查看>>
php--class的工厂模式的示例
查看>>
php--模拟调用接口的代码
查看>>
php教程--案例20(用户登录)
查看>>
php教程--案例29(文件上传类)
查看>>
jQuery练习t76
查看>>