Tkinter调用waterupdater方法出现TypeError参数不匹配报错求解
报错原因
调用after方法时额外传入了watercount + 1作为waterupdater的调用参数,但定义的waterupdater没有设置形参接收该值,因此第一次在main中的无参调用可以正常执行,1秒后after触发回调传入参数时就会抛出参数不匹配的错误。
解决方案
提供两种修改方式,任选其一即可:
方案1:移除after的多余传参(适配现有全局变量逻辑)
你已经通过全局变量watercount管理计数,不需要通过after传参,直接在函数内部修改全局变量即可,修改后的waterupdater代码如下:
#called in main() to update water count every second def waterupdater(): #2700000 global watercount waterlabel.config(text = watercount) watercount += 1 waterlabel.after(1000, waterupdater) print(watercount)
该方案无需改动其他代码,修改后即可实现每秒自动更新水量计数、同步刷新按钮文本的需求,点击按钮扣减水量的逻辑也能正常运行。
方案2:给waterupdater添加形参接收值
如果要保留after传参的写法,给函数新增形参,同时对齐全局变量逻辑即可:
# 新增形参接收after传入的新计数值 def waterupdater(new_count): #2700000 global watercount watercount = new_count waterlabel.config(text = watercount) waterlabel.after(1000, waterupdater, watercount + 1) print(watercount)
使用该方案需要同步修改main函数中的调用语句,传入初始计数值:
def main(): waterupdater(watercount) mainloop()
内容的提问来源于stack exchange,提问作者DotDotDOt
相关产品推荐
相关产品推荐

