一些常用组件的说明:
根据 PYQT5学习文档1-安装编辑界面并生成py文件 的内容,重新布局页面内容,把常用的一些功能进行说明。
拖拽组件,并重新命名:
用到的组件有label(标签文本)、line_edit(线文本编辑)、text_browser(文本编辑)、push_button(按钮)、progressBar(进度条),可以根据上面的图进行命名保存为test.ui,在对应的文件夹位置,点击文件,点击下图。
如果是win11,直接在文件夹内点击鼠标右键,选择在终端中打开即可。
运行代码:pyuic5 -o test.py test.ui
生成一个名为test.py的界面文件,可以打开看一下代码
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(528, 321)
self.start = QtWidgets.QPushButton(Dialog)
self.start.setGeometry(QtCore.QRect(350, 170, 131, 41))
self.start.setObjectName("start")
self.exit = QtWidgets.QPushButton(Dialog)
self.exit.setGeometry(QtCore.QRect(350, 250, 131, 41))
self.exit.setObjectName("exit")
self.lineEdit_folder = QtWidgets.QLineEdit(Dialog)
self.lineEdit_folder.setGeometry(QtCore.QRect(150, 40, 241, 20))
self.lineEdit_folder.setObjectName("lineEdit_folder")
self.lineEdit_file = QtWidgets.QLineEdit(Dialog)
self.lineEdit_file.setGeometry(QtCore.QRect(150, 70, 241, 20))
self.lineEdit_file.setObjectName("lineEdit_file")
self.label_3 = QtWidgets.QLabel(Dialog)
self.label_3.setGeometry(QtCore.QRect(50, 70, 71, 21))
self.label_3.setObjectName("label_3")
self.label_2 = QtWidgets.QLabel(Dialog)
self.label_2.setGeometry(QtCore.QRect(50, 40, 61, 16))
self.label_2.setObjectName("label_2")
self.textBrowser = QtWidgets.QTextBrowser(Dialog)
self.textBrowser.setGeometry(QtCore.QRect(50, 160, 256, 141))
self.textBrowser.setObjectName("textBrowser")
self.progressBar = QtWidgets.QProgressBar(Dialog)
self.progressBar.setGeometry(QtCore.QRect(50, 110, 421, 23))
self.progressBar.setProperty("value", 24)
self.progressBar.setObjectName("progressBar")
self.choise_folder = QtWidgets.QPushButton(Dialog)
self.choise_folder.setGeometry(QtCore.QRect(420, 40, 75, 23))
self.choise_folder.setObjectName("choise_folder")
self.choise_file = QtWidgets.QPushButton(Dialog)
self.choise_file.setGeometry(QtCore.QRect(420, 70, 75, 23))
self.choise_file.setObjectName("choise_file")
self.label_1 = QtWidgets.QLabel(Dialog)
self.label_1.setGeometry(QtCore.QRect(250, 10, 41, 21))
self.label_1.setLayoutDirection(QtCore.Qt.LeftToRight)
self.label_1.setObjectName("label_1")
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
self.start.setText(_translate("Dialog", "开始"))
self.exit.setText(_translate("Dialog", "退出"))
self.label_3.setText(_translate("Dialog", "文件路径:"))
self.label_2.setText(_translate("Dialog", "文件夹路径:"))
self.choise_folder.setText(_translate("Dialog", "选择文件夹"))
self.choise_file.setText(_translate("Dialog", "选择文件"))
self.label_1.setText(_translate("Dialog", "标 题"))
新建一个python执行文件,基础代码如下,调用qt的界面代码
#读取包
from PyQt5 import QtWidgets
# 导入ui文件转换后的py文件
from test import Ui_Dialog
from PyQt5.QtWidgets import QFileDialog
from PyQt5 import QtWidgets, QtCore
from PyQt5.QtWidgets import QLabel,QHBoxLayout,QWidget,QApplication,QMainWindow,QMessageBox
from PyQt5.QtGui import QPixmap
from PyQt5.QtCore import Qt, QThread, pyqtSignal, QWaitCondition, QMutex
import warnings
warnings.filterwarnings("ignore")
#创建窗口类
class mywindow(QtWidgets.QWidget, Ui_Dialog):
quit_trig = pyqtSignal()
def __init__ (self):
super(mywindow, self).__init__()
#运行界面
self.setupUi(self)
if __name__=="__main__":
import sys
app=QtWidgets.QApplication(sys.argv)
ui = mywindow()
ui.show()
sys.exit(app.exec_())
执行成功如下:
这里用了很多qt的库,都是一些常用的库,后续会用到,这里直接把所有的库都先写在这里。
现在窗口建立好了,但是点击是没有效果的,需要把所有的功能链接上功能函数。
首先在窗口类中把对应的函数写好,并且关联上按钮组件,self.组件名.click.connect(函数)
补充代码如下:
#创建窗口类
class mywindow(QtWidgets.QWidget, Ui_Dialog):
quit_trig = pyqtSignal()
def __init__ (self):
super(mywindow, self).__init__()
#运行界面
self.setupUi(self)
#选择文件夹按钮与函数链接
self.choise_folder.clicked.connect(self.write_folder)
#选择文件按钮函数链接
self.choise_file.clicked.connect(self.read_file)
#开始按钮函数链接
self.start.clicked.connect(self.process)
#退出按钮函数链接
self.exit.clicked.connect(self.clickButtonCloseWindow)
#初始化进度条为0,进度默认范围0-100
self.progressBar.setProperty("value", 0)
def write_folder(self):
#选取文件夹
foldername = QFileDialog.getExistingDirectory(self, "选取文件夹", "C:/")
#将选取的文件夹路径写入lineEdit_folder中
self.lineEdit_folder.setText(foldername)
def read_file(self):
#选取文件路径
filename, filetype =QFileDialog.getOpenFileName(self, "选取文件", "C:/", "All Files(*);;Text Files(*.csv)")
#将路径写入 lineEdit_file 中
self.lineEdit_file.setText(filename)
def clickButtonCloseWindow(self):
#调用qt的弹窗消息的库
a = QMessageBox.question(self, '退出', '是否退出程序?', QMessageBox.Yes | QMessageBox.No, QMessageBox.No) #"退出"代表的是弹出框的标题,"你确认退出.."表示弹出框的内容
if a == QMessageBox.Yes:
self.close() #接受关闭事件
else:
pass
def process(self):
#输出文件夹路径:
self.textBrowser.append(f"输出:{self.lineEdit_folder.text()}")
# 移动光标到底部
self.textBrowser.moveCursor(self.textBrowser.textCursor().End)
#输出文件的路径:
self.textBrowser.append(f"输出:{self.lineEdit_file.text()}")
# 移动光标到底部
self.textBrowser.moveCursor(self.textBrowser.textCursor().End)
n=10
for i in range(n):
time.sleep(0.1)
#在textbrowser中显示内容
self.textBrowser.append(f"输出:{i}")
# 移动光标到底部
self.textBrowser.moveCursor(self.textBrowser.textCursor().End)
#界面刷新显示(没有以下代码,界面会出现假死现象,循环运行完成之后才会全部显示出来,可以注释掉对比下)
#多线程的内容等后面再做补充。
QtWidgets.QApplication.processEvents()
#设置进度条展示(进度条设置也有刷新的功能,设置进度条后,可以不用上面那个刷新代码,也会有刷新的效果)
self.progressBar.setProperty("value", (i+1)/n*100)
运行程序里面,没有实际的功能含义,只是做展示,通过self.组件名称.text()的方式,可以获取组件的文本内容,将数据进行调取,self.textBrowser.append("内容")对整个内容进行运行日志的输出。其他功能可以看代码注释。
这样一个简单的单界面的小程序就完成了。
其他文档: