Python/CTkinter:按钮数组右键点击绑定失效问题求助
问题根源及修复方案
事件绑定参数不匹配
Tkinter事件绑定的回调函数默认会接收一个event对象作为参数,你的lambda表达式没有处理这个参数,导致函数调用失败。同时需要用add="+"确保自定义绑定与组件默认事件处理共存,避免被覆盖。CTkButton内部组件拦截事件
CustomTkinter的CTkButton基于Canvas绘制,右键事件可能被内部Canvas组件拦截,必要时可直接绑定到内部Canvas上。颜色校验逻辑漏洞
原_paste_colour函数中,颜色格式错误时仍会执行后续设置操作,需添加返回逻辑终止错误流程。
修改后的代码片段
事件绑定部分
# 修正后的右键绑定:接收event参数,添加add="+"确保绑定叠加 self.widgets[key]['widget'].bind("<Button-3>", lambda event, widget_property=key: self._paste_colour(widget_property), add="+") # 如果上述绑定仍不生效,尝试直接绑定到CTkButton的内部Canvas组件 # self.widgets[key]['widget']._canvas.bind("<Button-3>", # lambda event, widget_property=key: self._paste_colour(widget_property), # add="+")
_paste_colour函数修正
def _paste_colour(self, widget_property): print('PASTE COLOUR!') new_colour = pyperclip.paste() # 增加#前缀校验,格式错误时直接返回 if len(new_colour) != 7 or not new_colour.startswith('#'): self._status_bar.set_status_text(status_text='Attempt to paste a bad colour code - ignored.') return self._set_widget_colour(widget_property=widget_property, new_colour=new_colour) self._status_bar.set_status_text( status_text=f'Colour {new_colour} assigned to widget property {widget_property}.')
内容的提问来源于stack exchange,提问作者avalon20
相关产品推荐
相关产品推荐

