我正在使用Tkinter在Python 3中编写一个简单的程序。我们从全屏tkinter窗口中的黑色画布开始,当我按下键盘上的空格键时,我想在画布中间显示一个蓝色圆圈。
我尝试了以下代码:
from tkinter import *
class TheBlueCircle:
def __init__(self, master):
self.master = master
self.ws = master.winfo_screenwidth()
self.hs = master.winfo_screenheight()
self.master.geometry(str(self.ws)+'x'+str(self.ws)+'+0+0')
self.canvas = Canvas(master, bg = 'black')
self.canvas.pack(fill = BOTH, expand = True)
self.canvas.bind('<KeyPress-space>', self.drawCircle)
def drawCircle(self):
r = min(self.ws, self.hs)/3
coord = (self.ws/2-r, self.hs/2-r, self.ws/2+r, self.hs/2+r)
self.canvas.create_oval(coord, fill = 'blue')
root = Tk()
TheBlueCircle(root)
root.mainloop()
但是它不起作用。无论我按多少次空格键。不必应用drawCircle函数。
怎么了?
答案 0 :(得分:1)
您的代码中需要进行一些更改。首先,您需要为event
方法使用一个drawCircle
作为参数。其次,当前焦点未设置为canvas
对象。
要在按space
后正确执行方法,请在启动GUI时先按tab
,或在代码中强制更改焦点:
class TheBlueCircle:
def __init__(self, master):
...
self.canvas.bind('<space>', self.drawCircle)
self.canvas.focus_set()
def drawCircle(self,event=None):
...