Python 3.x 获取一个弹出式画布以获得焦点

Python 3.x 获取一个弹出式画布以获得焦点,python-3.x,tkinter,Python 3.x,Tkinter,如何将键盘控制从一个画布转移到另一个画布 self.canvas.bind('<FocusOut>') self.canvas2.bind('<FocusIn>') 仍然将焦点放在self.canvas上,而不是self.canvas2上。焦点集是为小部件提供焦点的方式 下面的示例显示了两个画布,并在单击其中一个画布时设置焦点。按s键时,将在具有焦点的画布上绘制一个正方形 import tkinter as tk import random def draw_squa

如何将键盘控制从一个画布转移到另一个画布

self.canvas.bind('<FocusOut>')
self.canvas2.bind('<FocusIn>')
仍然将焦点放在self.canvas上,而不是self.canvas2上。

焦点集是为小部件提供焦点的方式

下面的示例显示了两个画布,并在单击其中一个画布时设置焦点。按s键时,将在具有焦点的画布上绘制一个正方形

import tkinter as tk
import random

def draw_square(event):
    x0 = random.randint(30, 370)
    y0 = random.randint(30, 170)
    size = random.randint(10, 30)

    event.widget.create_rectangle(x0, y0, x0+size, y0+size, fill="red")

def give_focus(event):
    event.widget.focus_set()
    event.widget.configure(background="bisque")

def lose_focus(event):
    event.widget.configure(background="white")

root = tk.Tk()
label = tk.Label(root, text="Click to focus a canvas, press 's' to draw a square")
canvas1 = tk.Canvas(root, width=400, height=200, background="white",
                    borderwidth=1, relief="raised")
canvas2 = tk.Canvas(root, width=400, height=200, background="white",
                    borderwidth=1, relief="raised")

label.pack(side="top", fill="x")
canvas1.pack(fill="both", expand=True)
canvas2.pack(fill="both", expand=True)

for canvas in (canvas1, canvas2):
    canvas.bind("<FocusOut>",lose_focus)
    canvas.bind("<1>", give_focus)
    canvas.bind("<s>", draw_square)

root.mainloop()

今天早上,奇怪的焦点集的可能副本对我来说不起作用,但由于我一直试图提出一个简化版本的代码,焦点集现在起作用了。谢谢
import tkinter as tk
import random

def draw_square(event):
    x0 = random.randint(30, 370)
    y0 = random.randint(30, 170)
    size = random.randint(10, 30)

    event.widget.create_rectangle(x0, y0, x0+size, y0+size, fill="red")

def give_focus(event):
    event.widget.focus_set()
    event.widget.configure(background="bisque")

def lose_focus(event):
    event.widget.configure(background="white")

root = tk.Tk()
label = tk.Label(root, text="Click to focus a canvas, press 's' to draw a square")
canvas1 = tk.Canvas(root, width=400, height=200, background="white",
                    borderwidth=1, relief="raised")
canvas2 = tk.Canvas(root, width=400, height=200, background="white",
                    borderwidth=1, relief="raised")

label.pack(side="top", fill="x")
canvas1.pack(fill="both", expand=True)
canvas2.pack(fill="both", expand=True)

for canvas in (canvas1, canvas2):
    canvas.bind("<FocusOut>",lose_focus)
    canvas.bind("<1>", give_focus)
    canvas.bind("<s>", draw_square)

root.mainloop()