运行转换后的 py 到 exe 文件显示控制台而不是设计的 GUI

Posted

技术标签:

【中文标题】运行转换后的 py 到 exe 文件显示控制台而不是设计的 GUI【英文标题】:Running the converted py to exe file shows a console and not the designed GUI 【发布时间】:2018-03-09 14:17:52 【问题描述】:

我想创建一个 GUI EXE 文件 我正在使用 python 3.6 和 PyQt5 创建一个 GUI,运行 .py 文件后,我得到了我所从事的设计。 但是,当我使用 Cx_Freeze 或 pyinstaller 将 .py 文件转换为 exe 时,然后我运行 EXE 文件,GUI 不显示,而是显示控制台。

import sys 
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.uic import loadUi

completed = 0
accumulate = 0
class Main(QMainWindow):
    def __init__(self):
        super(Main, self).__init__()
        loadUi('progress.ui',self)
        self.setWindowTitle('Greeting')
        self.progressBar.setValue(0)
        self.increase.clicked.connect(self.increase_by10)
        self.reset.clicked.connect(self.resetprogress)

    @pyqtSlot()
    def increase_by10(self):
        global accumulate
        accumulate += 10
        if accumulate <= 100:
                self.progressBar.setValue(accumulate)

    @pyqtSlot()
    def resetprogress(self):
        global accumulate
        accumulate = 0
        self.progressBar.setValue(accumulate)
        
      
              
app = QApplication(sys.argv)
widget = Main()
widget.show()
sys.exit(app.exec_())

运行 .py 文件 运行从 .py 转换而来的 .exe

【问题讨论】:

【参考方案1】:
    ...\Python\Scripts\pyuic5.exe progress.ui -o progress.py -x

    + (progress.py) # - (progress.ui)

    pyinstaller --onefile --noconsole main.py main.exe

main.py

import sys 
from PyQt5.QtCore import pyqtSlot, QThread       #++++++++ QThread
from PyQt5.QtWidgets import QApplication, QMainWindow
#from PyQt5.uic import loadUi                     #--------

import progress                                  #++++++++

completed = 0
accumulate = 0
class Main(QMainWindow, progress.Ui_MainWindow): #++++++++ progress.Ui_MainWindow
    def __init__(self):
        super(Main, self).__init__()

        self.setupUi(self)                       #+++++++++
        #loadUi('progress.ui',self)              #---------

        self.setWindowTitle('Greeting')
        self.progressBar.setValue(0)
        self.increase.clicked.connect(self.increase_by10)
        self.reset.clicked.connect(self.resetprogress)

    @pyqtSlot()
    def increase_by10(self):
        global accumulate
        #accumulate += 10                              #-----
        while accumulate <= 100:                       #+++++ 
            self.progressBar.setValue(accumulate)
            QThread.msleep(1000)                       #+++++
            accumulate += 10                           #+++++


    @pyqtSlot()
    def resetprogress(self):
        global accumulate
        accumulate = 0
        self.progressBar.setValue(accumulate)

app = QApplication(sys.argv)
widget = Main()
widget.show()
sys.exit(app.exec_())

【讨论】:

以上是关于运行转换后的 py 到 exe 文件显示控制台而不是设计的 GUI的主要内容,如果未能解决你的问题,请参考以下文章

尝试运行转换为 .exe 文件的 .py 程序后出现病毒警告

vscode代码保存后的exe文件是啥

使用 PyQt5 制作应用程序后无法打开 .exe

python使用pyinstaller将程序打包为exe文件

python2文件转换为exe可执行文件

Python - 将文件拖入 .exe 以运行脚本