在畫布上調整標籤文本有一個按鈕,啓動一個Toplevel爲「新條目」。它有一個提交按鈕,一個取消按鈕,一個OptionMenu和一個標籤。目標是從OptionMenu中選擇的值更改標籤文本。我沒有添加畫布的代碼。Tkinter的:基於改變OptionMenu
def Test(value):
p = value
print(p) # a test
E2.config(text=str(p))
def Vullen_Toplevel_Aankoop_EUR(i):
top = Toplevel()
top.geometry("%dx%d%+d%+d" % (600, 800, 250, 125))
BSubmit = Button(top, text="Submit", fg='green')
BSubmit.grid(row=1, column=0, sticky="ew", columnspan=1, padx=20)
BCancel = Button(top, text="Cancel", fg='red', command=top.destroy)
BCancel.grid(row=10, column=0, sticky="ew", columnspan=1, padx=20)
p = None
E2 = None
E1_opt = ["A","B","C"]
E1_var = StringVar(top)
E1_var.set(E1_opt[0])
W1 = OptionMenu(top, E1_var, *E1_opt, command=Test)
W1.grid(row=2, column=1, sticky="ew")
E2 = Label(top, text='test')
E2.grid(row=4, column=2, sticky="ew")
變量p的默認值是'空'。 OptionMenu觸發命令= Test,它在控制檯上輸出p的新值。到現在爲止還挺好。
我試圖與更新標籤E2:E2.config(試驗= STR(P))。不幸的是,錯誤消息:
NameError: name 'E2' is not defined
雖然不添加到代碼在這裏,我試過如下:
- 定義E2標籤爲「空」,或者作爲標籤的正下方,我定義的「P」 ,錯誤是一樣的。
- 定義在高清測試(值),但這裏E2標籤 - 當然 - 錯誤是頂層()頂部沒有定義。
- 而不是命令=測試我試着command = lambda:Test(top,E1_var.get())並將Test方法更改爲def Test(top,value),但錯誤是:TypeError:()取0位置論點,但1給出了
我有種想法。你有分享見解嗎?謝謝。
'E2'是隻存在於一個函數的局部變量。在所有功能之外定義它 - 即。 'E2 = None',然後你會有全局變量。然後你可以在'Vullen_Toplevel_Aankoop_EUR'裏面使用'global E2'來通知函數使用這個變量(因爲你使用'='賦值)。在'Test'中,你不必使用'global E2',因爲你不使用'=',它會自動使用外部'E2'。 – furas
@furas說實話,我不明白,如果證實了方法與否。 Vullen_Toplevel_Aankoop_EUR(現在爲= None,代碼示例更新)中定義了p和E2,並且可以在[Test] [value]變量中用[=]接收。但仍然E2定義了一個Button,稍後在Vullen_Toplevel_Aankoop_EUR中設置仍然沒有在Test中定義。我在Toplevel()函數之外移動了E2 = None定義,但結果保持不變。也許你更多地澄清你的陳述。謝謝。 –
再讀一遍:定義'E2 = None' ** OUTSIDE FUCTIONS ** - 並使用'global E2' ** INSIDE FUNCTIONS **。 – furas