2017-01-07 3 views
0

Я хотел бы реализовать функцию, которая при нажатии кнопки, связанная функция будет выполняться по периоду. Как я могу это сделать? Я пишу код следующим образом. Я предлагаю при нажатии кнопки «начать», тогда функция извлечения будет выполняться по периоду. Я в то время как Правда, чтобы сделать это, но функция мертвыхtkinter после использования метода в Button

def fetch(ent,t):  
    i=0  
    w3username=ent[0].get()+'\n'  
    info.append(w3username)  
    w3passwd=ent[1].get()+'\n'  
    info.append(w3passwd)  
    emailname=ent[2].get()+'\n'  
    info.append(emailname)  
    emailpasswd=ent[3].get()+'\n'  
    info.append(emailpasswd) 

    for i in info:  
     t.insert(END,i) 

def makeframe(root,fields):  
    entry=[]  
    variables=[] 

    for field in fields:  
     row=Frame(root)  
     lab=Label(row,width=10,text=field)  
     ent=Entry(row)  
     row.pack(side=TOP,fill=X)  
     lab.pack(side=LEFT)  
     ent.pack(side=RIGHT,expand=YES,fill=X)  
     var=StringVar()  
     var.set('enter here')  
     ent.configure(textvariable=var)  
     variables.append(var) 
    return variables 


if __name__=='__main__': 

    info=[]  
    root=Tk()  
    root.title('iCare tool')  
    fileds=['w3username','w3passwd','emailuser','emailpasswd']  
    entry=makeframe(root,fileds)  
    t=Text(root)  
    Button(root,text='begin',command=(lambda:fetch(entry,t))).pack(side=LEFT,expand=YES,fill=X)  
    t.pack(side=BOTTOM) 

    root.mainloop() 

Я также использую after метод, но до сих пор не работал

b = Button(root, text='begin', command=(lambda:fetch(entry,t)))  
b.after(1000, fetch, entry, t)  
b.pack() 
+0

редактировать вопрос и с помощью кнопки '{}' правильно форматировать код - теперь он не читается. – furas

+0

назначьте функцию кнопки и внутри этой функции используйте 'root.after()' – furas

+0

пробелы после запятой и aroudn '=' (кроме случаев, когда вы назначаете аргументы внутри '()', чтобы сделать код более читаемым. – furas

ответ

1

after выполняет функцию только один раз. Вы должны использовать after внутри fetch()

def fetch(ent, t): 

    # ... your code ... 

    # run again after 1000ms 
    root.after(1000, fetch, ent, t) 
Смежные вопросы