PyQt5 GUI - 使用 PyInstaller 制作的 exe 无法打开
PyQt5 GUI - exe made with PyInstaller doesn't open
我有一个 GUI,当我从 Anaconda Prompt 执行它时,它 运行 非常好。我得到以下 window 作为输出:
我已经使用 pip 安装了 pyinstaller,然后 运行 行
pyinstaller.exe --onefile [my file path]\mytest.py
使用我的实际文件路径而不是 [my file path]
。这将创建一个名为 'mytest.exe' 的文件。
然而,当我在上面 double-click 时,所发生的只是黑色 window 显示大约 5 秒钟,然后我瞬间收到此消息:
Python 脚本生成的 window 从未显示(与我直接执行 Python 脚本不同)。
代码如下:
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import sys
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
from matplotlib.figure import Figure
import matplotlib.pyplot as plt
import numpy as np
class LineBuilder:
def __init__(self, ax):
self.ax = ax
self.on = 1
self.lastline, = self.ax.plot([0],[0])
self.cid = ax.figure.canvas.mpl_connect('pick_event', self)
def __call__(self, event):
self.on *=-1
thisline = event.artist
xdata = thisline.get_xdata()
ydata = thisline.get_ydata()
ind = event.ind
print(xdata[ind])
print('modified',xdata[ind][0])
self.lastline.remove()
self.lastline=self.ax.axvline(x=xdata[ind][0])
self.ax.figure.canvas.draw()
class View(QGraphicsView):
def __init__(self):
super(View, self).__init__()
self.initScene(5)
def initScene(self,h):
self.scene = QGraphicsScene()
self.figure = plt.figure()
self.canvas = FigureCanvas(self.figure)
self.figure.subplots_adjust(left=0.03,right=1,bottom=.1,top=1,wspace=0, hspace=0)
ax = self.figure.add_subplot(111)
ax.set_xlim([0,1000])
data = np.random.rand(1000)
ax.plot(data, '-')
self.canvas.draw()
self.setScene(self.scene)
self.scene.addWidget(self.canvas)
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow,self).__init__()
self.setGeometry(150, 150, 700, 550)
self.view = View()
self.view.setGeometry(0,0,self.width()*2,500)
self.view.canvas.setGeometry(0,0,self.width()*2,500)
self.setCentralWidget(self.view)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()
我应该更改什么才能使 .exe 文件实际打开 window?这可能吗?最终目标是创建一个 运行s 的 GUI,最终用户无需安装 Anaconda 或任何与 Python.
相关的东西
要查看与 运行 可执行文件关联的错误消息,请从命令提示符 运行 .exe 文件:/path/to/app/dist/MyApp.exe
。这将使您更容易观察应用程序被捆绑后可能存在的任何错误(而不是试图抓取屏幕截图)。
您的应用程序无法启动,因为它无法导入 PyQt5 模块。您可以将 PyQt5(或您正在使用的每个 PyQt5 模块)添加到 .spec 文件中的 hiddenimports
列表中,该文件是在您首次将此应用程序与 PyInstaller 捆绑在一起并重新生成可执行文件后生成的。或者,您可以通过在 from PyQt5.QtWidgets import *
之前添加 import PyQt5
来明确地将 PyQt5 添加到您的 .py 文件中
我有一个 GUI,当我从 Anaconda Prompt 执行它时,它 运行 非常好。我得到以下 window 作为输出:
我已经使用 pip 安装了 pyinstaller,然后 运行 行
pyinstaller.exe --onefile [my file path]\mytest.py
使用我的实际文件路径而不是 [my file path]
。这将创建一个名为 'mytest.exe' 的文件。
然而,当我在上面 double-click 时,所发生的只是黑色 window 显示大约 5 秒钟,然后我瞬间收到此消息:
Python 脚本生成的 window 从未显示(与我直接执行 Python 脚本不同)。
代码如下:
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import sys
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
from matplotlib.figure import Figure
import matplotlib.pyplot as plt
import numpy as np
class LineBuilder:
def __init__(self, ax):
self.ax = ax
self.on = 1
self.lastline, = self.ax.plot([0],[0])
self.cid = ax.figure.canvas.mpl_connect('pick_event', self)
def __call__(self, event):
self.on *=-1
thisline = event.artist
xdata = thisline.get_xdata()
ydata = thisline.get_ydata()
ind = event.ind
print(xdata[ind])
print('modified',xdata[ind][0])
self.lastline.remove()
self.lastline=self.ax.axvline(x=xdata[ind][0])
self.ax.figure.canvas.draw()
class View(QGraphicsView):
def __init__(self):
super(View, self).__init__()
self.initScene(5)
def initScene(self,h):
self.scene = QGraphicsScene()
self.figure = plt.figure()
self.canvas = FigureCanvas(self.figure)
self.figure.subplots_adjust(left=0.03,right=1,bottom=.1,top=1,wspace=0, hspace=0)
ax = self.figure.add_subplot(111)
ax.set_xlim([0,1000])
data = np.random.rand(1000)
ax.plot(data, '-')
self.canvas.draw()
self.setScene(self.scene)
self.scene.addWidget(self.canvas)
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow,self).__init__()
self.setGeometry(150, 150, 700, 550)
self.view = View()
self.view.setGeometry(0,0,self.width()*2,500)
self.view.canvas.setGeometry(0,0,self.width()*2,500)
self.setCentralWidget(self.view)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()
我应该更改什么才能使 .exe 文件实际打开 window?这可能吗?最终目标是创建一个 运行s 的 GUI,最终用户无需安装 Anaconda 或任何与 Python.
相关的东西要查看与 运行 可执行文件关联的错误消息,请从命令提示符 运行 .exe 文件:/path/to/app/dist/MyApp.exe
。这将使您更容易观察应用程序被捆绑后可能存在的任何错误(而不是试图抓取屏幕截图)。
您的应用程序无法启动,因为它无法导入 PyQt5 模块。您可以将 PyQt5(或您正在使用的每个 PyQt5 模块)添加到 .spec 文件中的 hiddenimports
列表中,该文件是在您首次将此应用程序与 PyInstaller 捆绑在一起并重新生成可执行文件后生成的。或者,您可以通过在 from PyQt5.QtWidgets import *
import PyQt5
来明确地将 PyQt5 添加到您的 .py 文件中