【问题标题】:Button text of tkinter does not work in mojavetkinter 的按钮文本在莫哈韦沙漠中不起作用
【发布时间】:2018-09-27 04:21:14
【问题描述】:

这是一个非常简单的程序。

import tkinter
tkinter.Button(None, text='button').pack()
tkinter.mainloop()

我希望这个程序会显示如下图。

但实际上显示的是下图。

当它在 GUI 上调整大小时,它似乎运行良好。

High Sierra 没有出现这个问题。

我的环境如下:

  • macOS Mojave 10.14
  • Python 3.7.0

你能给我建议吗?

我在here 上发现了同样的问题。

【问题讨论】:

  • 我无法重现该问题,但是,您可以调整按钮的大小(不是很实用),或者尝试像这样为其添加宽度:tkinter.Button(None, text='button', width=8).pack() - 值大于文本中的字母数。
  • 对不起。我在路上发了一条信息。我添加了'width = 8',但它不起作用。像往常一样,按钮的文本显示为空白。
  • @ReblochonMasque 在我的环境中 100% 重现了这个问题。我必须提供更多信息吗?请指教:)谢谢您的合作。

标签: python python-3.x tkinter macos-mojave


【解决方案1】:

将外观更改为浅色模式为我解决了这个问题。

要更改外观,请转到设置 -> 常规 -> 外观 -> 灯光模式。

【讨论】:

  • 这是我针对 OSX 10.14.5、tkinter 8.5、python 3.7.3 的解决方案
  • 这也可以解释我在 10.14.5 上使用 3.7.3 的问题,因为 8.6.8 也破坏了这种支持,直到 8.6.9 才修复。看起来 8.6.9 也被添加到 Python 2.7.2 测试版本中,但后来由于回归问题而被删除。手动更新或降级也可以解决此问题。见这里:stackoverflow.com/questions/55483507/…
【解决方案2】:

我猜 Tk 中有一个错误。 我在 MacOS 10.14.3 如果您最大化和最小化 tkinter 窗口,则会出现按钮上的文本, 另一个对我有用的解决方案是

from tkinter import *
from tkinter import ttk

button1 = ttk.Button(*your args here*)

【讨论】:

  • tkinter 中没有模块 tkk。至少在 Python 3.7 中
  • @manu 有,它是 from tkinter import ttk 或在 python 2.7 中它是 import ttk 作为一个单独的包。
  • 这是我刚才在终端中看到的。 Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 26 2018, 23:26:24) [Clang 6.0 (clang-600.0.57)] on darwin 输入“帮助”、“版权”、“信用”或“许可证”了解更多信息。 >>> from tkinter import tkk Traceback(最近一次调用最后一次):文件“”,第 1 行,在 ImportError: cannot import name 'tkk' from 'tkinter'
  • 使用 Mojava 10.14.3 和 Python 3 3.7.1。我遇到了同样的错误,将按钮从 tk 切换到 tkk 就成功了。
  • @JustABit 对不起 MyBad 我会做出改变
【解决方案3】:

我遇到了同样的错误,为了修复它,我必须将按钮更改为 ttk.Button 并设置样式。例如,添加以下内容进行导入:

try: from tkinter import ttk # python 3
except: import ttk # python 2.7

然后在root init之后:

    style = ttk.Style()
    style.map("C.TButton",
              foreground=[('pressed', 'red'), ('active', 'blue')],
              background=[('pressed', '!disabled', 'black'),
                          ('active', 'white')]
              )

那么当你实例化 Button 时:

self.button = ttk.Button(self, text="my cooool button",
                                 command=self.load_something_cool, style="C.TButton")

它完美地确保了文本的正确显示。在我添加 ttk 位之前,我在莫哈韦和你在同一条船上。

