我想知道是否有人可以告訴我是否可以使用外部函式更新頂級視窗。我已經在下面復制了我的問題,我需要做的是使用函式 updatelabel() 更新 Toplevel(master)。我使用了類似的外部函式來更新 root 中的專案,這就像做夢一樣。但是,對于頂級視窗,我總是得到
NameError:名稱'newWindow'未定義
我發現的唯一解決方法是在每次加載時使用 newWindow.destroy() 殺死 newWindow ,但是這種方法會使螢屏彈出然后再次關閉,這看起來不太漂亮。非常歡迎任何幫助,謝謝。
from tkinter import *
from tkinter.ttk import *
master = Tk()
master.geometry("200x200")
def updatelabel():
Label(newWindow,
text="I changed").pack()
def openNewWindow():
# Toplevel object which will
# be treated as a new window
newWindow = Toplevel(master)
# sets the title of the
# Toplevel widget
newWindow.title("New Window")
# sets the geometry of toplevel
newWindow.geometry("200x200")
# A Label widget to show in toplevel
Label(newWindow,
text="I want to change").pack()
button1 = Button(newWindow,
text="Click me to change label", command=updatelabel).pack()
btn = Button(master,
text="open a new window",
command=openNewWindow)
btn.pack(pady=10)
mainloop()
uj5u.com熱心網友回復:
您的“newWindow”是在您的“openNewWindow”函式中定義的,因此它基本上只存在于其中,您可以通過在函式外部定義“newWindow”或將其用作引數來解決此問題(只需將其添加到括號并在函式本身的括號中為其命名)呼叫“updateLabel”
我認為這應該可行,盡管我有一段時間沒有與 tkinter 合作過,所以如果沒有,請不要怪我
from tkinter import *
from tkinter.ttk import *
master = Tk()
master.geometry("200x200")
def updatelabel(newWindow):
Label(newWindow,
text="I changed").pack()
def openNewWindow():
# Toplevel object which will
# be treated as a new window
newWindow = Toplevel(master)
# sets the title of the
# Toplevel widget
newWindow.title("New Window")
# sets the geometry of toplevel
newWindow.geometry("200x200")
# A Label widget to show in toplevel
Label(newWindow,
text="I want to change").pack()
button1 = Button(newWindow,
text="Click me to change label", command= lambda: updatelabel(newWindow)).pack()
btn = Button(master,
text="open a new window",
command=openNewWindow)
btn.pack(pady=10)
mainloop()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/474307.html
