2016-03-03 2 views
0

Я пытаюсь создать простую программу рисования с кнопкой, которая очищает холст, удаляя все фигуры на нем, однако я пытаюсь использовать команду delete(), которая встроена в tkinter, но когда я пытаюсь запустить его, он говорит, что удаление не определено. «Что я делаю неправильно?Tkinter name "delete" not defined

from Tkinter import * 
import Tkinter 
root = Tk() 

class PaintBox(Frame): 
    def __init__(self): 
     Frame.__init__(self) 
     self.pack(expand = YES, fill = BOTH) 
     self.master.title("Color Draw v0.2.63.23 open closed beta (Still in Alpha) greenlight edition") 
     self.master.geometry("600x600") 

     self.message = Label(self, text = "Drag the mouse SLOWLY to draw") 
     self.message.pack(side = TOP) 

     self.myCanvas = Canvas(self) 
     self.myCanvas.pack(expand = YES, fill = BOTH) 
     self.bd = (2) 

     self.myCanvas.bind("<B1-Motion>", self.paint) 

    def paint(self, event): 
     x1, y1 = (event.x - 4), (event.y - 4) 
     x2, y2 = (event.x + 4), (event.y + 4) 
     self.myCanvas.create_rectangle(x1, y1, x2, y2, fill = "black", tags="box") 

    button = Button(root, text = "Clear", command = delete(box)) 
    button.grid(row = 1, column = 0) 

PaintBox().mainloop() 

Вот полный отслеживающий @mgilson:

ERROR: execution aborted 

In [2]: %run C:/Users/en58522/Downloads/paintcolor.txt--------------------------------------------------------------------------- 
NameError         Traceback (most recent call last) 
C:\Program Files\Enthought\Canopy\App\appdata\canopy-1.4.1.1975.win-x86_64\lib\site-packages\IPython\utils\py3compat.pyc in execfile(fname, glob, loc) 
    195    else: 
    196     filename = fname 
--> 197    exec compile(scripttext, filename, 'exec') in glob, loc 
    198  else: 
    199   def execfile(fname, *where): 

C:\Users\en58522\Downloads\paintcolor.txt in <module>() 
     3 root = Tk() 
     4 
----> 5 class PaintBox(Frame): 
     6  def __init__(self): 
     7   Frame.__init__(self) 

C:\Users\en58522\Downloads\paintcolor.txt in PaintBox() 
    24   self.myCanvas.create_rectangle(x1, y1, x2, y2, fill = "black", tags="box") 
    25 
---> 26  button = Button(root, text = "Clear", command = delete(box)) 
    27  button.grid(row = 1, column = 0) 
    28 

NameError: name 'delete' is not defined 
+0

Выложите полный текст отзыва? Это часто помогает отслеживать эти вещи. , , – mgilson

+0

'button = Button (root, text =" Clear ", command = delete (box))' - Я предполагаю, что функция 'delete' будет' '' '' 'в' tkinter', но это не так. Что вы ожидаете от 'delete'? – mgilson

+0

@mgilson delete - это предопределенная функция в виджете Canvas. –

ответ

1

Вот некоторые рабочий код, чтобы вы начали:

from Tkinter import * 
import Tkinter 
root = Tk() 

class PaintBox(Frame): 
    def __init__(self, root): 
     Frame.__init__(self, root) 
     self.pack(expand = YES, fill = BOTH) 
     self.master.title("Color Draw v0.2.63.23 open closed beta (Still in Alpha) greenlight edition") 
     self.master.geometry("600x600") 

     self.message = Label(self, text = "Drag the mouse SLOWLY to draw") 
     self.message.pack(side = TOP) 

     self.myCanvas = Canvas(self) 
     self.myCanvas.pack(expand = YES, fill = BOTH) 
     self.bd = (2) 

     self.myCanvas.bind("<B1-Motion>", self.paint) 
     button = Button(root, text = "Clear", command = self.delete) 
     button.pack() 


    def paint(self, event): 
     x1, y1 = (event.x - 4), (event.y - 4) 
     x2, y2 = (event.x + 4), (event.y + 4) 
     self.myCanvas.create_rectangle(x1, y1, x2, y2, fill = "black", tags="box") 


    def delete(self): 
     items = self.myCanvas.find_all() 
     for item in items: 
      self.myCanvas.delete(item) 

PaintBox(root).mainloop() 

Я пытался остаться верным исходного кода как можно больше.

Несколько вещей, чтобы заметить ...

  1. Я .pack кнопку, потому что с помощью .grid и .pack в том же виджет не работает.
  2. Я определил функцию delete, которая очищает сетку введенного поля. Я определил его в классе __init__.
  3. Должна быть функция command = .... Ваш исходный код попытался выполнить вызов функции в бит command = .... Это распространенная ошибка и приводит к выполнению функции при создании кнопки, а затем никогда больше. Я использовал связанный метод, потому что связанные методы получают self неявно.
Смежные вопросы