удалить метод на холсте tkinter

Попытка удалить случайную фигуру на холсте, нажав кнопку «удалить прямоугольник». но мой метод, похоже, не работает. Я продолжаю получать эту ошибку, должен быть небольшой, но я не могу ее найти.

TypeError: removeRects () отсутствует 1 обязательный позиционный аргумент: 'canvas'

from tkinter import * import random root = Tk() class Recta: def __init__(self, height=60, width=80): self.height = height self.width = width self.create_buttons() self.canvas = Canvas(root) self.canvas.pack() def removeRects(self,canvas): my_rect = self.canvas.create_rectangle(0,0,w,h,fill = "green") self.canvas.delete(my_rect) def create_buttons(self): self.frame = Frame(root, bg='grey', width=400, height=40) self.frame.pack(fill='x') self.button1 = Button(self.frame, text='Rect', command=self.randomRects) self.button1.pack(side='left', padx=10) self.button2 = Button(self.frame, text='Remove Rect', command=self.removeRects) self.button2.pack(side='left') def randomRects(self): w = random.randrange(300) h = random.randrange(200) self.canvas.create_rectangle(0, 0, w, h, fill= "green") tes = Recta() root.mainloop() 

One Solution collect form web for “удалить метод на холсте tkinter”

Вы должны отслеживать прямоугольники, которые вы создаете в коллекции; затем извлеките id из коллекции, чтобы удалить прямоугольник.

здесь я создал список для объединения идентификаторов созданного прямоугольника: self.canvas.create_rectangle(0, 0, w, h, fill='green') возвращает номер id, который хранится в коллекции.

После вызова метода delete id из последнего созданного прямоугольника извлекается (и удаляется из коллекции) и используется для remove прямоугольника из canvas .

 import tkinter as tk import random root = tk.Tk() class Recta: def __init__(self, height=60, width=80): self.height = height self.width = width self.create_buttons() self.canvas = tk.Canvas(root) self.canvas.pack() self.rects = [] def create_buttons(self): self.frame = tk.Frame(root, bg='grey', width=400, height=40) self.frame.pack(fill='x') self.button1 = tk.Button(self.frame, text='Add Rect', command=self.randomRects) self.button1.pack(side='left', padx=10) self.button2 = tk.Button(self.frame, text='Remove Rect', command=self.removeRects) self.button2.pack(side='left') def removeRects(self): if len(self.rects) > 0: self.canvas.delete(self.rects.pop()) def randomRects(self): w = random.randrange(300) h = random.randrange(200) self.rects.append(self.canvas.create_rectangle(0, 0, w, h, fill='green')) tes = Recta() root.mainloop() 

Вот такой же код с * import!

 from tkinter import * import random root = Tk() class Recta: def __init__(self, height=60, width=80): self.height = height self.width = width self.create_buttons() self.canvas = Canvas(root) self.canvas.pack() self.rects = [] def create_buttons(self): self.frame = Frame(root, bg='grey', width=400, height=40) self.frame.pack(fill='x') self.button1 = Button(self.frame, text='Add Rect', command=self.randomRects) self.button1.pack(side='left', padx=10) self.button2 = Button(self.frame, text='Remove Rect', command=self.removeRects) self.button2.pack(side='left') def removeRects(self): if len(self.rects) > 0: self.canvas.delete(self.rects.pop()) def randomRects(self): w = random.randrange(300) h = random.randrange(200) self.rects.append(self.canvas.create_rectangle(0, 0, w, h, fill='green')) tes = Recta() root.mainloop() 
  • Как удалить объект create_text в холсте?
  • Tkinter Canvas create_window ()
  • Внедрение матового полотна в графический интерфейс tkinter - график не отображается, но ошибка не возникает
  • Можете ли вы изменить атрибуты объекта Canvas Canvas после создания?
  • Python, Tkinter - Вставка текста в окна холста
  • Черепаха от руки
  • Python - лучший язык программирования в мире.