You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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ᴇ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 03:25:55