1.最基本的windows窗口
# coding = utf-8
import sys
# QtWidgets模块包含一整套UI组件
from PyQt5.QtWidgets import QApplication, QWidget
if __name__ == '__main__':
# sys.argv:得到文件所在路径
app = QApplication(sys.argv) # 创建应用函数对象
w = QWidget() # 创建窗口
w.resize(250, 150) # 调整窗口大小
w.move(300, 300) # 移动窗口到屏幕的(300,300)位置,左上角(0,0)
w.setWindowTitle('最基本的窗口') # 设置窗口标题
w.show() # 将窗口显示在屏幕上
# 主循环(main loop)从窗口系统接收事件并将它们分派到应用程序小部件
# 调用exit()方法或者主窗口小部件被破坏,那么主循环(main loop)就会结束
sys.exit(app.exec_()) # 进入应用程序的主循环
运行效果

1.1 带图标的窗口
# coding = utf-8
import sys
# QtWidgets模块包含一整套UI组件
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton
# QIcon方便图标的设定
from PyQt5.QtGui import QIcon
# 按钮动作需要的模块
from PyQt5.QtCore import QCoreApplication
class Ico(QWidget):
def __init__(self):
super().__init__() # 继承QWidget,同时初始化
self.initUI() # 程序的GUI界面用initUI()函数创建
def initUI(self):
# 继承于QWidget
# 前面2个是定位(x,y),后面2个是大小(宽度,高度)
self.setGeometry(300, 300, 300, 220)
self.setWindowTitle('最基本的窗口V1.1') # 设置窗口标题
self.setWindowIcon(QIcon('favicon.ico')) # 创建QIcon对象显示图标
# 增加一个退出按钮
qbtn = QPushButton('退出', self) # 创建一个退出按钮
# 信号和槽,信号:点击,槽:主事件循环.当前实例.quit方法
# QCoreApplication包含主事件循环,它处理和调度所有事件,instance方法返回当前的实例。
qbtn.clicked.connect(QCoreApplication.instance().quit)
qbtn.resize(70, 30) # 按钮的大小
qbtn.move(50, 50) # 按钮的位置
self.show() # 显示窗口
if __name__ == '__main__':
# sys.argv:得到文件所在路径
app = QApplication(sys.argv) # 创建应用函数对象
ex = Ico()
sys.exit(app.exec_()) # 进入应用程序的主循环
效果图

1.2 简易的windows窗口
# coding=utf-8
from PyQt5.QtWidgets import QApplication, QMainWindow, QAction, qApp, QMenu
from PyQt5.QtGui import QIcon
import sys
class Example(QMainWindow):
def __init__(self):
super().__init__()
self.InitUI()
def InitUI(self):
self.statusBar().showMessage('准备就绪')
self.setGeometry(300, 300, 400, 300)
self.setWindowTitle('最基本的菜单V1.2')
# 创建一个具有特定图标,"退出"标签
exitAct = QAction(QIcon('草莓.ico'), '退出(&E)', self)
exitAct.setShortcut('Ctrl+Q') # 快捷键 Ctrl+Q
exitAct.setStatusTip('退出程序') # 状态栏的提示
exitAct.triggered.connect(qApp.quit) # 触发triggered
saveMenu = QMenu('保存方式(&S)', self) # 保存方式菜单
# 创建一个具有特定图标,"保存"标签
saveAct = QAction(QIcon('美女.ico'), '保存...', self)
saveAct.setShortcut('Ctrl+S') # 快捷键 Ctrl+s
saveAct.setStatusTip('保存文件') # 状态栏的提示
# 创建一个具有特定图标,"另存为"标签
saveasAct = QAction(QIcon('美女.ico'), '另存为...(&O)', self)
saveasAct.setStatusTip('文件另存为') # 状态栏的提示
saveMenu.addAction(saveAct) # 增加保存到子菜单
saveMenu.addAction(saveasAct) # 增加另存为到子菜单
newAct = QAction(QIcon('美女.ico'), '新建(&N)', self)
newAct.setShortcut('Ctrl+N')
newAct.setStatusTip('新建文件')
menubar = self.menuBar()
fileMenu = menubar.addMenu('文件(&F)')
# 将这些菜单都加入文件的子菜单
fileMenu.addAction(newAct)
fileMenu.addMenu(saveMenu)
fileMenu.addSeparator()
fileMenu.addAction(exitAct)
# 工具栏
toolbar = self.addToolBar('工具栏')
toolbar.addAction(newAct)
toolbar.addAction(exitAct)
self.show()
def contextMenuEvent(self, event):
cmenu = QMenu(self)
newAct = cmenu.addAction("新建")
opnAct = cmenu.addAction("保存")
quitAct = cmenu.addAction("退出")
# event.pos获取事件坐标,mapToGlobal方法将窗口小部件坐标转换为全局屏幕坐标。
action = cmenu.exec_(self.mapToGlobal(event.pos()))
if action == quitAct:
qApp.quit()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
运行效果


