2016-07-25 15 views
1

Funktion läuft tkinter friert. Ich möchte das Tkinter-Fenster verwenden, das diesen Prozess ausführt. Während der laufenden Fortschrittsbalken möchte ich tkinter window.but verwenden, aber ich kann nicht , weil es tkinter einfriert. wie kann ich Root-Fenster verwenden, während time.sleep (10) oder eine andere FunktionWie kann ich die Arbeit während tkinter

import tkinter.ttk as ttk 
import tkinter as tk 
import time 

progress = 0 


def loading(window=None): 
    mpb = ttk.Progressbar(window, orient="horizontal", length=200, mode="determinate") 
    mpb.place(y=0, x=0) 
    mpb["maximum"] = 100 
    mpb["value"] = progress 
    print(progress) 


def incrase(): 
    global progress 
    print(progress) 
    progress += 1 
    time.sleep(10) # for example, a function works here and tkinter freezes 
    loading()  # i don't want tkinter freezes 


root = tk.Tk() 
loading(root) 
ttk.Button(root, text='increase', command=incrase).place(x=0, y=25, width=90) 

root.mainloop() 

Dank für Antworten

Antwort

1

arbeiten, sollten Sie after() verwenden, mit denen Sie die loading() Funktion planen können, nachdem einige genannt werden Zeitspanne.

Programm

Hier ist, wie Sie es in Ihrem Programm verwenden können:

import tkinter.ttk as ttk 
import tkinter as tk 
import time 

progress = 0 


def loading(window): 
    mpb = ttk.Progressbar(window, orient="horizontal", length=200, mode="determinate") 
    mpb.place(y=0, x=0) 
    mpb["maximum"] = 100 
    mpb["value"] = progress 
    print(progress) 


def incrase(): 
    global root 
    global progress 
    print(progress) 
    progress += 1 
    root.after(10, loading(root)) # schedule loading() 



root = tk.Tk() 
loading(root) 
ttk.Button(root, text='increase', command=incrase).place(x=0, y=25, width=90) 

root.mainloop() 

Demo

Screenshot des oben laufenden Programms:

enter image description here