我正在尝试从用户那里获取输入并将其显示在第二页上。它应该说“Hello”,然后是第一页输入框中的输入。我已经注释掉了不起作用的代码。其他一切都有效,因此复制粘贴会将工作片段放入 python 中。
from tkinter import *
from tkinter.ttk import Button
window = Tk()
window.title('In the Beginning')
window.geometry("400x400")
def Setting():
name2.configure(text =
entry.get())
name2 = Label(text = ' ')
def window_2():
window.destroy()
window2 = Tk()
nameLb = Label(text = 'Hello')
nameLb.pack()
"""
ender = Button(text = 'Quit!', command = window2.destroy())
ender.pack()
name2.pack()
"""
window2.mainloop()
greeting = Label(text = 'Name Your character:', fg = 'red', bg = 'white')
greeting.pack()
entry = Entry(fg = 'yellow', bg = 'blue', width = 50)
entry.pack()
setname = Button(text = 'set', command = Setting)
setname.pack()
kill = Button(text = 'Click here', command = window_2)
kill.pack()
name2.pack()
window.mainloop()
按下设置按钮后,我的名字显示在第一页上。但由于某种原因,当我使用另一个按钮进入第二页时,我看到的只是“Hello”。如果我在第二页上有 ender 按钮,那么 Hello 标签就会消失。由于某种原因 command = window2.destroy(),按钮没有反应。
但由于某种原因,当我使用另一个按钮进入第二页时,我看到的只是你好。
这是因为你没有更新第二个窗口中的标签
nameLb
。
如果我在第二页上有结束按钮,那么“Hello”标签就会消失。由于某种原因 command = window2.destroy(),按钮没有反应。
这是因为
command = window2.destroy()
会立即执行window2.destroy()
,所以在创建ender
按钮之前,原来的第二个窗口就被销毁了。由于创建
ender
按钮时没有窗口,因此将显式创建另一个根窗口,并且 ender
按钮将是该窗口中唯一的小部件,并且其 command
选项被分配为 window2.destry()
的结果这是None
。这就是为什么单击 ender
按钮时不执行任何操作。
注意,创建小部件时最好指定其
master
。
以下是修复上述问题的修改后的代码:
# avoid using wildcard import
import tkinter as tk
from tkinter import ttk
window = tk.Tk()
window.title('In the Beginning')
window.geometry("400x400")
def Setting():
name2.configure(text=entry.get())
def window_2():
# get what is input before destroying the first window
who = entry.get()
window.destroy()
# create second window
window2 = tk.Tk()
window2.title("Window 2")
window2.geometry("400x200")
# better specify the master of widgets
# and set the text of the label to what you want
nameLb = tk.Label(window2, text=f'Hello {who}')
nameLb.pack()
# use command=window2.destroy instead
ender = ttk.Button(window2, text='Quit!', command=window2.destroy)
ender.pack()
greeting = tk.Label(window, text='Name Your character:', fg='red', bg='white')
greeting.pack()
entry = tk.Entry(window, fg='yellow', bg='blue', width=50)
entry.pack()
setname = ttk.Button(window, text='set', command=Setting)
setname.pack()
kill = ttk.Button(window, text='Click here', command=window_2)
kill.pack()
name2 = tk.Label(window)
name2.pack()
window.mainloop()
从第二页的用户显示屏输入
entry = Entry(window, textvariable=ent,...)
ender
按钮。片段(已修改):
from tkinter import *
from tkinter.ttk import Button
window = Tk()
window.title('In the Beginning')
window.geometry("400x400")
def Setting():
name2.configure(text =
entry.get())
name2 = Label(window)
def window_2():
window.withdraw()
window2 = Toplevel()
window2.title('Toplevel')
nameLb = Label(window2, text = f'Hello {ent.get()}')
nameLb.pack()
def destroy_second_window():
window2.destroy()
ender = Button(window2, text = 'Quit!', command=destroy_second_window)
ender.pack()
ent = StringVar()
greeting = Label(window,text = 'Name Your character:', fg = 'red', bg = 'white')
greeting.pack()
entry = Entry(window, textvariable=ent,fg = 'yellow', bg = 'blue', width = 50)
entry.pack()
setname = Button(window,text = 'set', command = Setting)
setname.pack()
kill = Button(window,text = 'Click here', command = window_2)
kill.pack()
name2.pack()
window.mainloop()
截图: