2017-12-29 147 views
1

ウィンドウのサイズが変更されたときはいつでも、ウィジェットの寸法を取得することに関して、以前の質問hereが尋ねられました。Tkinter 3.xでキャンバス/ウィジェットのサイズを取得する

リンクされた質問と回答は完全に機能しますが、私のアカウントは全く新しいので悲しいことに、私はまだコメントを投稿できません!

私の質問は、

event.width 

event.widget.winfo_width() 

私の完全なコードは以下の通りです:間の効果的な違いは何ですか。

from tkinter import * 

root = Tk() 

display = Canvas(root, width=300, height=300, background="bisque") 
display.pack(fill="both", expand=True) 

display.create_text(10, 15, anchor="w", tags=["events"]) 
display.create_text(10, 30, anchor="w", tags=["winfos"]) 


def show_dims(event): 
    display.itemconfigure("events", text="event.width: {0}, event.height: {1}".format(event.width, event.height)) 
    display.itemconfigure("winfos", text="winfo_width: {0}, winfo_height: {1}".format(event.widget.winfo_width(), event.widget.winfo_height())) 

display.bind("<Configure>", show_dims) 

root.mainloop() 

私の知る限り、コードは完全に機能します。ウィンドウサイズが変更されると、 "< Configure>"イベントはshow_dims関数を呼び出します。この関数は、ウィンドウの現在の幅と高さをピクセル単位で表示するために表示されるテキストを更新します。

ウィンドウディメンションを同じにする方法は2つありますか?何らかの理由で1つ良いですか?

おかげで、eventのドキュメントを見てみると

答えて

1

width - width of the exposed window (Configure, Expose)

は、だからあなたの特定のケースでは、event.widthevent.widget.winfo_width()は常にまったく同じです。

しかし、異なるイベントで:

from tkinter import * 

root = Tk() 
d = Label(root, width=50, height=50, text="HI") 
d.pack(expand=True) 

def check(event): 
    print(event.width) 
    print(event.widget.winfo_width()) 

d.bind("<1>", check) 
root.mainloop() 

このコードが表示されます。イベントはConfigureまたはExposeでない限り

?? 
456 

のでwinfoの方法を使用する必要があります。おそらくクライアントにとってはevent.widthが読みやすくなります。

+0

こんにちはRassar、返信いただきありがとうございます。 だから私が正しくあなたを理解している場合: 拘束されるものではイベントが 'Configure'またはONLY' Expose'が、その後のいずれかを使用することができます(ただし、 'event.width'がより読みやすい)されている場合は イベントは他に何かある場合、 'winfo'を使わなければなりません。 私は、代替的で普遍的に利用可能な方法と異なるものを提供しない特定の場合にのみ使用できる方法を持つことは少し冗長であると言わざるを得ない。私はこれを理解しようとするためにさらにドキュメントを読むでしょう。 ありがとうございました Will –

+1

@WilliamPulford:_ "特定のケースでしか使用できないメソッドがあると少し冗長に見えます" _ - 'event.width'はメソッドではなく、属性ですオブジェクト上に –

関連する問題