2.猜数字小游戏
# coding = utf-8
import sys
# UI相关
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox, QLineEdit
# 图标相关
from PyQt5.QtGui import QIcon
# 随机数相关
from random import randint
class GuessNum(QWidget):
def __init__(self):
super().__init__() # 继承并初始化
self.initUI() # GUI界面的创建
self.num = randint(1, 100) # 随机数的产生
self.level = 1 # 级别
def initUI(self):
self.setGeometry(300, 300, 300, 220) # (x,y,width,height)
self.setWindowTitle('猜数字V1.0') # title
self.setWindowIcon(QIcon('favicon.ico')) # 图标
# 设置猜数字的确定按钮
self.bt1 = QPushButton('我猜', self) # 按钮名称
self.bt1.setGeometry(115, 150, 70, 30) # (x,y,width,height)
self.bt1.setToolTip('<b>点击这里猜数字</b>') # 按钮提示(鼠标移上去提示)
# 信号:点击,槽:showMessage
self.bt1.clicked.connect(self.showMessage)
self.text = QLineEdit('在这里输入数字', self) # 文本框提示
self.text.selectAll() # 将输入框全选
self.text.setFocus() # 让焦点置于文本框
self.text.setGeometry(80, 50, 150, 30) # (x,y,width,height)
self.show() # 来吧,展示
def showMessage(self):
guessnumber = int(self.text.text()) # 输入的数字
print(self.num) # 系统产生的随机数
if guessnumber > self.num:
QMessageBox.about(self, '结果', '猜大了!') # 弹窗
self.text.setFocus() # 聚焦文本框
elif guessnumber < self.num:
QMessageBox.about(self, '结果', '猜小了!')
self.text.setFocus()
else: # 相等的时候
QMessageBox.about(self, '结果', '答对了!进入下一轮!')
self.level += 1 # 级别+1
self.num = randint(1, 100 * self.level) # 范围扩大100
self.text.clear()
self.text.setFocus()
def closeEvent(self, event):
# 关闭QWidget,则生成QCloseEvent,需要重新实现closeEvent函数处理
reply = QMessageBox.question(self, '确认', '确认退出吗', QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
if reply == QMessageBox.Yes:
event.accept()
else:
event.ignore()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = GuessNum()
sys.exit(app.exec_())
运行效果

坑1.0:打包不会打包图标文件,导致exe文件显示不了图标
可能的解决方法:将图片转成字节码存储,然后直接写入
import os, base64
with open("./美女.ico", "rb") as f:
# b64encode是编码,b64decode是解码
base64_data = base64.b64encode(f.read())
print(base64_data) # 输出生成的base64码
img_data = base64.b64decode(base64_data)
with open('美女1.ico', 'wb') as f:
f.write(img_data)
3.石头剪刀布小游戏
# coding=utf-8
import sys
from PyQt5.QtWidgets import QApplication, QMessageBox, QWidget, QPushButton
from random import randint # 随机数
# 图标相关
from PyQt5.QtGui import QIcon
class RockPaperScissors(QWidget):
def __init__(self):
super().__init__() # 继承和初始化
self.initUI() # GUI界面的创建
def initUI(self):
self.setGeometry(200, 200, 300, 300) # (x,y,width,height)
self.setWindowTitle('石头剪刀布V1.0')
self.setWindowIcon(QIcon('美女.ico')) # 图标
# 设置剪刀按钮
bt1 = QPushButton('剪刀', self)
bt1.setGeometry(30, 180, 50, 50)
# 设置石头按钮
bt2 = QPushButton('石头', self)
bt2.setGeometry(100, 180, 50, 50)
# 设置布按钮
bt3 = QPushButton('布', self)
bt3.setGeometry(170, 180, 50, 50)
# 信号:点击,槽:buttonclicked函数
bt1.clicked.connect(self.buttonclicked)
bt2.clicked.connect(self.buttonclicked)
bt3.clicked.connect(self.buttonclicked)
self.show() # 显示窗口
def buttonclicked(self):
computer = randint(1, 3)
player = 0
# 调用这个函数,返回的就是你信号来源的对象
sender = self.sender()
# 确定鼠标点按钮是剪刀、石头、布
if sender.text() == '剪刀':
player = 1 # 1.代表剪刀
elif sender.text() == '石头':
player = 2 # 2.代表石头
else:
player = 3 # 3代表布
# 根据剪刀石头布的判断规则,判断输赢
if player == computer:
QMessageBox.about(self, '结果', '平手')
elif player == 1 and computer == 2:
QMessageBox.about(self, '结果', '电脑:石头,电脑赢了!')
elif player == 2 and computer == 3:
QMessageBox.about(self, '结果', '电脑:布,电脑赢了!')
elif player == 3 and computer == 1:
QMessageBox.about(self, '结果', '电脑:剪刀,电脑赢了!')
elif computer == 1 and player == 2:
QMessageBox.about(self, '结果', '电脑:剪刀,玩家赢了!')
elif computer == 2 and player == 3:
QMessageBox.about(self, '结果', '电脑:石头,玩家赢了!')
elif computer == 3 and player == 1:
QMessageBox.about(self, '结果', '电脑:布,玩家赢了!')
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = RockPaperScissors()
sys.exit(app.exec_())
运行效果

3.1 剪刀石头布+布局
# coding=utf-8
import sys
from PyQt5.QtWidgets import QApplication, QMessageBox, QWidget, QPushButton, QHBoxLayout, QVBoxLayout
from random import randint # 随机数
# 图标相关
from PyQt5.QtGui import QIcon
class RockPaperScissors(QWidget):
def __init__(self):
super().__init__() # 继承和初始化
self.initUI() # GUI界面的创建
def initUI(self):
self.setGeometry(300, 300, 400, 300) # (x,y,width,height)
self.setWindowTitle('石头剪刀布V1.1')
self.setWindowIcon(QIcon('美女.ico')) # 图标
# 新建三个按钮
bt1 = QPushButton('剪刀', self)
bt2 = QPushButton('石头', self)
bt3 = QPushButton('布', self)
hbox = QHBoxLayout() # 设置水平布局
hbox.addStretch(1) # 增加拉伸因子(按钮之间水平距离)
hbox.addWidget(bt1) # 增加水平布局按钮1
hbox.addWidget(bt2) # 增加水平布局按钮3
hbox.addWidget(bt3) # 增加水平布局按钮3
vbox = QVBoxLayout() # 设置垂直布局
vbox.addStretch(1) # 增加一个拉伸因子(按钮之间的垂直距离)
vbox.addLayout(hbox) # 将窗口推到窗口右边
self.setLayout(vbox) # 设置窗口的主要布局
# 信号:点击,槽:buttonclicked函数
bt1.clicked.connect(self.buttonclicked)
bt2.clicked.connect(self.buttonclicked)
bt3.clicked.connect(self.buttonclicked)
self.show() # 显示窗口
def buttonclicked(self):
computer = randint(1, 3)
player = 0
# 调用这个函数,返回的就是你信号来源的对象
sender = self.sender()
# 确定鼠标点按钮是剪刀、石头、布
if sender.text() == '剪刀':
player = 1 # 1.代表剪刀
elif sender.text() == '石头':
player = 2 # 2.代表石头
else:
player = 3 # 3代表布
# 根据剪刀石头布的判断规则,判断输赢
if player == computer:
QMessageBox.about(self, '结果', '平手')
elif player == 1 and computer == 2:
QMessageBox.about(self, '结果', '电脑:石头,电脑赢了!')
elif player == 2 and computer == 3:
QMessageBox.about(self, '结果', '电脑:布,电脑赢了!')
elif player == 3 and computer == 1:
QMessageBox.about(self, '结果', '电脑:剪刀,电脑赢了!')
elif computer == 1 and player == 2:
QMessageBox.about(self, '结果', '电脑:剪刀,玩家赢了!')
elif computer == 2 and player == 3:
QMessageBox.about(self, '结果', '电脑:石头,玩家赢了!')
elif computer == 3 and player == 1:
QMessageBox.about(self, '结果', '电脑:布,玩家赢了!')
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = RockPaperScissors()
sys.exit(app.exec_())
运行效果

4.个人信息登记
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel, QInputDialog, QTextBrowser
import sys
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(500, 500, 300, 550)
self.setWindowTitle('个人信息登记')
self.lb1 = QLabel('姓名:', self)
self.lb1.move(20, 20)
self.lb2 = QLabel('年龄:', self)
self.lb2.move(20, 80)
self.lb3 = QLabel('性别:', self)
self.lb3.move(20, 140)
self.lb4 = QLabel('身高(cm):', self)
self.lb4.move(20, 200)
self.lb5 = QLabel('基本信息:', self)
self.lb5.move(20, 260)
self.lb6 = QLabel('旋涡鸣人', self)
self.lb6.move(80, 20)
self.lb7 = QLabel('14', self)
self.lb7.move(80, 80)
self.lb8 = QLabel('男', self)
self.lb8.move(80, 140)
self.lb9 = QLabel('155', self)
self.lb9.move(120, 200)
self.tb = QTextBrowser(self)
self.tb.move(20, 320)
self.bt1 = QPushButton('修改姓名', self)
self.bt1.move(200, 20)
self.bt2 = QPushButton('修改年龄', self)
self.bt2.move(200, 80)
self.bt3 = QPushButton('修改性别', self)
self.bt3.move(200, 140)
self.bt4 = QPushButton('修改身高', self)
self.bt4.move(200, 200)
self.bt5 = QPushButton('修改信息', self)
self.bt5.move(200, 260)
self.show()
self.bt1.clicked.connect(self.showDialog)
self.bt2.clicked.connect(self.showDialog)
self.bt3.clicked.connect(self.showDialog)
self.bt4.clicked.connect(self.showDialog)
self.bt5.clicked.connect(self.showDialog)
def showDialog(self):
sender = self.sender()
sex = ['男', '女']
if sender == self.bt1:
text, ok = QInputDialog.getText(self, '修改姓名', '请输入姓名:')
if ok:
self.lb6.setText(text)
elif sender == self.bt2:
text, ok = QInputDialog.getInt(self, '修改年龄', '请输入年龄:', min=1)
if ok:
self.lb7.setText(str(text))
elif sender == self.bt3:
text, ok = QInputDialog.getItem(self, '修改性别', '请选择性别:', sex)
if ok:
self.lb8.setText(text)
elif sender == self.bt4:
text, ok = QInputDialog.getDouble(self, '修改身高', '请输入身高:', min=1.0)
if ok:
self.lb9.setText(str(text))
elif sender == self.bt5:
text, ok = QInputDialog.getMultiLineText(self, '修改信息', '请输入个人信息:')
if ok:
self.tb.setText(text)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
运行效果

5.读取文件内容并改变文字字体和颜色
# conding=utf-8
from PyQt5.QtWidgets import QWidget, QApplication, QPushButton
# 颜色选择对话框,字体选择对话框,富文本呈现框,打开文件对话框
from PyQt5.QtWidgets import QColorDialog, QFontDialog, QTextEdit, QFileDialog
import sys
# QIcon方便图标的设定
from PyQt5.QtGui import QIcon
class Example(QWidget):
def __init__(self):
super().__init__() # 继承QWidget,同时初始化
self.initUI() # 程序的GUI界面用initUI()函数创建
def initUI(self):
self.setGeometry(300, 300, 500, 300) # (x,y,width,height)
self.setWindowTitle('打开文件,改变内容颜色和字体V1.0')
self.setWindowIcon(QIcon('./美女.ico')) # 创建QIcon对象显示图标
self.tx = QTextEdit(self) # 富文本编辑器
self.tx.setGeometry(20, 20, 300, 270) # (x,y,width,height)
# 三个按钮
self.bt1 = QPushButton('打开文件', self)
self.bt1.move(350, 20)
self.bt2 = QPushButton('选择字体', self)
self.bt2.move(350, 70)
self.bt3 = QPushButton('选择颜色', self)
self.bt3.move(350, 120)
# 连接点击事件
self.bt1.clicked.connect(self.openfile)
self.bt2.clicked.connect(self.choicefont)
self.bt3.clicked.connect(self.choicecolor)
self.show()
def openfile(self):
# 第一个按钮触发的函数
# 2个参数,getOpenFileName方法中获得第一个参数是文件名,第二个获得该文件的路径
fname = QFileDialog.getOpenFileName(self, '打开文件', './')
# 如果想增加文件限制,可以写成
# fname = QFileDialog.getOpenFileName(self, '打开文件', './', ("Images (*.png *.xpm *.jpg)"))
# 打开该文件并把内容写入富文本编辑器
if fname[0]:
with open(fname[0], 'r', encoding='utf-8', errors='ignore') as f:
self.tx.setText(f.read())
def choicefont(self):
# 第二个按钮触发的函数
font, ok = QFontDialog.getFont()
# 用户点击ok键,那么我们在文本编辑小部件中选择的内容会使用我们选择的字体。
if ok:
self.tx.setCurrentFont(font)
def choicecolor(self):
# 第三个按钮触发的函数
col = QColorDialog.getColor()
# 如果颜色有效,那么我们在文本编辑小部件中选择的内容会使用我们选择的颜色。
if col.isValid():
self.tx.setTextColor(col)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
执行效果

6.打开多个文件和保存、打印
# conding=utf-8
# QtWidgets模块包含一整套UI组件
from PyQt5.QtWidgets import QWidget, QApplication, QPushButton, QTextEdit, QFileDialog, QDialog
# 提供了一组附加功能来管理设备的特定功能,例如方向和分辨率等。
from PyQt5.QtPrintSupport import QPageSetupDialog, QPrintDialog, QPrinter
import sys
# 图标相关
from PyQt5.QtGui import QIcon
class Example(QWidget):
def __init__(self):
super().__init__()
self.printer = QPrinter() # 初始化生成QPrinter()对象
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 500, 400) # (x,y,width,height)
self.setWindowTitle('保存、打印文件V1.0')
self.setWindowIcon(QIcon('美女.ico')) # 图标
self.tx = QTextEdit(self) # 富文本编辑器
self.tx.setGeometry(20, 20, 300, 270)
# 五个按钮
self.bt1 = QPushButton('打开文件', self)
self.bt1.move(350, 20)
self.bt2 = QPushButton('打开多个文件', self)
self.bt2.move(350, 70)
self.bt5 = QPushButton('保存文件', self)
self.bt5.move(350, 220)
self.bt6 = QPushButton('页面设置', self)
self.bt6.move(350, 270)
self.bt7 = QPushButton('打印文档', self)
self.bt7.move(350, 320)
# 分别链接五个函数
self.bt1.clicked.connect(self.openfile)
self.bt2.clicked.connect(self.openfiles)
self.bt5.clicked.connect(self.savefile)
self.bt6.clicked.connect(self.pagesettings)
self.bt7.clicked.connect(self.printdialog)
self.show() # 展示
def openfile(self):
# 在富文本编辑器打开文件
fname = QFileDialog.getOpenFileName(self, '打开文件', './')
if fname[0]:
with open(fname[0], 'r', encoding='utf-8', errors='ignore') as f:
self.tx.setText(f.read())
def openfiles(self):
# 打开多个文件,以列表的方式存放路径
fnames = QFileDialog.getOpenFileNames(self, '打开多个文件', './')
if fnames[0]:
for fname in fnames[0]:
with open(fname, 'r', encoding='utf-8', errors='ignore') as f:
self.tx.append(f.read())
def savefile(self):
# 所谓保存文件,将富文本编辑器的内容写入文件
fileName = QFileDialog.getSaveFileName(self, '保存文件', './', "Text files (*.txt)")
if fileName[0]:
with open(fileName[0], 'w', encoding='utf-8', errors='ignore') as f:
f.write(self.tx.toPlainText())
def pagesettings(self):
# 打印页面配置
printsetdialog = QPageSetupDialog(self.printer, self)
printsetdialog.exec_()
def printdialog(self):
# 调用打印机进行打印
printdialog = QPrintDialog(self.printer, self)
if QDialog.Accepted == printdialog.exec_():
self.tx.print(self.printer)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
运行效果

