我正在尝试使用Python3
在tkinter
上制作一些GUI。到目前为止,我上面有主窗口和'Test'
按钮,它将打开第二个窗口。第二个窗口具有输入,标签,保存和关闭按钮。当您在输入项中键入内容并按save
按钮时,标签会显示您在输入项中键入的文本。但是关闭此窗口并再次打开后,标签什么也没有显示。如何制作此标签以显示关闭前上次键入的文本?例如,我在输入中键入“ Hi
”,然后按“ Save
”,然后按“ Close
”,然后再次打开此窗口,标签显示为“ Hi
”。 '
import tkinter as tk
def save_data(entry, t):
t.config(text = entry.get())
def close_action(current_window):
current_window.destroy()
def insertMainInfo():
new_window = tk.Tk()
new_window.geometry("307x131")
new_window.title("TestWindow")
test_entry = tk.Entry(new_window)
test_entry.place(relx = 0.283, rely = 0.1, height = 24, width = 127)
text = tk.Label(new_window)
text.place(relx = 0.283, rely = 0.25, height = 24, width = 127)
save_button = tk.Button(new_window, command = lambda: save_data(test_entry, text))
save_button.place(relx=0.283, rely=0.45, height=24, width=127)
save_button.configure(text = "Save")
close = tk.Button(new_window, command = lambda: close_action(new_window))
close.place(relx=0.283, rely=0.687, height=24, width=127)
close.configure(text = "Close")
new_window.mainloop()
if __name__ == '__main__':
top = tk.Tk()
top.geometry("307x131+557+330")
top.resizable(width=False, height=False)
top.title("MainWindow")
new_window_button = tk.Button(top, command = insertMainInfo)
new_window_button.place(relx=0.283, rely=0.687, height=24, width=127)
new_window_button.configure(text = "Test")
main_label = tk.Label(top)
main_label.place(relx=0.033, rely=0.153, height=41, width=284)
main_label.configure(text = "TestLabel")
top.mainloop()
答案 0 :(得分:1)
我不得不承认,您的问题标题有点模棱两可。 如果您只想更新最后一个条目的标签,则这里提供了一种修改代码的简单方法。
根据建议,在一个好的程序中,我们的程序中只有一个Tk()
,其他新窗口或弹出窗口应使用Toplevel()
类的tkinter
;因此,我在您的 insertMainInfo()
函数中使用了此功能。
这里的重点是定义一个变量,我叫 last_entry ,最初是空的或“’”。在主程序的 new_window 按钮(在 if __name__ == '__main__':
之后)中将此参数用作此变量的参数(我也在此处添加了lambda函数)。
然后我们在 save_data
函数中将其定义为全局变量,这样以后其他函数或主程序就可以将其称为 new_window
之前的最后一个条目已关闭。
在这里,我如上所述修改了您的代码,并且已经对其进行了测试,并且可以正常工作。
import tkinter as tk
def save_data(entry, t):
global last_entry
last_entry = entry.get()
t.config(text = last_entry)
def close_action(current_window):
current_window.destroy()
def insertMainInfo(last_entry):
new_window = tk.Toplevel()
new_window.geometry("307x131")
new_window.title("TestWindow")
test_entry = tk.Entry(new_window)
test_entry.place(relx = 0.283, rely = 0.1, height = 24, width = 127)
text = tk.Label(new_window, text=last_entry)
text.place(relx = 0.283, rely = 0.25, height = 24, width = 127)
save_button = tk.Button(new_window, command = lambda: save_data(test_entry, text))
save_button.place(relx=0.283, rely=0.45, height=24, width=127)
save_button.configure(text = "Save")
close = tk.Button(new_window, command = lambda: close_action(new_window))
close.place(relx=0.283, rely=0.687, height=24, width=127)
close.configure(text = "Close")
new_window.mainloop()
# --- A Simple Data Structure ---
last_entry = ''
if __name__ == '__main__':
top = tk.Tk()
top.geometry("307x131+557+330")
top.resizable(width=False, height=False)
top.title("MainWindow")
new_window_button = tk.Button(top, command = lambda: insertMainInfo(last_entry))
new_window_button.place(relx=0.283, rely=0.687, height=24, width=127)
new_window_button.configure(text = "Test")
main_label = tk.Label(top)
main_label.place(relx=0.033, rely=0.153, height=41, width=284)
main_label.configure(text = "TestLabel")
top.mainloop()