【问题标题】:`tkinter._test()` buttons are invisible when using pipenv使用 pipenv 时,`tkinter._test()` 按钮不可见
【发布时间】:2019-11-07 15:49:26
【问题描述】:

我现在正在学习 Tkinter,并试图解决我的第一个问题,但发现 Google 并没有帮助。

我在 Mac OS X 10.15.1 (Catalina) 上运行此代码

我使用的是 Python 3.7,我的代码看起来像这样(每个 PEP8 标准有很多样板):

"""
Experiments in tkinter
"""


import tkinter as tk


def main():
    """
    Main entrypoint
    """

    tk._test()


if __name__ == "__main__":
    main()

这会向控制台输出以下警告:

弃用警告:Tk 的系统版本已弃用,可能会在未来的版本中删除。请不要依赖它。设置 TK_SILENCE_DEPRECATION=1 以禁止显示此警告。

它还显示一个带有完全空白按钮的窗口:

据我了解,这些按钮应该是“点击我”和“退出”。

当我点击顶部按钮时,它会像这样闪烁一秒钟:

之后按钮比之前宽:

我假设 Tk 版本错误可能与输出行为有关。但是我似乎找不到更新 Tk 的方法。我应该在这里做什么?

更新

在看到@ShayneLoyd 的回答后(建议我需要更新版本的 Python 和更新版本的 Tk),我开始四处寻找,发现 this post on the Apple Discussion Boards 这表明您可以使用自制软件安装链接的自制软件的 Python 版本自己安装的 Tk 版本。我试过这个但它失败了,所以我用谷歌搜索了这个问题并找到了this StackOverflow post,这似乎表明我可以安装 ActiveTcl 它会起作用的。

我从 ActiveState 安装了 ActiveTcl 并返回到我的项目。一开始我是这样运行的:

$> cd ~/Source/experiments/python/tkinter
$> ./test.py

这实际上有效!我可以阅读按钮,它的行为就像它应该的那样。然后我意识到我没有使用 pipenv,所以我做了一个快速测试:

$> pipenv run ./test.py

现在我又回到了失败状态。我更新了我的脚本以显示 Tcl 和 Tk 版本,果然当我使用 pipenv 时它正在加载 Tcl/Tk 8.5.9 但是当我不使用 pipenv 时它正在加载 8.6.9

那么我现在该如何修复 pipenv 呢?

【问题讨论】:

  • 我无法复制您的错误。我不明白你为什么需要tkinter._test() 来工作,因为你也从不使用它
  • 我想让tkinter._test() 工作,因为我是第一次使用tkinter,这就像“Hello, World”的tkinter 版本。如果这不起作用,我需要修复我的开发环境。至于“因为你从不使用它”,我不知道你在说什么——我清楚地使用它,就在我的代码中——而且我有几个屏幕截图的窗口就是结果。
  • 你在 OSX 上吗?我认为这是 OSX 上的错误。如果调整窗口大小,按钮上的文本可能会出现。
  • @BryanOakley 这是 OS X(特别是 10.15.1 Catalina)。虽然调整窗口大小并没有修复按钮。
  • 旧习惯很难改掉...现在实际上是 macOS,而不是 OS X ;)

标签: python tkinter tkinter-macos


【解决方案1】:

对于遇到相同问题且无法切换 Python 版本的任何人,您可以通过更改 MacOs 主题轻松绕过“按钮上不显示文本”的问题。系统偏好设置>常规>灯光模式。

您应该记住,您可能会遇到其他问题。

【讨论】:

    【解决方案2】:

    搞砸了几个小时后,我想通了!

    Pipfile 包含对 Python 3.7 版的引用

    因此,pipenv install 在我的机器上搜索安装的任何 3.7 版本的 Python。它找到的版本是 Homebrew 的,它静态链接了 Tk 8.5.9。

    通过将Pipfile 更新为需要 Python 3.8,我的机器开始拉取我的系统 Python,它使用动态链接的 Tk,我已成功更新到 8.6.9

    【讨论】:

    • 它就像一个魅力!!,只是为了清楚我所做的步骤是,1)从 python.org 安装 python 3.8.2,2)如你之前提到的那样安装 ActiveTcl,3 ) 使用“pipenv --python 3.8.2”创建 Pipenv 环境。如果您只使用“pipenv install”创建环境,它将使用旧的 tcl/tk 版本。
    猜你喜欢
    • 2020-03-19
    • 2016-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-28
    • 2017-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多