6.进度条显示
from PyQt5.QtWidgets import QApplication, QWidget, QToolButton, QMainWindow, QProgressBar
from PyQt5.QtCore import Qt
import sys
import time
class my_window(QMainWindow):
def __init__(self):
super().__init__() # 继承QMainWindow 并初始化
self.initUI() # 程序的GUI界面用initUI()函数创建
self.show() # 显示界面
def initUI(self):
# self.setGeometry(300, 300, 400, 260) # (x,y,width,height)
self.resize(400, 260) # 固定GUI大小
self.setWindowTitle("进度条显示") # 标题
self.statusBar() # 显示状态栏
self.btn_1 = QToolButton(self) # 按钮1
self.btn_1.setGeometry(5, 5, 50, 30) # 按钮的位置和大小
self.btn_1.setText('开始') # 按钮名字
self.btn_1.setCheckable(True) # 设置按钮可以点击状态
self.btn_1.setChecked(False) # 设置按钮不可用状态
self.btn_1.setAutoRaise(True) # 设置按钮自动弹起
self.btn_1.setToolButtonStyle(Qt.ToolButtonTextOnly) # 只显示文字
self.btn_1.clicked.connect(self.showDetail) # 点击后链接函数
self.progressBar = QProgressBar(self) # 提供一个水平的进度条
self.progressBar.setGeometry(20, 100, 350, 20) # (x,y,width,height)
self.progressBar.setMaximum(100) # 最大值100
def showDetail(self):
if self.btn_1.isChecked():
self.statusBar().showMessage("正在增加...") # 状态栏提示信息
self.btn_1.setText('停止') # 点击之后按钮的显示
for i in range(101): # 进度条
self.progressBar.setValue(i) # 进度条显示的值
time.sleep(0.01) # 每0.01刷新一次
self.statusBar().showMessage('点一下停止就复原') # 进度条完成后的提示信息
else:
self.statusBar().showMessage("测试") # 其他情况状态栏的显示
self.progressBar.reset() # 复原进度条
self.btn_1.setText('开始') # 将按钮重新设置成开始
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = my_window()
sys.exit(app.exec_())
显示效果

