2016-03-03 55 views
0

我想創建一個簡單的繪圖程序,通過刪除所有形狀清除畫布的按鈕,但是我試圖使用內置到tkinter中的delete()命令,但當我嘗試運行它時,它說刪除沒有定義。「我做錯了什麼?Tkinter名稱「刪除」未定義

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

'按鈕=按鈕(根,文本=「清除」,命令=刪除(盒))' - 我假設你希望'刪除'是'tkinter'中的函數,但事實並非如此。你期望'刪除'做什麼? – 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