python GUI编程——PyQt学习一
文章目录
前言
在python中有许多用于GUI编程的工具包,PyQt就是其一,本系列文章主要是应用该包来学习GUI编程。
一、GUI与PyQt6介绍
GUI编程(Graphical User Interface Programming)是指通过图形化界面与用户进行交互、操作计算机的过程。相比于使用命令行界面,GUI界面更加直观、易于操作,提供了丰富的用户交互方式,如窗口、按钮、菜单、文本框等组件。
GUI编程有许多不同的框架和工具可供选择,如PyQt、Tkinter、wxPython等。而PyQt6就是PyQt框架的一个较新的版本。
PyQt6是一个创建GUI应用程序的工具包,它是python编程语言和Qt库的融合。示例:
from PyQt6.QtWidgets import (
QApplication, QDialog,QPushButton,QHBoxLayout,QMessageBox
)
import sys
if __name__ == "__main__":
app = QApplication(sys.argv) # 创建QApplication对象,作为GUI程序的主要入口
#将sys.argv列表传递给QApplication构造函数,以便让QApplication获取到命令行参数,以便在应用程序中使用。
window = QDialog() # 创建一个对话框窗口
window.resize(500,300) # 调整窗口大小为宽度500,高度300
def show_msg():
QMessageBox.information(window,"信息提示","你点击了我") # 弹出一个消息对话框,显示"你点击了我"
hbox = QHBoxLayout() # 创建水平布局管理器
button = QPushButton("快点击我!") # 创建一个按钮控件,文本为"快点击我!"
button.clicked.connect(show_msg) # 将按钮的点击事件与show_msg函数连接起来
hbox.addWidget(button) # 将按钮添加到布局管理器中
window.setLayout(hbox) # 在窗口中设置布局管理器
window.show() # 显示窗口
sys.exit(app.exec()) # 运行程序的主循环,直到窗口被关闭或程序退出
二、生成一个简单程序
2.1. 使用QT设计师绘制界面
有关汉化,请参考以下文章:
https://blog.csdn.net/qq_38463737/article/details/107221910
通过”堆积木“构建程序界面:
2.2. 在pycharm中将ui文件转换为py文件
在将QT设计师中得到的界面保存后得到ui文件,之后我们要将ui文件转换为py文件。
有一个方法是直接在pycharm中生成一个专门转换的外部工具
打开设置中的工具中的外部工具,添加外部工具
名称自己定;
程序: 填写配置的解释器路径;
#实参:
-m PyQt6.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py
#工作目录:
$FileDir$
然后选中ui文件,右键点击刚才创建的外部工具。
2.3. 编写主程序
采用界面与逻辑分离方法来编写主程序。
import random
import string
import sys
from PyQt6.QtWidgets import (
QApplication, QDialog, QMessageBox
)
from password_generate import Ui_PasswordGenerate #这既是上面转化来的py文件
class MyPasswordGenerate(Ui_PasswordGenerate, QDialog):
def __init__(self):
super().__init__() # 初始化父类本身的内存位置,以便直接访问父类的属性对象
self.setupUi(self) #将UI界面显示出来
self.show()
self.pushButton.clicked.connect(
self.new_password # 将按钮点击事件与new_password方法连接起来
)
def new_password(self): # 编写信号处理函数
site = self.lineEdit_site.text()
if not site:
QMessageBox.warning(self, "信息提示", "请输入site")
return
words = [] #构建一个包含候选字符的列表
if self.checkBox_upper.isChecked():
words.append(string.ascii_uppercase *2)
if self.checkBox_lower.isChecked():
words.append(string.ascii_lowercase *2)
if self.checkBox_digit.isChecked():
words.append(string.digits *2)
if self.checkBox_puc.isChecked():
words.append(string.punctuation *2)
if not words:
words = (
string.digits + string.ascii_uppercase + string.ascii_lowercase + string.punctuation
) # 候选字符
else:
words = "".join(words)
words = random.sample(list(words), 20) # 随机生成
password = "".join(words) # 变为字符串
self.lineEdit_result.setText(password) # 写入
with open("我的密码本.txt","a",encoding= "utf-8") as f:
f.write(f"{site}\t{password}\n")
QMessageBox.information(self, "信息提示", "密码设置成功") # 弹出信息提示,显示密码设置成功的消息
if __name__ == "__main__":
app = QApplication(sys.argv)
MyPasswordGenerate = MyPasswordGenerate() #创建实例
sys.exit(app.exec())
2.4. 使用pyinstaller打包为exe小程序
先打开pycharm下方的Terminal终端
下载pyinstaller
pip install pyinstaller
表示已经安装好:
如果出现这种情况,说明pathlib包与pyinstaller包不兼容,我们要删去pathlib包
我试着用 pip uninstall 删除,结果报错:
应该是要以管理员身份运行的,可以打开windows的终端管理员来运行卸载命令。
调用命令生成:
可以在dist文件夹中找到exe文件,成功生成exe文件
总结
本章简单记录了什么是GUI编程,并且介绍了PyQt6这个创建GUI应用程序的工具包。最后就是生成了一个简单的密码生成器小程序。
寂兮寥兮,独立而不改,周行而不殆,可以为天下母。
–2023-10-3 筑基篇