Python 3.x 在Python3.6中重写alt-f4关闭tkinter窗口并用其他内容替换它
我花了很长时间阅读过去的帖子,没有找到我需要的 我正在用tkinter做一个亭式窗户。我将其设置为全屏打开。我想覆盖标准的alt-f4命令来关闭它。但我不希望它完全无法关闭。我想改为创建自己的键盘快捷键(alt-ctrl-g-3或类似的东西) 我尝试了一些覆盖alt-f4的建议,但无法让它们发挥作用。在我的init函数中,我包括:Python 3.x 在Python3.6中重写alt-f4关闭tkinter窗口并用其他内容替换它,python-3.x,tkinter,Python 3.x,Tkinter,我花了很长时间阅读过去的帖子,没有找到我需要的 我正在用tkinter做一个亭式窗户。我将其设置为全屏打开。我想覆盖标准的alt-f4命令来关闭它。但我不希望它完全无法关闭。我想改为创建自己的键盘快捷键(alt-ctrl-g-3或类似的东西) 我尝试了一些覆盖alt-f4的建议,但无法让它们发挥作用。在我的init函数中,我包括: self.bind('<Alt-Key-F4>', self.ignorekey()) . . . def self.ignorekey(self)
self.bind('<Alt-Key-F4>', self.ignorekey())
.
.
.
def self.ignorekey(self)
pass
self.bind(“”,self.ignorekey())
.
.
.
def自动点火钥匙(自动)
通过
据我所知,有一种方法可以挂接Alt+F4或按X或任何其他方式:
root.protocol("WM_DELETE_WINDOW", do_exit)
其中do_exit()
是回调函数,root
是主窗口
此绑定不传递事件对象。据我所知,这应该适用于任何平台
以下是一个例子:
from tkinter import *
root = Tk()
pressed_f4 = False # Is Alt-F4 pressed?
def do_exit():
global pressed_f4
print('Trying to close application')
if pressed_f4: # Deny if Alt-F4 is pressed
print('Denied!')
pressed_f4 = False # Reset variable
else:
close() # Exit application
def alt_f4(event): # Alt-F4 is pressed
global pressed_f4
print('Alt-F4 pressed')
pressed_f4 = True
def close(*event): # Exit application
root.destroy()
root.bind('<Alt-F4>', alt_f4)
root.bind('<Escape>', close)
root.protocol("WM_DELETE_WINDOW",do_exit)
root.mainloop()
从tkinter导入*
root=Tk()
按下_f4=False#是否按下Alt-f4?
def do_exit():
全局压缩f4
打印('正在尝试关闭应用程序')
如果按下_f4:#如果按下Alt-f4,则拒绝
打印('Denied!')
按下_f4=假#重置变量
其他:
关闭()#退出应用程序
def alt_f4(事件):#按下alt-f4
全局压缩f4
打印('按下Alt-F4')
按下f4=真
def close(*事件):#退出应用程序
root.destroy()
root.bind(“”,alt_f4)
root.bind(“”,关闭)
协议(“WM_删除_窗口”,do_退出)
root.mainloop()
我不确定
root.bind(“”,alt\u f4)
的回调是否总是在root.protocol(“WM\u DELETE\u WINDOW”,do\u exit)”的回调之前运行。你可能需要做更多的研究来证明这一点 据我所知,有一种方法可以勾选Alt+F4或按X或任何其他方式:
root.protocol("WM_DELETE_WINDOW", do_exit)
其中do_exit()
是回调函数,root
是主窗口
此绑定不传递事件对象。据我所知,这应该适用于任何平台
以下是一个例子:
from tkinter import *
root = Tk()
pressed_f4 = False # Is Alt-F4 pressed?
def do_exit():
global pressed_f4
print('Trying to close application')
if pressed_f4: # Deny if Alt-F4 is pressed
print('Denied!')
pressed_f4 = False # Reset variable
else:
close() # Exit application
def alt_f4(event): # Alt-F4 is pressed
global pressed_f4
print('Alt-F4 pressed')
pressed_f4 = True
def close(*event): # Exit application
root.destroy()
root.bind('<Alt-F4>', alt_f4)
root.bind('<Escape>', close)
root.protocol("WM_DELETE_WINDOW",do_exit)
root.mainloop()
从tkinter导入*
root=Tk()
按下_f4=False#是否按下Alt-f4?
def do_exit():
全局压缩f4
打印('正在尝试关闭应用程序')
如果按下_f4:#如果按下Alt-f4,则拒绝
打印('Denied!')
按下_f4=假#重置变量
其他:
关闭()#退出应用程序
def alt_f4(事件):#按下alt-f4
全局压缩f4
打印('按下Alt-F4')
按下f4=真
def close(*事件):#退出应用程序
root.destroy()
root.bind(“”,alt_f4)
root.bind(“”,关闭)
协议(“WM_删除_窗口”,do_退出)
root.mainloop()
我不确定root.bind(“”,alt\u f4)
的回调是否总是在root.protocol(“WM\u DELETE\u WINDOW”,do\u exit)”的回调之前运行。你可能需要做更多的研究来证明这一点 你能公布你尝试过的方法吗?也可能是你的操作系统仍在捕捉击键并发送信号。至于捕捉alt-f4,这是我唯一尝试过的方法,因为据我所知,这是正确的方法。我尝试了alt-f4的不同标识符,我在不同的帖子中看到了这些标识符。我应该提到我正在使用Ubuntu18。你能告诉我你尝试过什么方法吗?也可能是你的操作系统仍在捕捉击键并发送信号。至于捕捉alt-f4,这是我唯一尝试过的方法,因为据我所知,这是正确的方法。我尝试了alt-f4的不同标识符,我在不同的帖子中看到了这些标识符。我应该提到我正在使用Ubuntu18.hm,但是在任何情况下都不能阻止窗口关闭吗?我希望能够创建一个特殊的快捷键组合,这将是唯一关闭窗口的东西。基本上,我是为公共信息亭制作的,我不希望人们能够使用任何标准的键盘快捷键或鼠标点击来退出程序。你可以将任何键绑定到一个关闭窗口的函数。因此,制作另一个函数来关闭窗口并将某些内容绑定到它。还是我误解了你的问题?啊,好吧,也许我误解了这是怎么回事。我以为它设置了一个窗口的属性,说它什么时候关闭。我目前的主要问题实际上是绑定alt-f4按键。当我运行这段代码时,它会立即显示消息框,说明alt-f4被按下,即使它没有被按下。当我点击alt-f4时,它会关闭窗口,而不是执行函数:类应用程序(框架):def _u初始化(self,master):self.bind(“”,self.ignorekey())def ignorekey(self):messagebox.showinfo(“无效的电子邮件地址”,“您点击alt-f4”)我不太明白…我的回答中包括了一个用法的例子。你是什么意思?嗯,但这不是会阻止窗口在任何情况下关闭吗?我希望能够创建一个特殊的快捷键组合,这将是唯一关闭窗口的东西。基本上,我是为公共信息亭制作的,我不想要人你可以使用任何标准的键盘快捷键或鼠标点击来退出程序。你可以将任何键绑定到一个将关闭窗口的函数。因此,制作另一个关闭窗口的函数并绑定一些东西。或者我误解了你的问题?啊,好吧,也许我误解了它的作用。我以为它是设置的我现在的主要问题是绑定alt-f4按键。当我运行这段代码时,它会立即显示消息框,说alt-f4被按下了,即使它没有被按下。当我点击alt-f4时,它会关闭窗口,而不是执行函数:class Application(Frame):def _uinit _;(self,master):self.bind(“”,self.ignorekey())def ignorekey(self):