如果在函数内部定义了字体并且在__init__内部,则输出会发生变化

时间:2013-03-21 10:19:17

标签: python tkinter

我怀疑是什么

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

案例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')

输出:

http://i48.tinypic.com/k1p4dv.png

案例2

我更改了代码,以便在函数self.big内定义quitwin varioable,然后:

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

输出

http://i46.tinypic.com/10fcr6a.png

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

这让我想知道这些是真正的24尺寸字体。虽然我确实想要第二个输出,但为什么我没有使用我先用过的代码获得相同的输出?

帮我解决这个疑问。

1 个答案:

答案 0 :(得分:2)

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