0

私は3つの異なる時間にラベルの幅を読んでいますが、そのうちの1つだけが正しい出力を生成しています..コード:

from tkinter import *

def getwidth(string):
    print(string+str(lbl1.winfo_width()))

root = Tk()

lbl1 = Checkbutton(root, text="test text")
lbl1.grid(row=0,rowspan=2)


print("first "+str(lbl1.winfo_width()))
getwidth("second ")

btn = Button(root, text="GO", command=lambda x="third ": getwidth(x))
btn.grid(row=2)

root.mainloop()

ボタン コマンドに頼らずに、最初の 2 つの出力で正しい幅 (69) を読み取るにはどうすればよいですか? ありがとう

現在の出力は次のとおりです。

first 1
second 1
third 69
4

1 に答える 1

2

残念ながら、できません。最初の 2 回は、ウィンドウが読み込まれる前に行われます (これにより1、ラベルがまだ描画されていないため、既定値の が返されます)。3 回目は、ウィンドウが読み込まれた (ラベルが描画された)に行われるため、正しい数値が返されます。

ウィンドウを呼び出しroot.mainloopてロードするまで、ウィジェットは画面に配置されないことに注意してください。確かに、それらは舞台裏に存在します (そうでなければ aNameErrorがスローされます) が、それらは画面上になく、まだスペースを占有していません。したがって、それらがどのくらいのスペースを占めているかを確認しようとすると、デフォルトの の数が得られます1

于 2013-08-27T14:23:08.887 に答える