python-3.x 未定义名称“main_window”

wyyhbhjk  于 2023-03-13  发布在  Python
关注(0)|答案(3)|浏览(132)
from tkinter import *

def create_main_window():
    global main_window
    main_window = Toplevel()
    main_window.update()

entrance_window = Tk()
first_text_label = Label(entrance_window, text="you are in:").grid(row=0, column=0)
place_entry = Entry(entrance_window).grid(row=0, column=1)

submit_button = Button(entrance_window, text="Submit", command=create_main_window).grid(row=1, column=0, columnspan=2)
Label(main_window, text=f"{place_entry}").pack()
entrance_window.mainloop()

程序应打开一个新窗口,其中包含第一个窗口中输入框中的文本,但如果我写入,则显示None

Label(main_window, text=f"{place_entry}").pack()

在create_main_window中,或者如果我在按钮代码之后编写main_window,它会给我一个错误,说main_window没有定义。
有人能帮忙吗?

jqjz2hbq

jqjz2hbq1#

试试这个:

from tkinter import *

def create_main_window():
    global main_window
    main_window = Toplevel(main_window)
    label = Label(main_window, text=f"{place_entry.get()}")
    label.pack()
    # main_window.update() # This is useless

entrance_window = Tk()

first_text_label = Label(entrance_window, text="You are in:")
first_text_label.grid(row=0, column=0)

place_entry = Entry(entrance_window)
place_entry.grid(row=0, column=1)

submit_button = Button(entrance_window, text="Submit", command=create_main_window)
submit_button.grid(row=1, column=0, columnspan=2)
entrance_window.mainloop()

我将标签创建移到了create_main_window中。另外请注意,使用var = a().b()时,会将b()返回的内容保存到var中。这就是为什么当您使用var = Entry(...).pack(...)时,var始终为None

kjthegm6

kjthegm62#

这是因为你试图给一个不存在的对象添加一个Label,把Label函数移到create_main_window()函数中,如下所示:

from tkinter import *

def create_main_window():
    global main_window, entrance_window
    main_window = Toplevel()
    place_entry = Entry(entrance_window).grid(row=0, column=1)
    Label(main_window, text=f"{place_entry}").pack()
    main_window.update()

entrance_window = Tk()
first_text_label = Label(entrance_window, text="you are in:").grid(row=0, column=0)

submit_button = Button(entrance_window, text="Submit", command=create_main_window).grid(row=1, column=0, columnspan=2)
entrance_window.mainloop()
t9aqgxwy

t9aqgxwy3#

从未使用过global。不要使用通配符from tkinter import *
要查看Label小工具,必须将其放置在create_main_window() function内。
摘录:

import tkinter as tk

def create_main_window() -> None :   
    main_window = tk.Toplevel()
    tk.Label(main_window, text=f"{place_entry.get()}").pack()
     

entrance_window = tk.Tk()

first_text_label = tk.Label(entrance_window, text="you are in:").grid(row=0, column=0)

place_entry = tk.Entry(entrance_window)
place_entry.grid(row=0, column=1)

tk.Button(entrance_window, text="Submit", command=create_main_window).grid(row=1, column=0, columnspan=2)
 
entrance_window.mainloop()

if __name__=='__main__':
    create_main_window()

截图:

相关问题