Python Tkinter关闭窗口后自动打开新窗口的问题求助
问题修复方案
问题根源
你代码的核心问题是多次创建Tk()主窗口实例并多次调用mainloop():
- Tkinter程序应该只有一个根窗口(
Tk()实例),所有其他窗口都必须用Toplevel()创建,作为根窗口的子窗口。 - 你先后创建了
window、fenetre_2、settings三个独立的Tk()实例,每个都调用了mainloop()。当第一个mainloop()结束(主窗口被销毁),程序会继续执行后续代码,自动创建并显示下一个窗口,导致关闭一个窗口就弹出下一个。 - 另外,
ouvrir()函数创建的是空的Window2,和你想打开的应用窗口逻辑脱节。
修复后的代码
from tkinter import * # 只创建一个根窗口作为程序核心 root = Tk() root.title("My app") root.geometry("800x300") root.minsize(700, 400) root.maxsize(1200, 900) root.iconbitmap("Sans titre.ico") root.config(background='#FF4800') # 定义打开应用窗口的函数 def ouvrir_app(): # 用Toplevel创建应用窗口,作为root的子窗口 fenetre_2 = Toplevel(root) fenetre_2.title("Appli") fenetre_2.config(background="white") fenetre_2.geometry("900x600") frame_2 = Frame(fenetre_2, bg="white") fenetre_2_Label = Label(frame_2, text="Quel Action souhaitez vous faire", font="Arial", bg="#FF4800") fenetre_2_Label.pack(pady=20, fill=X) frame_2.pack(pady=20) Achat = Button(frame_2, text="+ Ajouter Transactions", font="Okaso") Achat.pack(pady=30, fill=X) Compte = Button(frame_2, text="Compte en Banque", font="Okaso", fg="white", bg="black") Compte.pack(pady=10, fill=X) # 销毁主窗口(可选,如果你想打开应用后关闭主界面) root.destroy() # 定义打开设置窗口的函数 def ouvrir_parametres(): para = Toplevel(root) para.title("Paramétres") para.geometry("900x600") para.config(background='#FF4800') frame_para = Frame(para, bg='#FF4800') settings_Label = Label(frame_para, text="Paramétres :", font="Arial", bg="black", fg='white') settings_Label.pack() frame_para.pack(expand=YES) # 主窗口UI布局 frame = Frame(root, bg='#FF4800') label_window = Label(frame, text="Welcome To FRIEND", font=("Champion", 30), bg='#FF4800', fg='white') label_window.pack(expand=YES) label_2 = Label(frame, text="Options :", font=("Arial", 20), bg='#FF4800', fg='white') label_2.pack(expand=YES) frame.pack(expand=YES) # 绑定按钮的正确命令 open_btn = Button(frame, text="Ouvrir App", font=("MALBERG", 20), bg='black', fg='white', command=ouvrir_app) open_btn.pack(pady=30, fill=X, expand=YES) settings_btn = Button(frame, text="Parametres", font=("Arial", 20), bg='black', fg='white', command=ouvrir_parametres) settings_btn.pack(pady=23, fill=X) # 整个程序只调用一次mainloop() root.mainloop()
关键改动说明
- 只保留一个
Tk()实例(命名为root),所有其他窗口都用Toplevel(root)创建,明确从属关系。 - 将原来分散的窗口创建逻辑放到对应的按钮函数里,点击按钮才创建对应窗口。
- 整个程序只在最后调用一次
root.mainloop(),统一管理事件循环。 - 修正了
Parametres按钮未绑定命令的问题,现在点击能打开设置窗口。 - 移除了多余的
pygame和openai导入(如果后续需要可以再加,但当前代码未用到)。
内容的提问来源于stack exchange,提问作者Sʜᴀᴅᴏᴡ .ᴇxᴇ
相关产品推荐
相关产品推荐

