前言:
最近要写代码给小白使用,但是让对方装python环境还要运行添加各种库,对小白太不友好了,所以选择了使用pyqt6+pycharm配合生成可视化python程序,在打包成exe执行。
环境搭建:
首先安装PyQt6和PyQt6-tools。使用如下命令:
pip install PyQt6 PyQt6-tools
但是运行后会报如下错误:
这个时候按照提示执行命令升级pip即可
python.exe -m pip install --upgrade pip
之后再执行安装即可:
配置pycharm:
打开pycharm,进入setting,到如下位置:
首先添加pyqt6-tools.exe到pycharm
Name:QtDesigner
Group:PYQT6
Program:D:\Program Files\python3.9\Scripts\pyqt6-tools.exe(自己安装的python路径)
Arguments:designer
Working directory:$FileDir$
然后添加pyuic6.exe:
Name:Pyuic
Group:PYQT6
Program:D:\Program Files\python3.9\Scripts\pyuic6.exe(自己安装的python路径)
Arguments:$FileName$ -o $FileNameWithoutExtension$.py
Working directory:$FileDir$
配置完成后,可以在界面看到:
项目使用:
首先新建一个项目,然后再新建文件的任意位置右键再菜单中选择
这里有可能会报错:
这个时候就要手动添加designer.exe
Name:Py_Designer
Group:PYQT6
Program:E:\python3\Lib\site-packages\qt6_applications\Qt\bin\designer.exe(自己安装的designer.exe路径)
Working directory:$FileDir$
然后运行刚添加的Py_Designer即可
然后进入QT Designer界面:
可以随便选择,我这里选择的低四个Main Window
我这里添加了两个编辑框和一个按钮
保存后关闭界面可以看到文件夹中多出了untitled.ui文件,这个时候需要将ui文件转换为python文件,使用pyuic6.exe即可:
点击后在文件夹生成untitled.py,如下:
# Form implementation generated from reading ui file 'untitled.ui'
#
# Created by: PyQt6 UI code generator 6.4.2
#
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt6 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(parent=MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.textEdit = QtWidgets.QTextEdit(parent=self.centralwidget)
self.textEdit.setGeometry(QtCore.QRect(100, 130, 471, 221))
self.textEdit.setObjectName("textEdit")
self.pushButton = QtWidgets.QPushButton(parent=self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(340, 90, 181, 23))
self.pushButton.setObjectName("pushButton")
self.textEdit_2 = QtWidgets.QTextEdit(parent=self.centralwidget)
self.textEdit_2.setGeometry(QtCore.QRect(100, 80, 221, 31))
self.textEdit_2.setObjectName("textEdit_2")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(parent=MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(parent=MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "确定"))
下面我们进入main函数初始化:
import sys
from PyQt6.QtWidgets import QApplication, QMainWindow
from PyQt6.uic.Compiler.qtproxies import QtWidgets
from untitled import Ui_MainWindow
class MyMainForm(QMainWindow, Ui_MainWindow):
def __init__(self):
super(MyMainForm, self).__init__()
self.setupUi(self)
# Press the green button in the gutter to run the script.
if __name__ == '__main__':
app = QApplication(sys.argv)
myw = MyMainForm()
myw.show()
sys.exit(app.exec())
现在运行代码,可以看到已经能打开界面:
下面添加按钮事件,这里有些人喜欢在QT Designer中添加,但是我并不建议,因为这样不好分割而且有些时候会有兼容等问题,有些按钮不能使用,比如:
编辑框未灰色,无法自定义事件,就不太友好了,所以建议代码直接添加,如下所示:
首先我们要添加一个按钮事件:
self.pushButton.clicked.connect(self.pushButton_click)
这里pushButton是我们添加的按钮ObjectName,然后添加pushButton_click函数即可,完整代码如下:
import sys
from PyQt6.QtWidgets import QApplication, QMainWindow
from PyQt6.uic.Compiler.qtproxies import QtWidgets
from untitled import Ui_MainWindow
class MyMainForm(QMainWindow, Ui_MainWindow):
def __init__(self):
super(MyMainForm, self).__init__()
self.setupUi(self)
## 添加按钮事件
self.pushButton.clicked.connect(self.pushButton_click)
# textEdit是我们放上去的文本框的id
def pushButton_click(self):
tmp = self.textEdit_2.toPlainText()
self.textEdit.setText( "输入内容为:"+ tmp )
# Press the green button in the gutter to run the script.
if __name__ == '__main__':
app = QApplication(sys.argv)
myw = MyMainForm()
myw.show()
sys.exit(app.exec())
运行可以看到:
后续大家就可以自己写自己的功能了,开心的玩耍了~!
版权归原作者 GalaxySpaceX 所有, 如有侵权,请联系我们删除。