You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tkinter中Canvas无法绘制直线问题求助(附代码)

Tkinter中Canvas无法绘制直线问题求助(附代码)

大家好,我是编程新手,最近遇到个Tkinter的小难题:我想实现按住鼠标左键时在Canvas上绘制直线的功能,之前在Window类外的单独文件里这么写是能正常工作的,但把代码移到类里面之后就失效了。不过我加的print语句显示相关方法确实都被触发了,这就让我搞不清问题出在哪了😅。

能不能麻烦各位大佬帮我看看问题所在,最好能给个修改后的示例代码呀?谢谢大家的帮助!

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.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()

备注:内容来源于stack exchange,提问作者jkbfdgb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 12:29:33