PyQt5的笔记的其他文章链接:
(1条消息) PyQt5的笔记(上)_我行我素,向往自由的博客-CSDN博客
PyQt5的笔记(中-1)_我行我素,向往自由的博客-CSDN博客
(1条消息) PyQt5的笔记(中-2)_我行我素,向往自由的博客-CSDN博客
(1条消息) PyQt5的笔记(中-3)_我行我素,向往自由的博客-CSDN博客
目录
31. QLabel
31.1 功能特性
31.2 信号
32.QLCDNumber
32.1 功能作用
33.QProgressBar进度条
34.QDialog
34.1 QRrrorMessage
34.2 QProgressDialog
34.3 QMessageBox
没有提供用户交互功能。
from PyQt5.Qt import *
import sys
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('QLabel功能测试')
self.resize(1000,700)
self.setup_ui()
def setup_ui(self):
label=QLabel('账号(&s)',self)#准备设置快捷键,这里只有设置了小伙伴,才会生效
label=QLabel('百度',self)
label.move(50,100)
label.resize(400,400)#如果长度小于文本长度,超过的部分会显示不出来
# label.adjustSize() # 根据文本内容调整大小
label.setStyleSheet('background-color:cyan')
#对齐(默认:水平方向上左对齐,竖直方向上居中对齐)
label.setAlignment(Qt.AlignRight | Qt.AlignVCenter)#水平右对齐,竖直居中对齐
#缩进与边距
label.setIndent(20)#缩进
label.setMargin(20)#边距
#展示格式
# label.setTextFormat(Qt.PlainText)#以普通文本方式展示
#小伙伴
le1=QLineEdit(self)
le1.move(250,250)
le2=QLineEdit(self)
le2.move(250,300)
# label.setBuddy(le1)#label设置了一个小伙伴le1
# #内容缩放
# label.setPixmap(QPixmap('图片/吐槽1.png'))
label.setScaledContents(True)
#文本交互标志
# label.setTextInteractionFlags(Qt.TextSelectableByMouse | Qt.TextSelectableByKeyboard | Qt.TextEditable)#通过鼠标和键盘选中,可编辑
# label.setSelection(1,2)#从1开始的,选两个长度(begin,num)
#外部链接
label.setOpenExternalLinks(True)#打开外部链接
#换行
label.setWordWrap(True)#内容超出宽度,自动换行,并且保证单词的完整性
#内容操作
# label.setText('
')#当成富文本处理
# label.setNum(888.88)
#展示画图
# pic=QPicture()
# painter=QPainter(pic)
# painter.setBrush(QBrush(QColor(100,200,100)))#画刷对象
# painter.drawEllipse(0,0,200,200)#椭圆
# label.setPicture(pic)
#展示动图.gif
movie=QMovie("图片/爱你1.gif")
label.setMovie(movie)
movie.start()
movie.setSpeed(200)#100表示原来的速度,200表示两倍速
#清空
# label.clear()#所有都清空
if __name__=='__main__':
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
运行效果:
#信号
label.linkHovered.connect(lambda a:print(a))#鼠标放上去,触发,然后打印网址
label.linkActivated.connect(lambda a:print(a))#点击打印
运行效果:
# lcd = QLCDNumber(self)
lcd=QLCDNumber(5,self)#数字表示展示内容的位数
lcd.move(100,100)
lcd.resize(300,50)
# lcd.display('12345')#多余的位数,新的替代旧的,若位数是5,即123456-->23456
# lcd.display('osgabcdefhlpruy')
# lcd.display(':')
# lcd.display(88866)#展示数字,也可以;如果超出位数,会变成0
lcd.display(888.68)#显示5位的情况下,结果是888.7
btn=QPushButton(self)
btn.setText('测试按钮')
btn.move(50,50)
btn.clicked.connect(lambda:print(lcd.value()))#拿到的是全部的内容,并非四舍五入的结果
#模式设置
lcd.setMode(QLCDNumber.Bin)#二进制
#lcd.setBinMode()#快捷方式
#溢出
print(lcd.checkOverflow(100))#位数为2,所以为True
lcd.overflow.connect(lambda:print('数值溢出'))
lcd.display(100)#必须先监听再展示
lcd=QLCDNumber(2,self)#数字表示展示内容的位数
lcd.move(0,0)
lcd.resize(300,100)
lcd2=QLCDNumber(self)
lcd2.move(0,100)
lcd2.resize(300,100)
lcd3 = QLCDNumber(self)
lcd3.move(0, 200)
lcd3.resize(300, 100)
lcd.display(99)
lcd2.display(99)
lcd3.display(99)
lcd.setSegmentStyle(QLCDNumber.Outline)#生成填充了背景颜色的凸起部分
lcd2.setSegmentStyle(QLCDNumber.Filled)#生成填充颜色的凹起部分
lcd3.setSegmentStyle(QLCDNumber.Flat)#生成填充前景色的平坦段
效果展示:
from PyQt5.Qt import *
import sys
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('QProgressBar测试')
self.resize(500,500)
self.setup_ui()
def setup_ui(self):
pb=QProgressBar(self)
print('当前最小值{},最大值{}.'.format(pb.minimum(),pb.maximum()))
# pb.setMinimum(0)#[注意]最大值最小值均为0时,则进入繁忙提示
# pb.setMaximum(100)
pb.setRange(50,100)
pb.setValue(75)
btn=QPushButton(self)
btn.setText('测试按钮')
btn.move(200,200)
def test():
pb.reset()#重置之后,当前值为最小值减一,最小最大值还是之前设置的
print('heihei当前最小值{},最大值{}.'.format(pb.minimum(), pb.maximum()))
print('当前值:',pb.value())
btn.clicked.connect(test)#重置
if __name__=='__main__':
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
运行结果:
pb=QProgressBar(self)
pb.resize(400,40)
pb.setRange(50,100)
pb.setValue(75)
#文本格式设置 默认:百分比
# pb.setFormat("当前人数 / 总人数 %p%")#%p:表示百分数
# pb.setFormat("当前人数%v / 总人数%m")
pb.setFormat("当前人数{} / 总人数%m".format(pb.value()-pb.minimum()))
效果展示:
#文本标签操作
pb.setTextVisible(False)#默认True,文字部分隐藏
pb.text()#打印文本标签,就是隐藏起来的内容
pb.resize(40,400)
pb.setOrientation(Qt.Vertical)#垂直方向,改动的只是进度条方向,但是尺寸依旧需要手动调整,竖直方向文字部分会隐藏
#倒立外观(反转)
pb.setInvertedAppearance(True)#从上往下
运行结果:
#定时器
timer=QTimer(pb)
def change_progress():
if pb.value()==pb.maximum():
timer.stop()
pb.setValue(pb.value()+1)
timer.timeout.connect(change_progress)
timer.start(2000)#2秒
pb.valueChanged.connect(lambda val:print('当前的进度值:',val))
from PyQt5.Qt import *
import sys
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('QErrorMessage')
self.resize(500,500)
self.setup_ui()
def setup_ui(self):
# em=QErrorMessage(self)
# em.setWindowTitle('错误提示')
# em.showMessage('1.真不巧,又出错了')#这里的富选框,不再显示相同的信息
# em.showMessage('2.真不巧,又出错了')
# em.showMessage('3.真不巧,又出错了')
# em.showMessage('4.真不巧,又出错了')
# em.open()
# em.exec()#应用程序方式
QErrorMessage.qtHandler()
qDebug('qDebug')#展示调试信息
qWarning('qWarning')#展示警告信息
if __name__=='__main__':
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
from PyQt5.Qt import *
import sys
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('QProgressDialog')
self.resize(500,500)
self.setup_ui()
def setup_ui(self):
# pd=QProgressDialog(self)#对话框会自动弹出来,但有一定的间隔;如果4秒还没跑完,才会显示出来
pd=QProgressDialog('xx1','xx2',1,1000,self)
pd.setWindowTitle('窗口标题')
# pd.setMinimumDuration(0)#设置等待时间,0表示不显示
pd.setAutoClose(False)#满了之后不自动关闭
pd.setAutoReset(False)#取消自动重置
pd.open(lambda :print('对话框被取消'))
for i in range(1,101):
pd.setValue(i)#满值时,会自动重置
# pd.show()
if __name__=='__main__':
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
运行效果:
from PyQt5.Qt import *
import sys
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('QProgressDialog')
self.resize(500,500)
self.setup_ui()
def setup_ui(self):
pd=QProgressDialog(self)#对话框会自动弹出来,但有一定的间隔;如果4秒还没跑完,才会显示出来
pd.setWindowTitle('窗口标题')
pd.setLabelText('下载进度')
pd.setCancelButtonText('取消下载')
pd.setRange(0,100)
pd.setAutoClose(False)#满了之后不自动关闭
pd.setAutoReset(False)#取消自动重置
pd.open(lambda :print('对话框被取消'))
timer=QTimer(pd)
pd.setAutoReset(False)
def test():
if pd.value()>=pd.maximum() or pd.wasCanceled():
timer.stop()
else:
pd.setValue(pd.value() + 1)
timer.timeout.connect(test)
timer.start(1000)#1s
#信号
pd.canceled.connect(timer.stop)
if __name__=='__main__':
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
效果展示:
from PyQt5.Qt import *
import sys
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('QMessageBox')
self.resize(500,500)
self.setup_ui()
def setup_ui(self):
mb=QMessageBox(self)#是一个模态对话框
# mb=QMessageBox(QMessageBox.Warning,'xx1','xx2
',QMessageBox.Ok | QMessageBox.Discard,self)
# mb.setModal(False)#强行改为非模态对话框
# mb.setWindowModality(Qt.NonModal)#非模态
mb.setWindowTitle('消息提示')#设置窗口标题
mb.setIcon(QMessageBox.Information)#设置标准图标
mb.setIconPixmap(QPixmap('图片/提示.png').scaled(50,50))#自定义图标
mb.setTextFormat(Qt.PlainText)#设置为普通文本
mb.setText('文件内容已经被修改
')#主标题,可以设置富文本
mb.setInformativeText('是否直接关闭不保存?
')#设置副标题
mb.setCheckBox(QCheckBox('下次不再提醒',mb))
mb.setDetailedText('你修改的内容是给每一行代码加了一个分号
')#不支持富文本
mb.exec()#应用程序级别的模态对话框
#mb.open()#窗口级别的模态对话框
if __name__=='__main__':
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
运行效果:
#添加按钮
mb.setStandardButtons(QMessageBox.Yes | QMessageBox.No)
mb.addButton(QPushButton('xx1',mb),QMessageBox.YesRole)
# mb.addButton(QPushButton('xx2', mb), QMessageBox.NoRole)
btn2=mb.addButton('xx2',QMessageBox.NoRole)#同上,但是返回结果是一个按钮QPushButton
# #移除按钮
# mb.removeButton(btn2)
# #设置默认按钮:敲回车,默认点击的按钮
# mb.setDefaultButton(btn2)
#点击esc会触发哪个按钮
mb.setEscapeButton(btn2)
print(btn2)
def test(btn):
print(btn)
if btn==btn2:
print('点击了第二个按钮')
else:
print('点击了其他按钮')
mb.buttonClicked.connect(test)#信号,点击按钮会触发
QMessageBox.about(self,'xx1','xx2')
QMessageBox.aboutQt(self,'xx3')#封装的一个Qt的对话框
QMessageBox.question(self,'xx1','xx2',QMessageBox.Ok | QMessageBox.Discard)#问号图标