7.控件大乱斗
import sys
from PyQt5.QtWidgets import QApplication, QPushButton, QLabel, QWidget, QMainWindow, QLineEdit, QMessageBox,
QTextEdit
from PyQt5.QtCore import QTimer, Qt
from PyQt5.QtGui import QFont, QPalette
n = 0
class MyDemo(QMainWindow):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
self.resize(600, 500) # 设置窗口大小
self.setWindowTitle('控件大乱斗') # 窗口名称
self.btn_1 = QPushButton('开始', self) # 第一个按钮名称
self.btn_1.setGeometry(100, 200, 100, 50) # 按钮位置
self.btn_1.clicked.connect(self.push_btn_1) # 按钮连接的函数
self.btn_2 = QPushButton('退出', self) # 第二个按钮名称
self.btn_2.setGeometry(450, 200, 100, 50) # 位置
self.btn_2.clicked.connect(self.push_btn_2) # 按钮连接的函数
self.btn_3 = QPushButton('停止警告提示', self) # 第三个按钮名称
self.btn_3.setGeometry(450, 100, 100, 50) # 按钮位置
self.btn_3.clicked.connect(self.push_btn_3) # 按钮连接的函数
self.btn_4 = QPushButton('暂停', self) # 第四个按钮名称
self.btn_4.setGeometry(300, 100, 100, 50) # 位置
self.btn_4.clicked.connect(self.push_btn_4) # 按钮连接函数
self.btn_5 = QPushButton('清空显示信息', self) # 第五个按钮
self.btn_5.setGeometry(100, 400, 100, 50) # 位置
self.btn_5.clicked.connect(self.push_btn_5) # 按钮连接函数
self.btn_6 = QPushButton('清除数字', self) # 第六个按钮
self.btn_6.setGeometry(300, 155, 100, 40) # 按钮位置
self.btn_6.clicked.connect(self.push_btn_6) # 按钮连接函数
self.label_1 = QLabel('<h1>?</h1>', self) # 第一个标签显示
self.label_1.setAlignment(Qt.AlignCenter) # 标签对其方式,纵向居中
self.label_1.setGeometry(100, 300, 150, 50) # 标签大小
self.label_2 = QLabel('<h1>...</h1>', self) # 第二个标签显示
self.label_2.setAlignment(Qt.AlignCenter) # 标签对其方式,纵向居中
self.label_2.setGeometry(100, 100, 100, 50) # 标签位置
self.linEdit_1 = QLineEdit('state', self) # 显示框
self.linEdit_1.setAlignment(Qt.AlignCenter) # 标签对其方式,纵向居中
self.linEdit_1.setFont(QFont('', 16, QFont.Bold)) # 设置字体属性
self.linEdit_1.setGeometry(220, 200, 200, 50) # 标签位置
self.textEdit_1 = QTextEdit(self) # 多行文本框
self.textEdit_1.setGeometry(300, 270, 260, 200) # 位置
self.mt = QTimer(self) # 计时器
self.mt.timeout.connect(self.my_function) # 计时器连接函数
# 调色板,三种颜色
self.my_color_red = QPalette()
self.my_color_red.setColor(QPalette.WindowText, Qt.red)
self.my_color_green = QPalette()
self.my_color_green.setColor(QPalette.WindowText, Qt.green)
self.my_color_black = QPalette()
self.my_color_black.setColor(QPalette.WindowText, Qt.black)
self.show() # 显示
def my_function(self):
global n
try:
# 偶数时,显示情况
if n % 2 == 0:
self.label_1.setText('<h1>注意!!!</h1>')
self.label_2.setText('<h1>警告!!!</h1>')
self.label_1.setPalette(self.my_color_red)
self.label_2.setPalette(self.my_color_red)
self.textEdit_1.append("<font color='red' size='14' >Hello World!</font>")
# 5的倍数时,显示情况
elif n % 5 == 0:
self.label_1.setText('<h1>注意!!!</h1>')
self.label_2.setText('<h1>警告!!!</h1>')
self.label_1.setPalette(self.my_color_green)
self.label_2.setPalette(self.my_color_green)
self.textEdit_1.append("<font color='green' size='14' >Hello People!</font>")
# 其他时间,其他时间显示情况
else:
self.label_1.setText('<h1>I LOVE PYTHON </h1>')
self.label_2.setText('<h1>...</h1>')
self.label_1.setPalette(self.my_color_black)
self.label_2.setPalette(self.my_color_black)
self.textEdit_1.append("<font color='black' size='14'>Life is short</font>")
n += 1
# 显示框
self.linEdit_1.setText('number: %d' % n)
# 错误捕捉
except Exception as e:
print(e)
# 计时器开始运行
def push_btn_1(self):
self.mt.start(200)
# 调用关闭函数
def push_btn_2(self):
self.close()
def push_btn_3(self):
self.label_2.setText('<h1>...</h1>')
# 停止计时
def push_btn_4(self):
self.mt.stop()
# 清除多行
def push_btn_5(self):
self.textEdit_1.clear()
def push_btn_6(self):
global n
n = 0
# 退出
def closeEvent(self, event):
reply = QMessageBox.question(self, 'exit', 'Are you sure to exit?', QMessageBox.Yes | QMessageBox.Cancel)
if reply == QMessageBox.Yes:
event.accept()
else:
event.ignore()
if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyDemo()
sys.exit(app.exec_())
显示效果

