Alexyoung 发表于 2020-8-3 22:38:22

有关Tkinter Button用Bind绑定方法后报错的问题

各位大神好,我又来了= =

这次又有一件事要麻烦各位。

背景是我在Tkinter里面有两个按钮,加号可以新增一行,然后减号可以删除一行。

目前的问题是,以下图为例,新生成的2号减号按钮按下可以正常不报错,之前的1号减号按钮按下会报错说:

“Exception in Tkinter callback
Traceback (most recent call last):
File "E:\Python\lib\tkinter\__init__.py", line 1705, in __call__
    return self.func(*args)
TypeError: DelPart() missing 1 required positional argument: 'event'”



但是两个明明是一模一样的,而且在没有2号按钮的时候,1号按钮也是没问题的,故希望各位大神提供一些思路建议。
以下是这部分的代码,请各位不吝赐教,十分感谢!


def NewMetalPart():
                AddButton = Button(self.Frame2, text='+', width=1, command=AddPart)   #加行按钮,绑定了AddPart方法
                AddButton.grid(row=rownum, column=13)

                DelButton = Button(self.Frame2, text='-', width=1)   #删除按钮,绑定了DelPart方法
                DelButton.grid(row=rownum, column=12)
                DelButton.bind('<Button-1>', DelPart)
                #DelButtonGroup.append(DelButton)


                num += 1

def AddPart():

                AddButton.destroy()
                DelButton = Button(self.Frame2, text='-', width=1, command=DelPart)
                DelButton.grid(row=rownum, column=12)

                ButtonRowNum += 1

                NewMetalPart()                #添加新行的方法就是再重复一遍上面的方法
       
def DelPart(event):
                pass                                #为了测试和简单,直接写了pass




以上是我的问题和代码,困扰了我一整天,希望可以得到解决,十分感谢!

永恒的蓝色梦想 发表于 2020-8-3 22:58:17

请发完整代码,谢谢

Twilight6 发表于 2020-8-3 23:58:54



DelPart() missing 1 required positional argument: 'event'

这个报错就是告诉你 DelPart() 函数缺少一个必要参数 event

你去检查下DelPart() 是否加上了 event 呗,或者将 event 都设置个默认值为 None

比如 DelPart(event=None),应该就不会报错了


sunrise085 发表于 2020-8-4 08:47:14

你没有发完整代码,甚至连框架都没发,只给了一个片段,只能大致的猜测了。
看这个片段,估计你的这些代码是写在类里面的吧。。
那么类的实例化成员函数应该有个参数self来代指实例化对象,而你的这三个函数中都没有self这个参数。。
此外DelPart函数是bind绑定函数,还需要一个参数event代指所绑定的事件,
这样的话,DelPart实际上最少需要两个参数,第一个参数是self代指实例化对象,第二个参数代指绑定的事件,而你只给了一个参数,那就被分配给了实例化对象,所以提示少一个event参数。
你试一下吧。你只给了片段,以上只是猜测,不知是否正确。

Alexyoung 发表于 2020-8-4 13:05:20

Twilight6 发表于 2020-8-3 23:58
这个报错就是告诉你 DelPart() 函数缺少一个必要参数 event

你去检查下DelPart() 是否加上了 ev ...

由于本身代码很长就只截取了一部分,之后会上传全部代码,感谢您帮忙解决问题。
按照您说的方法问题已经解决,之前写的是DelPart(event),改为DelPart(event=None)就没问题了。
但还有一事想讨教,event=None相比直接传入event有什么分别吗,因为在这里这个event应该就是鼠标左键的事件吧,这样设置我没大想通,还望再多解释一下,十分感谢

Alexyoung 发表于 2020-8-4 13:06:05

sunrise085 发表于 2020-8-4 08:47
你没有发完整代码,甚至连框架都没发,只给了一个片段,只能大致的猜测了。
看这个片段,估计你的这些代码 ...

实在抱歉,由于原代码过长就只截取了一部分,问题已经解决,也谢谢您的答案,我会再试一下您的思路。感谢感谢
页: [1]
查看完整版本: 有关Tkinter Button用Bind绑定方法后报错的问题