在python中创建延迟进程

2024-03-28 17:45:02 发布

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

使用tkinter,我希望创建一个按钮,当按下它时,它会在x秒内延迟切换。你知道吗

使用时间。睡眠(x) ,暂停整个程序,这不是我的本意。你知道吗

怎么做?你知道吗

followed-class of the“button”(有一个checkbutton小部件,一个labelwidget显示on/off label,还有一个entry小部件输入延迟秒数)

class dev_buttons2(object):
  def __init__(self,master,buts_list):
    self.status=[]
    self.buts=[]
    self.leds=[]
    for i in range(len(buts_list)):
        var = StringVar()
        c = Checkbutton(master,text=buts_list[i], variable=var,
        indicatoron=0,command=lambda arg=[buts_list[i],var]: 
        self.cb(arg),width=10,height=2,onvalue="on",offvalue="off")
        c.grid(column=i, padx=30,pady=5,row = 1)
        var.set("off")

        var1=IntVar()
        ent=Entry(master,textvariable=var1,width=4)
        ent.grid(column=i,row=2)

        var2=StringVar()
        led=Label(master,textvariable=var2,width=4,bg="red",fg="white",
        relief="ridge")
        var2.set("off")
        led.grid(row=0,column=i)

        self.status.append([var,var2,var1])           
        self.buts.append(c)
        self.leds.append(led)

  def cb(self,but):
    indx=devices_headers.index(but[0])
    if but[1].get()=="on":
        self.status[indx][1].set(but[1].get())
        self.leds[indx].config(bg="green")
        if self.status[indx][2].get() !=0:
            print(self.status[indx][2].get() )

    if but[1].get()=="off":
        self.status[indx][1].set(but[1].get())
        self.leds[indx].config(bg="red")

尝试更新cb函数-获取延迟,但没有延迟:

def cb(self,but):
    print(but[2].get())   ###(but[2] contains var1.get() -- timeout for opretion
    indx=devices_headers.index(but[0])
    device_chage_state(indx,but[1].get())
    if but[2].get() >0 :
        print ("switch off in %d seconds"%self.status[indx][2].get())
        root.after(but[2].get(),self.cb,but)

GUI中相关部分的图片显示每个按钮都有一个超时输入,输入时(大于0)将在输入秒数后关闭 Manual switch pannel description


Tags: selfmastergetvarstatuslistbutcb
1条回答
网友
1楼 · 发布于 2024-03-28 17:45:02

既然您使用的是tkinter,那么最好的方法就是使用^{} method。例如,可以添加如下方法:

def cb_delayed(self, master, but, delay_ms_var):
    master.after(delay_ms_var.get(), self.cb, but)

然后在按钮创建更改中:

# ...
c = Checkbutton(
    master, text=buts_list[i], variable=var, indicatoron=0,
    command=lambda arg=[buts_list[i],var]: self.cb_delayed(master, arg, delay_ms_var),
    width=10, height=2, onvalue="on", offvalue="off")
# ...

其中delay_ms_var是tkinter变量对象,它包含您希望在更改发生之前具有的以毫秒为单位的延迟。你知道吗

相关问题 更多 >