【问题标题】:pyinstaller makes an empty black window of my tkinter guipyinstaller 为我的 tkinter gui 制作了一个空白的黑色窗口
【发布时间】:2021-07-23 18:04:58
【问题描述】:

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

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()


产生一个像这样的窗口:

在运行pyinstaller --onefile --noconsole minimal.py(代码文件的名称是minimal.py)后,我在dist 文件夹中获得了一个捆绑文件(应用程序),它在运行时给了我以下信息:

菜单正常工作(这就是我包含它的原因;它不是真的很小,但它表明某些东西正在工作......),但窗口中的任何小部件都不可见(更不用说黑色窗口的颜色,我想这与问题有关)。

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

我该怎么办? 谢谢

【问题讨论】:

  • 如果你不打算使用它,为什么要从 tk.Frame 继承?
  • @TheLizzard 说得好。我刚刚从另一个程序中提取了部分代码来制作一个小程序,如果没有那一点我也可以做到。无论如何,我刚刚尝试过不使用它,并且正如预期的那样,问题仍然存在......
  • 我在 Windows 10 上尝试过,它可以工作。 onefile .exe 看起来就像我直接运行它一样。会不会是 Mac 的东西?
  • @RamtinNouri 是的,可能是这样。因此macos 标签。也许有人有同样的问题并且知道解决方案。无论如何,感谢您的反馈!
  • this 似乎是同一个问题。也许this也有关系

标签: python macos tkinter pyinstaller


【解决方案1】:

当我通过 Jupyter(分别为 Anaconda)开始使用 Python,但也通过自制软件安装了 Python 时,我遇到了 OP 描述的类似问题。这意味着 tkinter 窗口通过 python 解释器显示很好,但是一旦我使用 pyinstaller 创建了一个可执行文件,一些窗口的颜色就会错误(例如,所有文本都是白色的)。

我发现了这个话题: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 列表。 Infact 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 安装”丢失的包之后,在使用 pyinstaller 创建可执行文件后,窗口开始显示正常。

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

【讨论】:

  • 感谢您的回答。现在,我没有时间遵循所有这些程序,并且可能会遇到冲突的安装。不过,我感谢您的努力,因为它们看起来很合理,而且这是这么长时间以来的第一个答案。答案可能是正确的,或者我相信,所以我赞成它。我将延迟可能接受答案,直到我找到时间跟进。最良好的祝愿。
  • 对我之前的评论的进一步更新:“conda activate pyinstaller=3.6”实际上似乎切换到了另一个 python 环境,这是我以前不太了解的,然后是标准的“base”一个或任何你的默认配置是。重新启动后,我注意到我在基本的 py 环境中,没有任何工作了。激活我的“pyinstaller = 3.6”环境(顺便说一句。这是一个愚蠢的环境名称)后,我能够再次运行 pyinstaller,创建可执行文件,一切都很好。
【解决方案2】:

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

【讨论】:

  • 感谢您的回答。我会尽快检查这个,我希望。我一直忙于其他事情。作为对您的第一个回答的礼貌,我会赞成您的回答。然后我会在你的答案和上一个答案中看看哪一个最适合我。但前一个优先……祝你好运!
【解决方案3】:

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

pip uninstall pyinstaller    
pip install -Iv pyinstaller==4.2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 2015-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    相关资源
    最近更新 更多