0

我有什么疑问

我为两个不同的代码得到了两个不同的输出,我相信它们在做同样的事情。我在下面描述了这两种情况。

情况1

我做了什么

我定义了以下__init__

def __init__(self):
        self.window = Tk()  ##The main window instance
        self.window.title("STOPWATCH")

        ##Some fonts for use inside
        self.small = Font(family='Helvetica',size=11)
        self.medium = Font(family='Helvetica',size=15)
        self.big = Font(family='Helvetica',size=24)

然后self.big在类的函数中使用字体,如下所示:

def quitwin(self,event=None):

        self.window.destroy()

        self.window = Tk()
        self.window.title('License and Credits')
        
        self.frame =Frame(self.window)
        self.frame.pack()

        r = Frame(self.frame)
        r.pack()

        m = Message(r,text="Licensed under WTFPL license\
                          ",font=self.big)

        m.pack()

        b = Button(r,text='QUIT',fg='red',bg='black',command=self.window.destroy,font=self.big)
        b.pack(side='bottom')

输出:

案例2

我更改了代码以便self.big在函数内部定义变量quitwin

代码:

def quitwin(self,event=None):

        self.window.destroy()

        self.window = Tk()
        self.window.title('License and Credits')
        
        self.frame =Frame(self.window)
        self.frame.pack()

        r = Frame(self.frame)
        r.pack()

        self.big = Font(family='Helvetica',size=24)

        m = Message(r,text="Licensed under WTFPL license\
                              ",font=self.big)

        m.pack()

        b = Button(r,text='QUIT',fg='red',bg='black',command=self.window.destroy,font=self.big)
        b.pack(side='bottom')

输出

这种字体比我们之前看到的字体大得多。

怀疑

这让我想知道其中哪一个是真正的 24 号字体。虽然我确实想要第二个输出,但为什么我没有得到与我第一次使用的代码相同的输出?

帮我解决这个疑问。

4

1 回答 1

2

我猜这与您创建多个实例的事实有关Tk,这不是 Tkinter 的设计用途。可能是在第一种情况下,字体与原始Tk对象相关联,当它被破坏时,字体被破坏或被垃圾收集。在第二种情况下,字体与对话框绑定到相同的实例,Tk因此它是“实际大小 24 字体”。

于 2013-03-21T11:23:38.553 回答