MMTTMM
这是一个简单的 tkinter 绘图应用程序。from tkinter import *b1 = "up"xold, yold = None, Nonedisplay_width = '500'display_height = '500'canvas_width = '500'canvas_height = '500'def main(): root = Tk() root.geometry((display_width+"x"+display_height)) drawing_area = Canvas(root,width=canvas_width,height=canvas_height,bg="white") drawing_area.bind("<Motion>", motion) drawing_area.bind("<ButtonPress-1>", b1down) drawing_area.bind("<ButtonRelease-1>", b1up) drawing_area.pack(side=RIGHT) root.mainloop()def b1down(event): global b1 x1, y1 = ( event.x - 4 ), ( event.y - 4 ) x2, y2 = ( event.x + 4 ), ( event.y + 4 ) event.widget.create_oval( x1, y1, x2, y2, fill = "black" ) b1 = "down" # you only want to draw when the button is down # because "Motion" events happen -all the time-def b1up(event): global b1, xold, yold b1 = "up" xold = None # reset the line when you let go of the button yold = Nonedef motion(event): if b1 == "down": global xold, yold x1, y1 = ( event.x - 4 ), ( event.y - 4 ) x2, y2 = ( event.x + 4 ), ( event.y + 4 ) event.widget.create_oval( x1, y1, x2, y2, fill = "black" ) if xold is not None and yold is not None: python_green = "#476042" x1, y1 = ( event.x - 4 ), ( event.y - 4 ) x2, y2 = ( event.x + 4 ), ( event.y + 4 ) event.widget.create_oval( x1, y1, x2, y2, fill = "black" ) event.widget.create_line(xold,yold,event.x,event.y,smooth=TRUE,width=9) # here's where you draw it. smooth. neat. xold = event.x yold = event.yif __name__ == "__main__": main()
互换的青春
一个干净的例子:import tkinter as tkclass Signature(tk.Canvas): def __init__(self, *args, **kwargs): self.thickness = kwargs.pop('thickness', 4) tk.Canvas.__init__(self, *args, **kwargs) self._xold = None self._yold = None self.bind('<B1-Motion>', self._on_motion) def _on_motion(self, event): x1, y1 = ( event.x - self.thickness ), ( event.y - self.thickness ) x2, y2 = ( event.x + self.thickness ), ( event.y + self.thickness ) event.widget.create_oval( x1, y1, x2, y2, fill='black' ) if self._xold is not None and self._yold is not None: self.create_oval( x1, y1, x2, y2, fill='black' ) self.create_line(self._xold,self._yold,event.x,event.y,smooth=True,width=self.thickness*2+1) # here's where you draw it. smooth. neat. self._xold = event.x self._yold = event.yif __name__ == '__main__': canvas_width = '500' canvas_height = '500' root = tk.Tk() sig = Signature(root, width=canvas_width,height=canvas_height,bg='white', thickness=1) sig.pack() root.mainloop()请注意,这会在事件的位置绘制一个椭圆形,并绘制一条线将其与最后一个事件连接起来,这有助于平滑线。