在tkinter中设置字体会返回错误 我正在为我的第一个TKTter应用程序改写代码,其中我避免使用类。这是一条死胡同,我最终不得不学习python类编程。我遇到了一个非常奇怪的错误,我不知道如何修复它。我试过了,但没有效果。我要做的是在我的应用程序中为两个标签指定一种字体。它在我以前的无类代码中运行良好,但现在它给了我一个错误: (...) line 56, in create_widgets TimeFont = font.Font(family='Palatino', size=88, weight='bold') File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/tkinter/font.py", line 71, in __init__ root = tkinter._default_root AttributeError: 'module' object has no attribute '_default_root'

在tkinter中设置字体会返回错误 我正在为我的第一个TKTter应用程序改写代码,其中我避免使用类。这是一条死胡同,我最终不得不学习python类编程。我遇到了一个非常奇怪的错误,我不知道如何修复它。我试过了,但没有效果。我要做的是在我的应用程序中为两个标签指定一种字体。它在我以前的无类代码中运行良好,但现在它给了我一个错误: (...) line 56, in create_widgets TimeFont = font.Font(family='Palatino', size=88, weight='bold') File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/tkinter/font.py", line 71, in __init__ root = tkinter._default_root AttributeError: 'module' object has no attribute '_default_root',python,tkinter,tk,Python,Tkinter,Tk,下面是我用来创建小部件的函数: def create_widgets(self): self.set_timer = ttk.Entry(self, textvariable=self.timer) self.start = ttk.Button(self, text='Start', command=self.start) TimeFont = font.Font(family='Palatino', size=88, weight='bold') #the infam

下面是我用来创建小部件的函数:

def create_widgets(self):
    self.set_timer = ttk.Entry(self, textvariable=self.timer)
    self.start = ttk.Button(self, text='Start', command=self.start)
    TimeFont = font.Font(family='Palatino', size=88, weight='bold') #the infamous line 56
    self.display1 = ttk.Label(self, textvariable=self.player1, font=TimeFont)
    self.display2 = ttk.Label(self, textvariable=self.player2, font=TimeFont)
如果相关的话,还有一些代码“来自上面”:

from decimal import *
from tkinter import *
from tkinter import ttk
from tkinter import font
import time, _thread, subprocess

class Chclock(ttk.Frame):

    @classmethod
    def main(cls):
        NoDefaultRoot()
        root = Tk()
        app = cls(root)
        app.grid(sticky=NSEW)
        root.grid_columnconfigure(0, weight=1)
        root.grid_rowconfigure(0, weight=1)
        root.resizable(True, False)
        root.mainloop()

    def __init__(self, root):
        super().__init__(root)
        root.bind('q', self.player1move)
        root.bind('p', self.player2move)
        root.bind('b', self.pause)
        root.bind('a', self.undo)
        root.bind('l', self.undo)
        self.create_variables()
        self.create_widgets() #here I call the function containing the error
        self.grid_widgets()
        self.grid_columnconfigure(0, weight=1)
这可能有点傻,但我就是不明白是什么导致了这个问题。它过去工作得很好


谢谢

我已经找到了。既然有人对这个问题投了赞成票,我就发布解决方案:我已经删除了
NoDefaultRoot()
行。我不知道为什么它不起作用,为什么它现在起作用,但它确实。。。有人能解释一下评论中发生了什么吗?我对这东西真的很陌生,我删除的那行带有一个模板


对不起,我弄得一团糟。

我已经设法找到了。既然有人对这个问题投了赞成票,我就发布解决方案:我已经删除了
NoDefaultRoot()
行。我不知道为什么它不起作用,为什么它现在起作用,但它确实。。。有人能解释一下评论中发生了什么吗?我对这东西真的很陌生,我删除的那行带有一个模板

如果我弄乱了,很抱歉。

也许代码“NoDefaultRoot()”和错误消息“object has no attribute'\u default\u root'”可能相互有关系?注意到相关性了吗?调试的第一条规则是假设错误消息告诉您一些有用的信息

问题是您创建字体对象时没有告诉该对象它属于哪个窗口。因为您没有告诉它,所以它选择使用默认的根窗口。但是,您没有明确请求默认的根窗口

这是构建Tkinter程序的一种有点奇怪的方式。我建议阅读问题中的答案

也许代码“NoDefaultRoot()”和错误消息“objecthasnoattattribute'\u default\u root'”可能相互关联?注意到相关性了吗?调试的第一条规则是假设错误消息告诉您一些有用的信息

问题是您创建字体对象时没有告诉该对象它属于哪个窗口。因为您没有告诉它,所以它选择使用默认的根窗口。但是,您没有明确请求默认的根窗口


这是构建Tkinter程序的一种有点奇怪的方式。我建议您阅读问题中的答案

您的缩进在代码中弄乱了。啊,对不起,这是因为此网站正在使用的标记。您的缩进在代码中弄乱了。啊,对不起,这是因为此网站正在使用的标记。啊,感谢您的链接!可能会派上用场。是的,我注意到了相关性,这就是为什么我在没有
NoDefaultRoot()
行的情况下尝试代码的原因。它到底是干什么的?好的经验法则:如果你不知道一行代码是干什么的,就不要使用它。哈哈,这让我想起了一个古老的笑话:“我的代码不工作,我不知道为什么。我的代码工作,我仍然不知道为什么”。再次感谢!谢谢你的链接!可能会派上用场。是的,我注意到了相关性,这就是为什么我在没有
NoDefaultRoot()
行的情况下尝试代码的原因。它到底是干什么的?好的经验法则:如果你不知道一行代码是干什么的,就不要使用它。哈哈,这让我想起了一个古老的笑话:“我的代码不工作,我不知道为什么。我的代码工作,我仍然不知道为什么”。再次感谢