import sys
import random
import traceback
from PyQt5 import QtWidgets, QtCore, QtGui
class 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用于显示文本或图像。没有提供用户交互功能。标签的视觉外观可以以各种方式配置,并且可以用于为另一个小部件指定焦点助记键。",
"<h1>This is a heading</h1>"]
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_())
QLabel控件功能示例
最新推荐文章于 2024-06-13 09:20:52 发布