首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

关闭窗口后,Tkinter mainloop()不退出

关闭窗口后,Tkinter mainloop()不退出是由于Tkinter的事件循环(mainloop)仍在运行。Tkinter的事件循环是一个无限循环,用于接收用户的输入事件并进行处理。当窗口被关闭时,Tkinter会将关闭窗口的事件传递给事件循环,但是事件循环并不会自动退出。

解决这个问题的一种常见方法是在关闭窗口的回调函数中添加退出事件循环的代码。可以通过调用Tkinter的destroy()方法来关闭窗口,并在关闭窗口后添加root.quit()或者root.destroy()代码来退出事件循环。

以下是一个示例代码:

代码语言:txt
复制
import tkinter as tk

def on_closing():
    root.destroy()  # 关闭窗口
    root.quit()     # 退出事件循环

root = tk.Tk()
root.protocol("WM_DELETE_WINDOW", on_closing)  # 设置关闭窗口的回调函数

# 添加窗口内容和逻辑代码

root.mainloop()  # 启动事件循环

在上述代码中,on_closing()函数被指定为关闭窗口时的回调函数,并通过root.protocol()方法将该函数与关闭窗口事件绑定。当用户关闭窗口时,on_closing()函数会被调用,其中的root.destroy()方法关闭窗口,root.quit()方法退出事件循环。

需要注意的是,root.quit()方法只会退出事件循环,但程序仍会继续执行后面的代码,而root.destroy()方法会销毁窗口并结束程序的执行。根据具体需求,选择适合的方法即可。

