【问题标题】:PyQt5 GUI - exe made with PyInstaller doesn't openPyQt5 GUI - 使用 PyInstaller 制作的 exe 无法打开
【发布时间】:2018-07-13 17:56:29
【问题描述】:

当我从 Anaconda Prompt 执行它时,我有一个运行良好的 GUI。我得到以下窗口作为输出:

我已经使用 pip 安装了 pyinstaller,然后运行该行

pyinstaller.exe --onefile [my file path]\mytest.py

用我的实际文件路径代替[my file path]。这将创建一个名为“mytest.exe”的文件。

但是,当我双击它时,所发生的只是一个黑色窗口显示了大约 5 秒钟,然后我在一瞬间收到了这条消息:

Python 脚本创建的窗口从不显示(与我直接执行 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 文件真正打开窗口?这甚至可能吗?最终目标是创建一个无需最终用户安装 Anaconda 或任何与 Python 相关的东西即可运行的 GUI。

【问题讨论】:

  • 黑屏会写一段时间,试试加到帖子里
  • 是的,你是对的!好的,我想我现在可以自己解决这个问题了。谢谢!

标签: python windows user-interface pyqt pyinstaller


【解决方案1】:

要查看与运行可执行文件相关的错误消息,请从命令提示符运行 .exe 文件:/path/to/app/dist/MyApp.exe。这将使您能够更轻松地观察捆绑应用后可能存在的任何错误(而不是尝试抓取屏幕截图)。

您的应用程序无法启动,因为它无法导入 PyQt5 模块。您可以将 PyQt5(或您正在使用的每个 PyQt5 模块)添加到 .spec 文件中的 hiddenimports 列表中,该文件是在您首次将此应用程序与 PyInstaller 捆绑并重新生成可执行文件后生成的。或者,您可以通过在 from PyQt5.QtWidgets import * 之前添加 import PyQt5 将 PyQt5 显式添加到您的 .py 文件中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-18
    • 1970-01-01
    • 1970-01-01
    • 2022-12-19
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多