运行转换后的 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.exemain.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 程序后出现病毒警告