pyinstaller 使我的 tkinter gui 变成空的黑色 window

pyinstaller makes an empty black window of my tkinter gui

举一个非常简单的例子,考虑下面的代码

import tkinter as tk
from tkinter import messagebox


class App:
    def __init__(self, parent):

        # some widgets
        label = tk.Label(parent, text="Label")
        button = tk.Button(parent, text="button")
        label.pack()
        button.pack()

        # and a menu
        menu = tk.Menu(parent)
        parent.config(menu=menu)

        Menu1 = tk.Menu(menu)
        menu.add_cascade(label="Menu", menu=Menu1)
        for x in 'ABCD':
            Menu1.add_command(label="Menu " + x, 
                              command=lambda y=x: messagebox.showinfo(message=y))


if __name__ == '__main__':
    root = tk.Tk()
    root.geometry("250x100+100+50")
    root.title("My humble GUI")
    App(root)
    root.mainloop()


产生一个 window 像这样:

运行宁pyinstaller --onefile --noconsole minimal.py后(代码文件的名称是minimal.py),我在dist文件夹中得到一个bundle文件(app)其中,当 运行 时,会给我以下信息:

菜单正常工作(这就是我加入它的原因;它不是真正的最小,但它表明某些东西正在工作...),但是 none [=34] 中的小部件=] 是可见的(更不用说 window 的黑色,我想这与问题有关)。

也有这样的情况,当我双击打开应用程序图标时,它会尝试打开它(该图标会在停靠栏中显示一秒钟),然后两秒钟后它会完全打开,或多或少;这似乎也不正常。

我该怎么办? 谢谢

因为我已经通过 Jupyter(分别是 Anaconda)开始使用 Python,而且还通过自制软件安装了 python,所以我 运行 遇到了 OP 描述的类似问题。意思是 tkinter windows 通过 python 解释器显示正常,但是一旦我用 pyinstaller 创建了一个可执行文件,一些 windows 的颜色就错误了(例如所有文本都是白色的)。

我找到了这个话题:Using pyinstaller with anaconda environment 谈论它所以去了:

conda create -n pyinstaller=3.6 -c defaults -c conda-forge
conda activate pyinstaller=3.6

但这并没有真正使 pyinstaller 工作,所以我进一步查看并卸载了我通过 pip 安装并通过 conda 安装的 pyinstaller

pip uninstall pyinstaller
conda install -c conda-forge pyinstaller

然后我尝试 运行 东西,但我遇到了一些外部包的问题。所以我检查了不再显示包的 pip 列表。事实上 pip 版本显示如下:

python3 -m pip --version                                                                                                                                       
pip 21.1.2 from /opt/anaconda3/envs/pyinstaller=3.6/lib/python3.9/site-packages/pip (python 3.9)

不理想:-D 但是在“pip 安装”丢失的包之后,windows 在使用 pyinstaller 创建可执行文件后开始显示得很好。

我想如果你 运行 遇到这个问题,你可能只是遇到了不同 python 版本的冲突?

我也运行遇到过这个问题,我用最新开发版的pyinstaller解决了。首先,我使用 pip uninstall pyinstaller 卸载了 pyinstaller,然后使用以下命令获取最新版本:pip install https://github.com/pyinstaller/pyinstaller/archive/develop.zip

这个答案可能有点晚了,但对于其他有这个问题的人来说:只需尝试不同版本的 pyinstaller。我不认为总能弄清楚后台发生了哪些奇怪的事情。对我来说,4.2 版有效。将其输入您的终端:

pip uninstall pyinstaller    
pip install -Iv pyinstaller==4.2

我确实遇到了这个问题。我将 python 从 3.8 更新到 3.10,它为我解决了这个问题。不需要搞乱 pyinstaller。

如果您使用的是 macOS 12 Monterey,它很可能就是罪魁祸首。从 Python 的网站查看更多内容,以及要下载的文件 3.10 here.