python - 使用 PyQt5 制作应用程序后无法打开 .exe
问题描述
我的 Python 脚本有两个不同的问题:
我用 qt 设计器做了一个简单的设计,并将其转换为 .py 文件。在 spyder 中运行应用程序后,一切正常,但如果我关闭应用程序,我的控制台仍在运行,不会再次关闭。我必须重新启动控制台。我怎样才能避免这种情况?
我使用“pyinstaller”将 .py 文件转换为 .exe 文件。如果我双击该 exe,它将无法打开并且我没有错误消息。我使用了普通命令“pyinstaller – onefile -w test.py”。我使用 Python 3.9 和 Spyder 作为 IDE。
这是我的代码。代码直接从命令“pyuic5 -x test.ui -o test.py”生成。
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'test.ui'
#
# Created by: PyQt5 UI code generator 5.15.1
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(1280, 720)
MainWindow.setMinimumSize(QtCore.QSize(1280, 720))
MainWindow.setMaximumSize(QtCore.QSize(16777215, 16777215))
font = QtGui.QFont()
font.setPointSize(11)
font.setBold(False)
font.setWeight(50)
MainWindow.setFont(font)
MainWindow.setStyleSheet("background-color: rgb(255, 255, 255);")
MainWindow.setTabShape(QtWidgets.QTabWidget.Rounded)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setMinimumSize(QtCore.QSize(0, 0))
font = QtGui.QFont()
font.setBold(False)
font.setWeight(50)
self.centralwidget.setFont(font)
self.centralwidget.setStyleSheet("")
self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout.setContentsMargins(0, 0, 0, 0)
self.gridLayout.setSpacing(0)
self.gridLayout.setObjectName("gridLayout")
self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
self.tabWidget.setMinimumSize(QtCore.QSize(0, 0))
font = QtGui.QFont()
font.setPointSize(11)
font.setBold(False)
font.setWeight(50)
self.tabWidget.setFont(font)
self.tabWidget.setObjectName("tabWidget")
self.tab_ProcessParameters = QtWidgets.QWidget()
font = QtGui.QFont()
font.setBold(False)
font.setWeight(50)
self.tab_ProcessParameters.setFont(font)
self.tab_ProcessParameters.setObjectName("tab_ProcessParameters")
self.gridLayout_2 = QtWidgets.QGridLayout(self.tab_ProcessParameters)
self.gridLayout_2.setContentsMargins(0, 0, 0, 0)
self.gridLayout_2.setSpacing(0)
self.gridLayout_2.setObjectName("gridLayout_2")
self.frame_background = QtWidgets.QFrame(self.tab_ProcessParameters)
font = QtGui.QFont()
font.setPointSize(11)
font.setBold(False)
font.setWeight(50)
self.frame_background.setFont(font)
self.frame_background.setStyleSheet("background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgba(170, 170, 255, 255), stop:1 rgba(255, 255, 255, 255));\n"
"border-radius: 20px;")
self.frame_background.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame_background.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame_background.setObjectName("frame_background")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.frame_background)
self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_2.setSpacing(0)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.gridLayout_2.addWidget(self.frame_background, 0, 0, 1, 1)
self.tabWidget.addTab(self.tab_ProcessParameters, "")
self.tab_Visualization = QtWidgets.QWidget()
self.tab_Visualization.setObjectName("tab_Visualization")
self.gridLayout_3 = QtWidgets.QGridLayout(self.tab_Visualization)
self.gridLayout_3.setContentsMargins(0, 0, 0, 0)
self.gridLayout_3.setSpacing(0)
self.gridLayout_3.setObjectName("gridLayout_3")
self.frame_2_background = QtWidgets.QFrame(self.tab_Visualization)
self.frame_2_background.setStyleSheet("background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgba(170, 170, 255, 255), stop:1 rgba(255, 255, 255, 255));\n"
"border-radius: 20px;")
self.frame_2_background.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame_2_background.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame_2_background.setObjectName("frame_2_background")
self.gridLayout_3.addWidget(self.frame_2_background, 0, 0, 1, 1)
self.tabWidget.addTab(self.tab_Visualization, "")
self.gridLayout.addWidget(self.tabWidget, 0, 0, 1, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 1280, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
self.tabWidget.setCurrentIndex(0)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Test"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_ProcessParameters), _translate("MainWindow", "Process Parameters"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_Visualization), _translate("MainWindow", "Visualization"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
解决方案
您没有任何错误的原因是您使用了-w
. 这将隐藏错误消息。如果您想查看错误消息,请先输入不带 -w 的类型,然后查看错误是什么。并且不使用--onefile
它通常是有问题的。你是从构建文件夹打开应用程序吗?因为如果你是应用程序将无法工作。从 dist 文件夹打开应用程序。
使用此命令
pyinstaller filname.py
-(这将向您显示错误。(从终端运行它)),然后从 dist 文件夹中打开它。如果没有错误,那么您可以
pyinstaller filname.py -w
尝试隐藏终端。
推荐阅读
- python - 如何通过索引更改基于另一列的一列值
- docker-compose - 带有 traefik 和内部网络的 Docker-compose 服务
- excel - 使用 Excel 中的指定索引对矩阵进行洗牌?
- r - 交叉验证结构方程建模
- python - 我无法使用 for 循环在列表中分配整数的总和
- node.js - React 如何与 Github 页面一起工作,而不是 github 页面仅适用于静态网站?
- discord.js - discord.js 为@everyone 锁定一个频道
- spring-boot - SpringBoot Lambda 部署问题 - EmbeddedServletContainer - java.lang.NoClassDefFoundError
- javafx - JavaFX 警报信息不再显示 ContentText 不知道为什么
- python - 以数字方式评估“sns.kdeplot”在图中的密度?