首页
学习
活动
专区
工具
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查询后,...退出Hue后Spark的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.5K30

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

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

    9.4K20

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

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

    5.3K30

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

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

    14.8K20

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

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

    5.8K10

    软件测试|超好用超简单的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

    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.9K30

    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

    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 个核心控件,每个控件有多种设置,这里不展开介绍,网上可以很容易搜到详细的文档说明。

    23920

    过分了,别人用来做桌面应用开发,这家伙却用来撩妹(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快速制作UI界面

    Tkinter 提供了一组丰富的组件,包括但不限于: 窗口(Window):Tkinter 允许你创建应用程序的主窗口。 标签(Label):用于显示文本或图像。...root.mainloop root.mainloop() 是 Tkinter 中的一个方法,它表示进入 Tkinter 的主事件循环(main event loop)。...一旦调用了 mainloop() 方法,程序就会进入一个循环,持续监听用户的操作,直到用户关闭了应用程序的主窗口,或者通过代码显式地中止这个循环。...一旦调用了 mainloop() 方法,程序就会进入等待用户操作的状态,直到用户关闭了窗口或者其他结束条件被触发。...因此,通常在创建了所有的 GUI 组件后,会调用 mainloop() 方法来启动程序的主事件循环,使得用户能够与界面进行交互。

    15700

    过分了,别人用来做桌面应用开发,这家伙却用来撩妹(1)--上帝给你开一个窗口(Tkinter)—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.5K10

    【记录】使用python图形库打开新窗口时候关闭之前的窗口,运行结束后关闭当前窗口和程序

    简单讲解 代码片段展示了如何使用 Python 的 Tkinter 库和 subprocess 模块来实现在 tkinter 窗口中打开另一个 Python 脚本的过程,并在脚本运行结束后关闭当前窗口和程序...在你的代码中,你使用了 Tkinter 创建了一个名为 window 的主窗口,并在 open_buy_quantity 函数中调用了 window.destroy() 方法来关闭当前窗口。...这是一个简单的 GUI 应用示例,展示了如何创建窗口和关闭窗口。 subprocess 模块: subprocess 模块允许你在 Python 程序中启动新的进程。...在你的代码中,你使用了 sys.exit() 来确保在执行完购买数量脚本后退出当前程序。这样可以确保在购买数量脚本执行完成后结束程序运行。...结语 总体来说,代码展示了如何结合使用 Tkinter 和 subprocess 来实现 GUI 程序中打开外部脚本的功能,并在完成任务后退出程序。

    17910
    领券