方法“start”和“clearline”只在我的鼠标光标在tkinter窗口而不是画布上时起作用
但重点是在画布上画线。怎么会这样?
尝试将(self.canvas)作为方法参数而不是(self),但它不起作用,并且在方法上没有太多的更改,所以我不知道
我是初学者请提供例子
import tkinter as tk
size = [960,800]
line_id = None
line_points = []
line_options = {}
class Window(tk.Frame):
def __init__(self):
tk.Frame.__init__(self)
self.master.title("Calcul mental")
self.master.minsize(size[0],size[1])
self.grid(sticky=tk.E+tk.W+tk.N+tk.S)
top=self.winfo_toplevel()
top.rowconfigure(0, weight=1)
top.columnconfigure(0, weight=1)
global line_id, line_points, line_options
self.canvas = tk.Canvas( self,border=5,bg = "white", width=size[0], height=size[1]/2 )
self.canvas.grid()
self.bind('<Button-1>', self.set_start)
self.bind('<B1-Motion>', self.draw_line)
self.bind('<ButtonRelease-1>', self.end_line)
self.bind('<Button-3>', self.clear_line)
def draw_line(self,event):
global line_id,line_points,line_options
print("draw")
line_points.extend((event.x, event.y))
line_id = self.canvas.create_line(line_points, **line_options,tags="draw")
def set_start(self,event):
global line_points
print("start")
line_points.extend((event.x, event.y))
def end_line(self,event=None):
global line_id
print('end')
line_points.clear()
line_id = None
def clear_line(self,event):
print("clear line")
self.canvas.delete("draw")
Window().mainloop()
1条答案
按热度按时间lsmepo6l1#
感谢@Bryan奥克利和@acw1668的帮助=)
我改变了
到
而且很有效