tkinter中使用bind事件信息,未进行bind事件,其中函数仍自行启动的解决方法

如标题所言,省流版请直接看标粗或者标红部分。

以下是具体解决过程:

在使用TK搭建UI界面的时候,突然脑洞大开想要使用bind函数,实现只有当鼠标左键双击按钮控件后,才运行按钮的响应事件,故原代码是这样写的:

"""

这是按钮响应事件
其中MyThread函数的功能是将某函数放入独立线程中运行
open_text函数的功能是打开固定路径下的文本文件,并将文本内容在窗口中显示

"""
def thread_text():
    MyThread(open_text())
"""

在后续代码中,设置了一个按钮控件
打算使用bind函数,实现鼠标左键双击按钮控件,运行thread_text函数

"""
button0 = tk.Button(window, image=button_photo0, bd=0, padx=10, pady=20,
                    activebackground='Silver')
button0.grid(row=0, column=0)
button0.bind("<Double-Button-1>", thread_text())

但出现了第一个问题,原本的设想是,鼠标左键双击按钮控件后,才运行thread_text函数,但不知为何,一旦运行代码,当UI界面一启动,即使我没有双击按钮,thread_text函数也自行启动了。

查阅了不少类似使用bind函数的代码后,发现无论是官方的实例代码还是其他大佬写的代码,他们的bind事件发生后要执行的函数,都不带后面的括号,只有一个函数名,故作出以下修改:

"""将thread_text()改成了thread_text"""
button0.bind("<Double-Button-1>", thread_text)

将修改后的代码运行后,thread_text函数终于不再自行启动,但双击按钮时,却报出以下错误:

既然说必须要设置一个输入参数,那就在thread_text函数里添加一个不使用的输入参数吧,如下:

"""

thread_text函数输入一个不使用的参数self
后续代码不作改变

"""
def thread_text(self):
    MyThread(open_text())

button0 = tk.Button(window, image=button_photo0, bd=0, padx=10, pady=20,
                    activebackground='Silver')
button0.grid(row=0, column=0)
button0.bind("<Double-Button-1>", thread_text)

成功实现功能。故解决方法如下:

1.bind事件执行后需调用的函数,只需输入函数名即可;

2.在调用函数里至少添加一个不使用的输入参数。

但以上解决方法只适用于调用函数本身不需要任何输入参数的情况,那如果bind事件执行后想要调用一个必须输入参数的函数呢?

答案是:定义一个不需要输入参数的新函数,把这个需要输入参数的函数包进去呗。

我的代码里就是那么解决的,如下:

"""

最原本的想法里,当bind事件发生后,直接调用MyThrad函数

"""
button0 = tk.Button(window, image=button_photo0, bd=0, padx=10, pady=20,
                    activebackground='Silver')
button0.grid(row=0, column=0)
button0.bind("<Double-Button-1>",  MyThread(open_text()))


"""

但发生了如标题所言的问题,为了保证功能实现
只好再套一层不需要输入参数的函数喽

"""
def thread_text(self):
    MyThread(open_text())

button0 = tk.Button(window, image=button_photo0, bd=0, padx=10, pady=20,
                    activebackground='Silver')
button0.grid(row=0, column=0)
button0.bind("<Double-Button-1>", thread_text)

  • 11
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值