用PyQt5写的第一个程序

作者: 麻辣阁 分类: python 发布时间: 2018-12-29 10:01

用Qt Designer 创建界面

随便拖点部件并保存, 这里假设保存为 MainWindow.ui ,并用 PyUIC 生成对应的python文件 MainWindow.py

创建app入口python文件 main.py

假设在项目文件夹下创建了图标文件夹 img, 并放入了 logo.png 作为窗体图标

import sys
import MainWindow
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtGui import QIcon

class AppWindow(QMainWindow,MainWindow.Ui_MainWindow):
    # 继承了 Ui_MainWindow类,使用其构造方法构造主窗口
    def __init__(self,parent=None):
        # super()方法返回了AppWindow类的父类对象,并且调用了父类的构造方法
        # __init__()方法是Python语言中的构造方法。
        super(AppWindow,self).__init__(parent)
        self.setupUi(self)
        # 窗口图标
        self.setWindowIcon(QIcon("img/logo.png"))


if __name__ == '__main__':
    # 定义程序的入口,通过创建QApplication对象来创建Qt窗口
    app = QApplication(sys.argv)
    appWindow = AppWindow()
    appWindow.show()
    # 应用进入主循环,事件处理开始执行
    # 主循环用于接收来自窗口触发的事件,并且转发他们到widget应用上处理
    # 如果调用exit()方法或主widget组件被销毁,主循环将退出
    # sys.exit()方法确保一个不留垃圾的退出。系统环境将会被通知应用是怎样被结束的。
    # exec_()方法有一个下划线。因为exec是Python保留关键字。因此,用exec_()来代替。
    sys.exit(app.exec_())

打包

安装 pyinstaller:

conda install pyinstaller 

编译:

pyinstaller  -F main.py 

可能的报错信息:

Exception:
            Cannot find existing PyQt5 plugin directories
            Paths checked: c:/qt/qt_1533082737779/_h_env/Library/plugins

创建错误提示中的目录c:/qt/qt_1533082737779/_h_env/Library/plugins,把类似 C:\Miniconda3\Lib\site-packages\pyqt5_tools\plugins下的pyqt5qmlplugin.dll拷贝到该目录下,重新打包, 在 dist目录下会生成 main.exe. 运行该程序可能的错误信息:

This application failed to start because it could not find or load the Qt platform plugin "windows"
in "".

Reinstalling the application may fix this problem.

拷贝类似 C:\Miniconda3\Library\plugins 下的 platforms 文件夹到可执行文件的文件夹下即可.

运行如下命令添加图标报错:

pyinstaller  -F main.py -i favicon.ico  --noconsole
struct.error: unpack requires a buffer of 16 bytes

参考 https://blog.csdn.net/u010000209/article/details/18762445 生成 ico,重新打包.

这样生成的app有图标了, 但是 img下的png图片并没有显示, 拷贝 img文件夹到 main.exe 同一目录即可.


发表评论

电子邮件地址不会被公开。 必填项已用*标注