Tkinter名称“delete”未定义

2024-04-27 02:28:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个简单的绘图程序,该程序有一个按钮,通过删除画布上的所有形状来清除画布,但是我尝试使用tkinter中内置的delete()命令,但是当我尝试运行它时,它说delete没有被定义。`我做错什么了?在

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:

^{pr2}$

Tags: importself程序eventinittkinterdef画布
1条回答
网友
1楼 · 发布于 2024-04-27 02:28:35

以下是一些可以帮助您入门的代码:

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和{}无法工作。在
  2. 我定义了一个delete函数,用于清除输入框的网格。我在类的__init__中定义了它。在
  3. command = ...应该是一个函数。原始代码试图在command = ...位进行函数调用。这是一个常见的错误,会导致在创建按钮时执行函数,然后再也不会执行。我使用绑定方法是因为绑定方法get self是隐式传递的。在

相关问题 更多 >