我正在尝试学习tkinter以及我的想法要求它全屏显示。在全屏显示之前,我想确保可以使用escape关闭窗口。所以通过类似于Stack Overflow上的这个问题,我一直试图让它在我逃脱时破坏tkinter窗口。对我来说,这似乎应该可行,但是当我点击逃生时我得到了一个例外:
`Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\Jake\AppData\Local\Programs\Python\Python36-
32\lib\tkinter\__init__.py", line 1699, in __call__
return self.func(*args)
TypeError: destroy() takes 1 positional argument but 2 were given`
这对我来说很困惑,因为我认为我根本不会调用任何参数,更不用说2.我已经添加了一个退出按钮,它调用了我制作的close
方法并且可以使用escape而不是好像。为清楚起见,我提供了我的代码。我知道这与这里的很多问题类似,但我已经尝试了一切,似乎没有什么对我有用。提前谢谢!
import tkinter
from tkinter import *
class Window(Frame):
def __init__(self, master = None):
Frame.__init__(self, master)
master.bind('<Escape>', master.destroy)
self.init_window()
def init_window(self):
self.pack(fill=BOTH, expand=1)
quitButton = Button(self, text="quit", command=self.close)
quitButton.place(x=0, y=0)
def close(self):
self.master.destroy()
def main():
root = Tk()
root.geometry('500x500')
app = Window(root)
root.mainloop()
main()
答案 0 :(得分:4)
将函数绑定到事件时,tkinter将始终将事件对象传递给该函数。 destroy
函数不带参数,这意味着您无法直接绑定它。您需要绑定到将接受事件对象作为参数的函数。
由于你已经有了一个函数,你可以给它一个可选的命名参数,这样你就可以继续调用没有参数的函数,但它也可以用在绑定中:
class Window(Frame):
def __init__(self, master = None):
...
master.bind('<Escape>', self.close)
def close(self, event=None):
self.master.destroy()
您还可以使用匿名函数:
master.bind('<Escape>', lambda event: master.destroy())
答案 1 :(得分:0)
以下代码有效。
我在一堂课中使用它在pi的800x480
触摸屏上创建全屏应用程序:
class FullScreenApp(object):
def __init__(self, master, **kwargs):
self.master=master
pad=3
self._geom='200x200+0+0'
master.geometry('{}x{}'.format(800,480))
master.bind('<Escape>', self.close)
def close(self, event=None):
self.master.destroy()