0

私の疑問は何ですか

同じことをしていると思われる2つの異なるコードに対して2つの異なる出力を得ました。以下の両方のケースについて説明します。

ケース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 サイズのフォントなのか疑問に思いました。2 番目の出力が必要ですが、最初に使用したコードで同じ出力が得られないのはなぜですか??

この疑問を解決してください。

4

1 に答える 1

2

の複数のインスタンスを作成しているという事実に関連していると思いますがTk、これは Tkinter が使用されるように設計されている方法ではありません。最初のケースでは、フォントが元のオブジェクトに関連付けられてTkおり、それが破棄されると、フォントが破損したり、ガベージ コレクションが発生したりする可能性があります。2 番目のケースでは、フォントはダイアログと同じインスタンスに関連付けられているTkため、「実際のサイズの 24 フォント」になります。

于 2013-03-21T11:23:38.553 に答える