8.计算CPU性能
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import sys
class WorkThread(QThread):
trigger = pyqtSignal()
def __init__(self):
super(WorkThread, self).__init__()
def run(self):
for i in range(200000000):
s = 2 * i
self.trigger.emit()
class a_main(QWidget):
global sec
sec = 0
def __init__(self):
super(a_main, self).__init__()
self.InitUi()
def InitUi(self):
self.top = QWidget()
self.top.setWindowTitle('CPU性能检测')
layout = QVBoxLayout(self.top)
self.textlib = QTextEdit('计算s = 2*i,i = 200000000')
layout.addWidget(self.textlib)
self.lcdNumber = QLCDNumber()
layout.addWidget(self.lcdNumber)
button = QPushButton('开始')
layout.addWidget(button)
self.timer = QTimer()
self.workThread = WorkThread()
button.clicked.connect(self.work)
self.timer.timeout.connect(self.countTime)
self.top.show()
def countTime(self):
global sec
sec += 1
self.lcdNumber.display(sec)
self.textlib.append('运行 {} 秒'.format(sec))
def work(self):
self.timer.start(1000)
# workThread = WorkThread()
self.workThread.start()
self.workThread.trigger.connect(self.timeStop)
def timeStop(self):
self.timer.stop()
self.textlib.append('运行结束用时: {} 秒'.format(self.lcdNumber.value()))
global sec
sec = 0
if __name__ == '__main__':
app = QApplication(sys.argv)
w = a_main()
sys.exit(app.exec_())
运行效果