【讨论】:

    【解决方案4】:

    我也遇到过这个问题,升级到 Mojave 和使用 Homebrew 的 python3 后,在我的 Mac 上 100% 可重现。

    切换到 Python.org 的 Python 3.7.1 包下载完全解决了我的问题。

    【讨论】:

    • 我已使用 pyenv 1.2.7-11-g835707da 更新到 python 3.7.1。但是,它还没有改善。在这个版本中,“按钮”标签即使调整大小也不会出现。但它已启用暗模式哈哈。
    • 同样,conda update -n root conda 然后conda update --all 为我工作(我最终还需要一个单独的conda update spyder 来让 Spyder 工作)。
    • 这里不工作,Mojave (18B75),brew upgrade python,现在python3 --version 返回3.7.1,但仍然无法修复 tkinter... :(
    【解决方案5】:

    这是一个为我解决问题的示例(至少在 Python/Tkinter 的东西被清理之前):

    import tkinter
    root = tkinter.Tk()
    tkinter.Button(root, text='button').pack()
    def fix():
        a = root.winfo_geometry().split('+')[0]
        b = a.split('x')
        w = int(b[0])
        h = int(b[1])
        root.geometry('%dx%d' % (w+1,h+1))
    root.update()
    root.after(0, fix)
    tkinter.mainloop()
    

    这是在 macOS 版本 10.14.2 (18C54) 和 Python 3.7.2(通过 Home-brew 加载)上测试的。

    【讨论】:

    • 这是该问题的正确工作解决方案,优雅而简单,应标记为 OP 问题的解决方案。
    • 我可能应该提到(以防它不明显),这个解决方案通过在主循环开始后不久使根窗口宽和高一个像素来工作。这背后的想法是在启动应用程序后调整窗口大小会修复输出,因此此代码只是通过代码模仿该行为。
    【解决方案6】:

    我在使用 PyInstaller 编写并冻结的应用程序时遇到了这个问题。它在没有 Mojave 的 PC 和我的 Mac 笔记本电脑上仍然可以正常工作,但在我最近更新到 Mojave 的桌面 Mac 上,它有没有文本的按钮,并且某些按钮在单击之前完全不可见。

    我在 Reddit 上找到了一个简单的解决方案:只需稍微调整窗口大小,界面元素就会出现!

    Link to Reddit thread

    【讨论】:

      【解决方案7】:

      我只有在使用 py2app 冻结时才会遇到这个问题。在为每个框架或顶层创建所有元素之后,我的解决方法是在小部件上使用 .update_idletasks()。

      【讨论】:

      • 我不使用 py2app。我只能使用'python hoge.py'来重现。
      【解决方案8】:

      在使用 Pyinstaller 打包我的程序后,按钮文本和下拉文本也出现了同样的问题。我认为它是一个 Tk/Tcl 错误。我可以通过输入全屏(灰色条大声笑中的绿色按钮)然后再次最小化到正常大小(灰色条大声笑中的黄色按钮)来修复它。

      【讨论】:

      • 这是我找到的解决问题的最佳答案
      【解决方案9】:

      我为 Mojave 中的 py2app Tkinter 窗口找到的唯一可行修复是将我的 python 版本更新到 2.7.15(64 位而不是 64/32 位)。在此之前的版本都在 py2app 冻结的二进制文件中显示空文本。直接运行python代码显示正常。在每个窗口的主循环之前插入 .update_idletasks() 对我来说并没有什么不同(在两台 Mojave 机器上测试过)。

      【讨论】:

        【解决方案10】:

        我遇到了同样的问题,但现在我已经解决了。

        如果您使用的是 Anaconda,请在终端中输入以下命令,您应该可以开始了:

        1. conda update python
        2. conda update anaconda

        【讨论】:

          【解决方案11】:

          对我来说,它可以将 python 从 3.5.4 更新到 3.5.6。

          【讨论】:

          • 请添加更多细节,或者只是评论。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-06-26
          • 1970-01-01
          • 1970-01-01
          • 2014-05-06
          相关资源
          最近更新 更多