鱼C论坛

 找回密码
 立即注册
查看: 2131|回复: 5

[已解决]有关Tkinter Button用Bind绑定方法后报错的问题

[复制链接]
发表于 2020-8-3 22:38:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

背景是我在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'”

WeChat 圖片編輯_20200803222635.jpg

但是两个明明是一模一样的,而且在没有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 23:58:54


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


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

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

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


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-3 22:58:17 | 显示全部楼层
请发完整代码,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-3 23:58:54 | 显示全部楼层    本楼为最佳答案   


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


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

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

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


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 08:47:14 | 显示全部楼层
你没有发完整代码,甚至连框架都没发,只给了一个片段,只能大致的猜测了。
看这个片段,估计你的这些代码是写在类里面的吧。。
那么类的实例化成员函数应该有个参数self来代指实例化对象,而你的这三个函数中都没有self这个参数。。
此外DelPart函数是bind绑定函数,还需要一个参数event代指所绑定的事件,
这样的话,DelPart实际上最少需要两个参数,第一个参数是self代指实例化对象,第二个参数代指绑定的事件,而你只给了一个参数,那就被分配给了实例化对象,所以提示少一个event参数。

你试一下吧。你只给了片段,以上只是猜测,不知是否正确。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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应该就是鼠标左键的事件吧,这样设置我没大想通,还望再多解释一下,十分感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

实在抱歉,由于原代码过长就只截取了一部分,问题已经解决,也谢谢您的答案,我会再试一下您的思路。感谢感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-19 14:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表