参考链接:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 如何在退出Hue关闭Spark会话

    代码块部分可以左右滑动查看噢 1.问题描述 ---- 前置条件: 1.使用Hue登录执行Hive查询 2.Hive设置执行引擎为Spark Hive配置了Spark作为默认执行引擎,在通过Hue执行Hive查询,...退出HueSpark的Session并为随着Hue的退出关闭,操作如下: 登录Hue执行SQL语句,可以看到提交的是一个Spark作业 ?...此时退出Hue界面,观察0003的作业任然在运行并为随着Hue的退出关闭 ? 如果不同的用户登录Hue执行Hive的SQL操作,会产生大量的SparkSession未关闭问题,导致占用集群资源。...2.解决方法 ---- 针对上述问题,有如下两种方式解决: 1.从CDH5.8版本开始,在Hue上提供一个用来关闭Spark Session的按钮,用户可以使用此功能来关闭当前会话,操作如下: ?...点击“Close”关闭当前Spark Session ? 查看Yarn的8080界面,确认该Session是否已关闭 ? 此时可以看到Spark Session已经关闭

    2.4K30

    WPF 解决弹出模态窗口关闭,主窗口不在最前

    本文告诉大家如何解决这个问题,在 WPF 的软件,弹出一个模态窗口。使用另一个窗口在模态窗口前面。从任务栏打开模态窗口关闭模态窗口。这时发现,主窗口会在刚才使用的另一个窗口下面。...在窗口关闭的时候,Windows 会找一个在这个窗口下方的第一个可用的窗口,激活他。因为弹出模态窗口的主窗口是被禁用的。...所以在模态窗口关闭的时候,就忽略了主窗口可以激活,于是找到主窗口下方的一个可以被激活的窗口,这时激活他,于是这个被找到的窗口就在主窗口的上面。 那么这个问题可以如何解决?...实际上只需要在模态窗口关闭之前,激活主窗口就可以。...参见 关闭模态窗口,父窗口居然跑到了其他窗口的后面

    5.3K30

    WPF 解决弹出模态窗口关闭,主窗口不在最前

    本文告诉大家如何解决这个问题,在 WPF 的软件,弹出一个模态窗口。使用另一个窗口在模态窗口前面。从任务栏打开模态窗口关闭模态窗口。这时发现,主窗口会在刚才使用的另一个窗口下面。...在窗口关闭的时候,Windows 会找一个在这个窗口下方的第一个可用的窗口,激活他。因为弹出模态窗口的主窗口是被禁用的。...所以在模态窗口关闭的时候,就忽略了主窗口可以激活,于是找到主窗口下方的一个可以被激活的窗口,这时激活他,于是这个被找到的窗口就在主窗口的上面。 那么这个问题可以如何解决?...实际上只需要在模态窗口关闭之前,激活主窗口就可以。...参见 关闭模态窗口,父窗口居然跑到了其他窗口的后面

    5.8K10

    关闭模态窗口,父窗口居然跑到了其他窗口的后面

    关闭模态窗口,父窗口居然跑到了其他窗口的后面 发布于 2018-02-05 05:58 更新于 2018...弹出一个模态窗口,然后将模态窗口的父窗口设置为自身窗口; 切换到其他程序窗口中(比如 Windows 资源管理器窗口); 切换回此模态窗口,然后关闭这个模态窗口上。...你会发现,模态窗口关闭,父窗口并没有回到当前的顶层显示中。取而代之的,是其他程序的窗口(比如 Windows 资源管理器窗口)。...然后,回到模态子窗口中,把它关掉: ? 我们期待模态子窗口关掉,它的父窗口会在顶层继续供我们操作,但实际上,Windows 资源管理器却成为了顶层,我们的程序“掉下去了”: ?...为解决兼容性问题的微软工程师默哀一分钟…… 我曾经尝试在模态子窗口关闭激活一下父窗口,但这样会导致窗口的层级闪烁一下(Windows 资源管理器会短暂地显示到我们的窗口之上)。

    9.4K20

    WPF 解决弹出模态窗口关闭,主窗口不在最前

    本文告诉大家如何解决这个问题,在 WPF 的软件,弹出一个模态窗口。使用另一个窗口在模态窗口前面。从任务栏打开模态窗口关闭模态窗口。这时发现,主窗口会在刚才使用的另一个窗口下面。...在窗口关闭的时候,Windows 会找一个在这个窗口下方的第一个可用的窗口,激活他。因为弹出模态窗口的主窗口是被禁用的。...所以在模态窗口关闭的时候,就忽略了主窗口可以激活,于是找到主窗口下方的一个可以被激活的窗口,这时激活他,于是这个被找到的窗口就在主窗口的上面。 那么这个问题可以如何解决?...实际上只需要在模态窗口关闭之前,激活主窗口就可以。...参见 关闭模态窗口,父窗口居然跑到了其他窗口的后面 ----

    14.8K20

    Python的门面担当

    Hello GUI World 我们从一个最简单的 Tkinter GUI 程序说起: import tkinter as tk root = tk.Tk() root.mainloop() ?...而 GUI 程序的不同之处在于,通常它们是由“事件驱动”的:程序运行,相当于进入一个循环一直运行。如果你不做任何操作,这个窗口就一直在这里。...就算要结束程序,也是通过“关闭窗口”和“退出”事件。 这就是 mainloop 的意义所在:监听各种事件。理解了这一点,也就理解了 GUI 程序的基本逻辑。...在调用 mainloop 前,增加了 Label(文本标签)、Button(按钮)、Entry(输入框)三个控件,通过 pack() 方法把它们添加到了窗口之上。...Tkinter 有 15 个核心控件,每个控件有多种设置,这里展开介绍,网上可以很容易搜到详细的文档说明。

    2.7K40

    python tkinter 设计指南

    # 主窗口 root_window.title('C语言中文网:c.biancheng.net') # 窗口名字 root_window.mainloop() #开启主循环,让窗口处于显示状态 文字和关闭按钮...window.quit() 关闭当前窗口 window.update() 刷新当前窗口 window.mainloop() 设置窗口主循环,使窗口循环显示(一直显示,指导窗口关闭) window.iconbitmap...() 刷新屏幕,否则返回值为1 window.protocol("协议名",回调函数) 启用协议处理机制,常用协议有 WN_DELETE_WINDOW,当用户点击关闭窗口时,窗口不会关闭,而是触发回调函数...) # 关闭窗口 # 当 Tkinter 使用 WM_DELETE_WINDOW 协议与主窗口进行交互 # 则 Tkinter窗口右上角 x 号的关闭功能失效, # 也就是无法通过点击 x 来关闭窗口...s n分别代表,东西南北) expand 是否可扩展窗口,参数值为 True(扩展)或者 False(扩展),默认为 False,若设置为 True,则控件的位置始终位于窗口的中央位置 fill 参数值为

    6.8K30

    软件测试|超好用超简单的Python GUI库——tkinter(二)

    创建一个空白窗口# 导入tkfrom tkinter import *# 创建一个主窗口对象window = Tk()# 调用mainloop()显示主窗口window.mainloop()程序运行结果如下...window.quit()关闭当前窗口window.update()刷新当前窗口window.mainloop()设置窗口主循环,使窗口循环显示(一直显示,指导窗口关闭)window.iconbitmap...=tk.Button(window,text="关闭",command=window.quit)# 将按钮放置在主窗口内button.pack(side="bottom")#进入主循环,显示主窗口window.mainloop...当 Tkinter 使用 WM_DELETE_WINDOW 协议与主窗口进行交互时,Tkinter窗口右上角x号的关闭功能失效,也就是无法通过点击x来关闭窗口,而是转变成调用用户自定义的函数。...')# 定义回调函数,当用户点击窗口x退出时,执行用户自定义的函数def QueryWindow(): # 显示一个警告信息,点击确,销毁窗口 if messagebox.showwarning

    2.6K30

    Tkinter:Python的门面担当

    Hello GUI World 我们从一个最简单的 Tkinter GUI 程序说起: import tkinter as tk root = tk.Tk() root.mainloop() 1.创建一个...而 GUI 程序的不同之处在于,通常它们是由“事件驱动”的:程序运行,相当于进入一个循环一直运行。如果你不做任何操作,这个窗口就一直在这里。...就算要结束程序,也是通过“关闭窗口”和“退出”事件。 这就是 mainloop 的意义所在:监听各种事件。理解了这一点,也就理解了 GUI 程序的基本逻辑。...() 在调用 mainloop 前,增加了 Label(文本标签)、Button(按钮)、Entry(输入框)三个控件,通过 pack() 方法把它们添加到了窗口之上。...Tkinter 有 15 个核心控件,每个控件有多种设置,这里展开介绍,网上可以很容易搜到详细的文档说明。

    22420

    过分了,别人用来做桌面应用开发,这家伙却用来撩妹(1)–上帝给你开一个窗口Tkinter

    正文步骤实现 上帝给你开一个窗口Tkinter) 第一步:导入模块,无需安装 import tkinter 第二步:实现一个窗口 import tkinter tk=tkinter.Tk() tk.mainloop..., 545) # 最大尺寸 设置全屏模式: tk.attributes("-fullscreen", True)#全屏模式:True 全屏;False 正常显示 注:全屏模式没有退出按钮,关闭可使用win...+D最小化才能关闭 第五步:获取当前桌面的尺寸 有时候我们需要获取到当前屏幕的大小,来决定我们窗口的大小,那就需要获取当前屏幕的宽高,如何获取呢?...tk.overrideredirect(True)#无退出,不能移动,无工具栏 第十步:设置窗口置顶 tk.attributes("-topmost", True) 窗体置顶:True 所有窗口中处于最顶层..._1.png")#file:t图片路径 imgLabel = tkinter.Label(tk,image=photo).grid(column=1,row=6)#把图片整合到标签类中 tk.mainloop

    1.7K60

    Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法详解

    tkinter的使用: 1.模块的导入 [tkinter是python默认的gui库,所以一般不需要另外安装模块]:from tkinter import * 2.使用: 创建主窗口:root...,也可以是其他的显示方式,比如grid,后面介绍】 让主窗口持续显示:root.mainloop() 3.控件介绍: 主窗口Tk[所有控件都需要附着在界面上]: 介绍:主窗口是所有控件附着的基础...参数设置:可用参数参考下面的,用法参考Tk的 Toplevel是一个子窗口,当父窗口关闭时子窗口关闭,但子窗口关闭时父窗口关闭 Valid resource names: background,...类似label窗口部件,但是能够自动地调整文本到给定的宽度或比率。 ? 参数设置:与Label类似 由于Label也可以显示多行文本,就逐渐少用Message了。”””...女:',v2.get(),'另外:',v3.get())#选择则值为1,选中为0 # pass v1 = IntVar() #用tkinter变量来表示按钮是否选中 v2 = IntVar(

    9.6K10
    领券