如何在Python2.7中添加去边界按钮

2024-06-16 15:07:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经创建了一个按钮。我想,如果有人重复点击它将只执行一次。我禁用了按钮3秒钟,但当按钮正常时,它会执行每次点击的顺序。我希望在禁用状态下,单击将被忽略。怎么做

from Tkinter import *
import Tkinter,MySQLdb,tkFont,datetime,time,tkMessageBox,socket,os
from datetime import datetime 
class Reception_Qm(Tkinter.Tk):
    def __init__(self,parent):
        Tkinter.Tk.__init__(self,parent)
        self.parent = parent
        self.initialize()
    def initialize(self):
        self.grid()
        self.button1 = Tkinter.Button(self, text = my_button,bg="blue",activebackground="yellow",\
                             width=18,font=('Sans','30','bold'),relief=RIDGE,\
                             command = lambda: self.print_token('hello'),fg="white",height=1)
        self.button1.grid(column=0,row=0,sticky='NSEW')

    def print_token(self,catagory):
        print "hello"
        self.button1.flash()
        self.button1.config(state=DISABLED)
        time.sleep(3)
        self.button1.config(state=NORMAL)
if __name__ == "__main__":
    window = Reception_Qm(None)
    window.title("Test App")
    window.mainloop()

如果按钮在禁用状态下也被按下,当按钮进入正常状态时,它将进入打印令牌功能。我只想忽略点击。我想忽略持续时间小于3秒的点击


Tags: fromimportselfdatetimetimetkinter状态def
1条回答
网友
1楼 · 发布于 2024-06-16 15:07:32

你不能在事件处理程序中间做这样的time.sleep。如果你这样做了,你就不会回到主循环,这意味着tkinter不能处理任何事件,甚至你的按钮禁用事件

当然,当您最终返回时,tkinter可以开始处理一些事情,但是在那一点上,它有一个按钮enable,在按钮disable之后立即排队,所以按钮只被禁用了很小的一小部分时间


您需要做的是将函数的后半部分拆分为一个单独的函数,让tkinter在3秒内为您运行该函数,然后立即返回:

def print_token(self,catagory):
    print "hello"
    self.button1.flash()
    self.button1.config(state=DISABLED)
    self.after(3000, lambda: self.button1.config(state=NORMAL))

相关问题 更多 >