Tkinter不同文件函数内调用Toplevel窗口运行失效问题排查
存在的问题
- 跨文件变量访问错误:文件2的
com1()函数无法直接访问主文件中定义的root主窗口对象,运行时会触发NameError报错。 - 组件父容器配置错误:
Entry输入框的父容器指定为root,会导致输入框渲染到主窗口而非新建的Toplevel窗口中。 - 语法逻辑错误:
Toplevel是顶层窗口对象,不能调用pack()方法(该方法仅适用于容器内的子组件);且无需为Toplevel单独启动mainloop(),主窗口的mainloop()已经负责所有窗口的事件循环,多余的mainloop()会导致事件冲突。 - 主程序缺失启动逻辑:主文件末尾没有添加
root.mainloop(),主窗口无法正常启动运行。
修复方案
第一步:修改主程序文件
import tkinter as tk from tkinter import * import comm1 from comm1 import com1 root = tk.Tk() root.title(" ") root.geometry("1900x1314") #grid Center && 3x6 configuration for correct gui layout root.grid_rowconfigure(0, weight=1) root.grid_rowconfigure(11, weight=1) root.grid_columnconfigure(0, weight=1) root.grid_columnconfigure(11, weight=1) #background image canvas = Canvas(root, width=1900, height=1314) canvas.place(x=0, y=0, relwidth=1, relheight=1) bckground = PhotoImage(file='img.png') canvas.create_image(20 ,20 ,anchor=NW, image=bckground) # 按钮绑定命令时传入root参数 btn1 = tk.Button(root, text='Top', command=lambda: com1(root), justify='center', font=("Arial", 10)) btn1.config(anchor=CENTER) btn1.grid(row=4, column=1) # 新增主窗口事件循环启动 root.mainloop()
第二步:修改Toplevel逻辑文件
import tkinter as tk from tkinter import * # 函数新增参数接收主窗口对象 def com1(root): newWindow1 = Toplevel(root) newWindow1.title(" ") newWindow1.geometry("500x500") # 输入框父容器改为新建的Toplevel窗口 entry1 = tk.Entry(newWindow1, justify='center' , font=("Arial", 12), fg="Grey") entry1.pack()
内容的提问来源于stack exchange,提问作者Art
相关产品推荐
相关产品推荐

