精华内容
下载资源
问答
  • 另一种方法是让“关闭”按钮最小化窗口。通过使用iconify方法可以复制此行为成为protocol方法的第二个参数。下面是一个在Windows7上测试的工作示例:# Python 3import tkinterimport tkinter.scrolledtext as ...

    马特展示了关闭按钮的一个经典修改。

    另一种方法是让“关闭”按钮最小化窗口。

    通过使用iconify方法可以复制此行为

    成为protocol方法的第二个参数。

    下面是一个在Windows7上测试的工作示例:# Python 3

    import tkinter

    import tkinter.scrolledtext as scrolledtext

    class GUI(object):

    def __init__(self):

    root = self.root = tkinter.Tk()

    root.title('Test')

    # make the top right close button minimize (iconify) the main window

    root.protocol("WM_DELETE_WINDOW", root.iconify)

    # make Esc exit the program

    root.bind('', lambda e: root.destroy())

    # create a menu bar with an Exit command

    menubar = tkinter.Menu(root)

    filemenu = tkinter.Menu(menubar, tearoff=0)

    filemenu.add_command(label="Exit", command=root.destroy)

    menubar.add_cascade(label="File", menu=filemenu)

    root.config(menu=menubar)

    # create a Text widget with a Scrollbar attached

    txt = scrolledtext.ScrolledText(root, undo=True)

    txt['font'] = ('consolas', '12')

    txt.pack(expand=True, fill='both')

    gui = GUI()

    gui.root.mainloop()

    在本例中,我们为用户提供了两个新的退出选项:

    “经典文件”菜单->退出,以及Esc按钮。

    展开全文
  • 另一种是使关闭按钮最小化窗口。您可以通过将iconify方法作为协议方法的第二个参数来重现此行为。这是一个在Windows 7上测试的工作示例:#Python3importtkinterimporttkinter.scrolledtextasscrolledtextclassGUI...

    qq_遁去的一_1

    Matt展示了关闭按钮的一个经典修改。另一种是使关闭按钮最小化窗口。您可以通过将iconify方法作为协议方法的第二个参数来重现此行为。这是一个在Windows 7上测试的工作示例:# Python 3import tkinterimport tkinter.scrolledtext as scrolledtextclass GUI(object):

        def __init__(self):

            root = self.root = tkinter.Tk()

            root.title('Test')

        # make the top right close button minimize (iconify) the main window

            root.protocol("WM_DELETE_WINDOW", root.iconify)

        # make Esc exit the program

            root.bind('', lambda e: root.destroy())

        # create a menu bar with an Exit command

            menubar = tkinter.Menu(root)

            filemenu = tkinter.Menu(menubar, tearoff=0)

            filemenu.add_command(label="Exit", command=root.destroy)

            menubar.add_cascade(label="File", menu=filemenu)

            root.config(menu=menubar)

        # create a Text widget with a Scrollbar attached

            txt = scrolledtext.ScrolledText(root, undo=True)

            txt['font'] = ('consolas', '12')

            txt.pack(expand=True, fill='both')gui = GUI()gui.root.mainloop()在此示例中,我们为用户提供了两个新的退出选项:经典文件菜单 - >退出,以及Esc按钮。

    展开全文
  • 如何在Python Tkinter程序中处理窗口关闭事件(用户单击" X"按钮)?Tkinter支持一种称为协议处理程序的机制。在这里,术语协议是指应用程序和窗口管理器之间的交互。最常用的协议称为WM_DELETE_WINDOW,用于定义当...

    如何在Python Tkinter程序中处理窗口关闭事件(用户单击" X"按钮)?

    Tkinter支持一种称为协议处理程序的机制。在这里,术语协议是指应用程序和窗口管理器之间的交互。最常用的协议称为WM_DELETE_WINDOW,用于定义当用户使用窗口管理器显式关闭窗口时发生的情况。

    您可以使用protocol方法为此协议安装处理程序(小部件必须是Tk或Toplevel小部件):

    这里有一个具体的例子:

    import tkinter as tk

    from tkinter import messagebox

    root = tk.Tk()

    def on_closing():

    if messagebox.askokcancel("Quit","Do you want to quit?"):

    root.destroy()

    root.protocol("WM_DELETE_WINDOW", on_closing)

    root.mainloop()

    我使用了类似的代码,但root.destroy()

    如果您使用的是像Twisted这样的东西来独立维护事件循环或Tkinter(例如:twists反应堆对象),请确保外部主循环已停止,并且为此目的提供了任何专门的技术(例如:twisted.reactor.stop())

    在Windows上的Python 2.7上,Tkinter没有子模块消息框。 我使用了import tkMessageBox as messagebox

    我认为您应该知道是您从其他人/其他地方复制了此答案和代码。

    我不知道,那不是我最初发布的代码。

    不为我工作。 硬关闭窗口时(例如使用Alt + F4),它不会改变经典的Python对图形中断的混乱反应。

    @MitchMcMabers:另一方面,很长一段时间以来,tkinter几乎没有任何重大变化。

    马特展示了关闭按钮的一种经典修改。

    另一种是使关闭按钮最小化窗口。

    您可以通过使用iconify方法来重现此行为

    是协议方法的第二个参数。

    这是一个在Windows 7上测试过的有效示例:

    # Python 3

    import tkinter

    import tkinter.scrolledtext as scrolledtext

    class GUI(object):

    def __init__(self):

    root = self.root = tkinter.Tk()

    root.title('Test')

    # make the top right close button minimize (iconify) the main window

    root.protocol("WM_DELETE_WINDOW", root.iconify)

    # make Esc exit the program

    root.bind('', lambda e: root.destroy())

    # create a menu bar with an Exit command

    menubar = tkinter.Menu(root)

    filemenu = tkinter.Menu(menubar, tearoff=0)

    filemenu.add_command(label="Exit", command=root.destroy)

    menubar.add_cascade(label="File", menu=filemenu)

    root.config(menu=menubar)

    # create a Text widget with a Scrollbar attached

    txt = scrolledtext.ScrolledText(root, undo=True)

    txt['font'] = ('consolas', '12')

    txt.pack(expand=True, fill='both')

    gui = GUI()

    gui.root.mainloop()

    在此示例中,我们为用户提供了两个新的退出选项:

    经典文件菜单->退出,还有Esc按钮。

    取决于Tkinter活动,尤其是在使用Tkinter.after时,使用destroy()停止此活动-即使使用protocol(),按钮等-也会干扰此活动("执行时出错"),而不是只是终止它。在几乎每种情况下,最好的解决方案是使用标志。这是一个简单,愚蠢的用法示例(尽管我敢肯定,你们大多数人都不需要它!

    from Tkinter import *

    def close_window():

    global running

    running = False

    print"Window closed"

    root = Tk()

    root.protocol("WM_DELETE_WINDOW", close_window)

    cv = Canvas(root, width=200, height=200)

    cv.pack()

    running = True;

    # This is an endless loop stopped only by setting 'running' to 'False'

    while running:

    for i in range(200):

    if not running:

    break

    cv.create_oval(i, i, i+1, i+1)

    root.update()

    这样可以很好地终止图形活动。您只需要在正确的位置检查running。

    尝试简单版本:

    import tkinter

    window = Tk()

    closebutton = Button(window, text='X', command=window.destroy)

    closebutton.pack()

    window.mainloop()

    或者,如果您想添加更多命令:

    import tkinter

    window = Tk()

    def close():

    window.destroy()

    #More Functions

    closebutton = Button(window, text='X', command=close)

    closebutton.pack()

    window.mainloop()

    我要感谢Apostolos的回答,这一点引起了我的注意。这是2019年Python 3的更加详细的示例,带有更清晰的描述和示例代码。

    注意以下事实:destroy()(或根本没有自定义窗口关闭处理程序)会在用户关闭窗口时立即破坏该窗口及其所有正在运行的回调。

    这可能对您不利,这取决于您当前的Tkinter活动,尤其是在使用tkinter.after(定期回调)时。您可能正在使用处理一些数据并将其写入磁盘的回调...在这种情况下,您显然希望数据写入完成而不会被突然终止。

    最好的解决方案是使用标志。因此,当用户请求关闭窗口时,可以将其标记为一个标志,然后对其进行响应。

    (注意:我通常将GUI设计为封装良好的类和单独的工作线程,并且我绝对不使用"全局"(我使用类实例变量),但这只是一个简单的示例,用于演示当用户关闭窗口时,Tk如何突然终止您的定期回调...)

    from tkinter import *

    import time

    # Try setting this to False and look at the printed numbers (1 to 10)

    # during the work-loop, if you close the window while the periodic_call

    # worker is busy working (printing). It will abruptly end the numbers,

    # and kill the periodic callback! That's why you should design most

    # applications with a safe closing callback as described in this demo.

    safe_closing = True

    # ---------

    busy_processing = False

    close_requested = False

    def close_window():

    global close_requested

    close_requested = True

    print("User requested close at:", time.time(),"Was busy processing:", busy_processing)

    root = Tk()

    if safe_closing:

    root.protocol("WM_DELETE_WINDOW", close_window)

    lbl = Label(root)

    lbl.pack()

    def periodic_call():

    global busy_processing

    if not close_requested:

    busy_processing = True

    for i in range(10):

    print((i+1),"of 10")

    time.sleep(0.2)

    lbl["text"] = str(time.time()) # Will error if force-closed.

    root.update() # Force redrawing since we change label multiple times in a row.

    busy_processing = False

    root.after(500, periodic_call)

    else:

    print("Destroying GUI at:", time.time())

    try: #"destroy()" can throw, so you should wrap it like this.

    root.destroy()

    except:

    # NOTE: In most code, you'll wanna force a close here via

    #"exit" if the window failed to destroy. Just ensure that

    # you have no code after your `mainloop()` call (at the

    # bottom of this file), since the exit call will cause the

    # process to terminate immediately without running any more

    # code. Of course, you should NEVER have code after your

    # `mainloop()` call in well-designed code anyway...

    # exit(0)

    pass

    root.after_idle(periodic_call)

    root.mainloop()

    该代码将向您显示WM_DELETE_WINDOW处理程序即使在我们的自定义periodic_call()忙于工作/循环的过程中仍在运行!

    我们使用一些非常夸张的.after()值:500毫秒。这只是为了使您很容易看到定期呼叫忙时关闭与否之间的区别...如果在数字更新时关闭,您将看到WM_DELETE_WINDOW在定期呼叫时发生呼叫"正在处理:True"。如果您在数字暂停时关闭(这意味着此时不处理定期回调),则会看到关闭发生在"不忙"期间。

    在实际使用中,您的.after()将使用30到100毫秒之类的时间来具有响应GUI。这只是一个演示,可以帮助您了解如何保护自己免受Tk的默认"关闭时立即中断所有工作"的行为。

    总结:使WM_DELETE_WINDOW处理程序设置一个标志,然后在安全的情况下(当您的应用程序完成所有工作时)定期并手动检查该标志.destroy()窗口。

    PS:您也可以使用WM_DELETE_WINDOW询问用户是否真的要关闭窗口;如果他们回答"否",则无需设置标志。非常简单您只需在WM_DELETE_WINDOW中显示一个消息框,然后根据用户的答案设置标志即可。

    使用closeEvent

    def closeEvent(self, event):

    # code to be executed

    这个答案需要更多细节。 这条线放在哪里? 在我这边摆弄一点似乎无法使它正常工作。

    展开全文
  • How do I handle the window close event (user clicking the 'X' button) in a Python Tkinter program?解决方案Tkinter supports a mechanism called protocol handlers. Here, the term protocol refers to the ...

    How do I handle the window close event (user clicking the 'X' button) in a Python Tkinter program?

    解决方案

    Tkinter supports a mechanism called protocol handlers. Here, the term protocol refers to the interaction between the application and the window manager. The most commonly used protocol is called WM_DELETE_WINDOW, and is used to define what happens when the user explicitly closes a window using the window manager.

    You can use the protocol method to install a handler for this protocol (the widget must be a Tk or Toplevel widget):

    Here you have a concrete example:

    import tkinter as tk

    from tkinter import messagebox

    root = tk.Tk()

    def on_closing():

    if messagebox.askokcancel("Quit", "Do you want to quit?"):

    root.destroy()

    root.protocol("WM_DELETE_WINDOW", on_closing)

    root.mainloop()

    展开全文
  • 另一种是使关闭按钮最小化窗口。您可以通过将iconify方法作为协议方法的第二个参数来重现此行为。这是一个在Windows 7上测试的工作示例:#Python3importtkinterimporttkinter.scrolledtextasscrolledtextclassGUI...
  • 另一种是使关闭按钮最小化窗口。您可以通过iconify方法重现此行为是协议方法的第二个参数。这是一个在Windows 7上测试的工作示例:# Python 3import tkinterimport tkinter.scrolledtext as scrolledtextclass GUI...
  • 在您的情况下似乎没有差异,模态窗口与否 . 实际上,您只需要使用 wait_window() 方法 ....它进入一个本地事件循环,直到给定的窗口被销毁(通过destroy方法,或通过窗口管理器显式)才返回 .考虑使用非模态窗口的示...
  • python tkinter窗体弹出窗口

    千次阅读 2020-03-26 16:27:24
    使用python进行窗体布局时,由于按键触发事件,有时候会出现一些问题,学过QT的话应该知道,有些窗体在关闭的时候会出现询问是否关闭等功能,此次的例程,主要说的是python tkinter窗体中的弹出窗体 程序如下: ...
  • Python定义点击tkinter的右上角关闭按钮触发事件,再调用其它函数来结束进程等。 import tkinter import tkinter.messagebox import sys def JieShu(): tkinter.messagebox.showwarning(title='警告', message='...
  • Tkinter

    2020-10-01 11:14:00
    Tkinter ...mainloop( )方法可以让程序继续执行,同时进入等待与处理窗口事件,若是单击窗口右上方的“关闭”按钮,此程序才会结束。 window.mainloop() 与窗口相关的设置。 title( ):窗口标题。 geom
  • WM_DELETE_WINDOW 除事件绑定外,Tkinter还支持一种称为协议(protocol-)处理程序的机制。 协议是指应用程序与窗口管理器之间的交互。...一旦定义了自己的处理程序handler,Tkinter将不再自动关闭窗口。 相反,
  • 一个事件提醒的小工具(python + tkinter) 本人在工作中每天下班时需要进行签退操作,但无奈经常忘记,所以决定写一个小工具在每天到点的时候弹窗提醒一下,工具用python语言写成,主要使用了tkinter模块. 程序运行效果...
  • tkinter 编程

    2019-09-18 08:49:47
    2、Widget【控件】:窗口的下一级,所有的Widget都是类,通过调用构造方法建立1)每个类都包括建立,关闭,循环,事件绑定和解除2)Widget的共同属性:Color,Dimensions尺寸,Anchor锚点Anchor是设置比如:居中对齐...
  • 本篇为视频课程 tkinter入门详解 章节对应文档,请结合视频学习,地址见文末4.1 自制编辑器编辑器预览项目实战要点在之前章节中已经学习了tkinter的大量知识...覆写窗口关闭事件1self.protocol('WM_DELETE_WINDOW',...
  • 本篇为视频课程 tkinter从入门到实战视频​blog.csdn.net 章节文档,请结合教程学习4.1 自制编辑器项目实战要点在之前章节中已经学习了...覆写窗口关闭事件self实现鼠标右键菜单def 使用闭包处理回调事件def 使用...
  • 本篇为视频课程 tkinter入门详解 章节对应文档,请结合视频学习,地址见文末4.1 自制编辑器编辑器预览项目实战要点在之前章节中已经学习了tkinter的大量知识...覆写窗口关闭事件1self.protocol('WM_DELETE_WINDOW',...
  • Python Tkinter实战——自制文本编辑器

    千次阅读 2019-04-25 23:05:17
    本篇为视频课程 tkinter从入门到实战视频 章节文档,请结合教程学习 4.1 自制编辑器 项目实战要点 在之前章节中已经学习了tkinter的大量知识,但仍然...覆写窗口关闭事件 self.protocol('WM_DELETE_WINDOW', self....
  • 主界面 关闭弹窗 贴边效果 ...贴边可以还原窗口或者关闭程序;...import tkinter ...# 关闭事件 def on_closing(): # 退出程序 def quit(): # 终止程序 os._exit(0) # # # 退出程序 # 贴边隐藏 d..
  • 另一方面,tkinter窗口的listbox绑定了<>事件,并把字符串加入到列表中显示出来。关闭窗口后,不再监听命令行的输入,也不再发送事件。 # -*- coding: UTF-8 -*-from Tkinter import * #引入模块import ...
  • 是的,通过注册一个函数(我称之为on_close,但您可以选择任何函数名)来拦截窗口关闭事件,从而避免这种情况。在一个棘手的问题是protocol是Tk类的一个方法。在非turtle tkinter用法中,您可以自己创建Tk对象作为顶层...
  • 1.错误代码 import turtle as t ...#阻止窗口关闭 t.mainloop() 异常 Exception in Tkinter callback Traceback (most recent call last): File "C:\Pyblock\resources\app\Python-win64\.
  • tkinter写的主页面 并且在主页面中用按钮实现了调用游戏界面并且关闭主页面的方法,现在需要一个返回按钮 返回tk的主页面 我现在点按钮可以返回但是无法关闭当前的pygame的窗口 求助各位大神 import ...
  • 如果使用窗口的“x”关闭该绘图,那么我希望取消选中该复选框。在我已经把所有的工作都做了,除了在数字关闭时取消勾选。在看起来我的close函数正在被调用,但是当我试图操作复选框时,它崩溃了。在from tkFont ...
  • 2020-12-30

    2020-12-30 14:44:51
    python猜字小游戏基于tkinter模块 ...1.首先创建一个窗口,有文本框,猜和关闭按钮,在窗口上方有提示语言 2.写事件函数和函数(俩按钮和文本框对应的事件处理函数,还有一个猜的次数函数,大概就这三个)
  • Python基础教程 第二版

    2018-04-04 12:35:58
    12.4..1 使用Tkinter 12.4.2 使用Jython和Swing 12.4..3 使用其他开发包 12.5 小结 第13章 数据库支持 13.1 Python数据库API 13.1.1 全局变量 13.1.2 异常 13.1.3 连接和游标 13.1.4 类型 13.2 SQLite和PySQLite ...

空空如也

空空如也

1 2
收藏数 26
精华内容 10
关键字:

tkinter窗口关闭事件