Python Tkinter 鼠标事件

发布时间 2023-04-10 11:17:04作者: emanlee

Python Tkinter 鼠标事件

鼠标事件的用法,实现对图形的缩放。点击鼠标左键能放大,点击鼠标右键能缩小。

 

 


from tkinter import * # Import tkinter

class EnlargeShrinkCircle:
    def __init__(self):
        self.radius = 50 # 半径50
        window = Tk() # 创建窗体 Create a window
        window.title("Control Circle Demo") # 窗体标题 Set a title
        self.canvas = Canvas(window, bg = "white",
                             width = 200, height = 200) # Canvas为画布;背景白色;宽度200像素;高度200像素
        self.canvas.pack() # 画布放置并显示
        self.canvas.create_oval(
            100 - self.radius, 100 - self.radius,
            100 + self.radius, 100 + self.radius, tags = "oval")# 创建椭圆(包括圆)
        # 左上角为 100-50,100-50, 右下角为 100+50,100+50,
        # Bind canvas with mouse events
        self.canvas.bind("<Button-1>", self.increaseCircle) # Tkinter Canvas 消息绑定, <Button-1>  鼠标左键单击 https://www.cnblogs.com/emanlee/p/16180742.html
        self.canvas.bind("<Button-3>", self.decreaseCircle) # <Button-3>  鼠标右键单击
        window.mainloop() # Create an event loop

    def increaseCircle(self, event):
        self.canvas.delete("oval") # Canvas delete方法可以清除canvas画布上已绘制的对象
        if self.radius < 100:
            self.radius += 2 # 改变半径
        self.canvas.create_oval(
            100 - self.radius, 100 - self.radius,
            100 + self.radius, 100 + self.radius, tags = "oval") # 绘制圆

    def decreaseCircle(self, event):
        self.canvas.delete("oval") # Canvas delete方法可以清除canvas画布上已绘制的对象
        if self.radius > 2:
            self.radius -= 2 # 改变半径
        self.canvas.create_oval(
            100 - self.radius, 100 - self.radius,
            100 + self.radius, 100 + self.radius, tags = "oval") # 绘制圆

EnlargeShrinkCircle() # Create GUI

 

 


 

Canvas  create_oval 方法绘制椭圆,语法格式:

create_oval(x0, y0, x1, y1, option, ...)

椭圆,包括特殊情况下的圆。所占用的矩形区域由左上角的坐标(x0,y0)和右下角外的点的坐标(x1,y1)定义。

在 Canvas 中调用 create_xxx() 方法绘图时,还可传入一个 tags 选项,该选项可以为所绘制的图形项(比如矩形、椭圆、多边形等)添加一个或多个 tag(标签)。此外,Canvas 还允许调用方法为图形项添加 tag、删除 tag 等,这些 tag 也相当于该图形项的标识,程序完全可以根据 tag 来获取图形项。
REF:https://blog.csdn.net/AudiA6LV6/article/details/126851233

 

Canvas delete方法可以清除canvas画布上已绘制的对象
主要有以下三种使用方法
    delete(id): 通过id来删除。
    id是canvas.create_something的返回值
    delete(tag): 通过tag来删除。
    tag通过canvas.create_something(tag=tag)来指定
    delete("all"): 删除所有已绘制对象
REF:https://blog.csdn.net/python1639er/article/details/115386039