1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| # -*- coding: utf-8 -*-
from sys import version_info
if version_info[0] == 2:
import Tkinter as tkinter
import ttk as ttk
else:
from tkinter import ttk
import tkinter
import time, threading
class Centremoi():
# Pour centrer Tk et Toplevels.
def __init__(self, monwidget):
monwidget.update_idletasks()
monwidget.geometry("%dx%d+%d+%d" % (monwidget.winfo_reqwidth(),monwidget.winfo_reqheight(), (monwidget.winfo_screenwidth()-monwidget.winfo_reqwidth())/2, (monwidget.winfo_screenheight()-monwidget.winfo_reqheight())/2 ) )
monwidget.resizable(width=False, height=False)
class Monthread (threading.Thread):
def __init__(self, win):
threading.Thread.__init__(self)
self.win=win # je mémorise une référence pour la fenêtre
def run(self):
time.sleep(3)
resultat="toutes mes donnees"
thread_resultat.append(resultat)
self.win.event_generate("<<treadFini>>")
class MaFenetre(tkinter.Tk):
def __init__(self,parent):
""" fenetre principale"""
tkinter.Tk.__init__(self, parent)
self.withdraw()
self.parent = parent
#self.protocol("WM_DELETE_WINDOW", self.Intercepte)
#self.geometry("400x200+200+200")
self.text1=tkinter.Text(self, width=33)
self.text1.pack()
Centremoi(self)
self.bind("<<treadFini>>", self.treadFini)
self.deiconify()
self.ouvrirProgressBar()
self.lance_thread()
def ouvrirProgressBar(self):
""" fenetre secondaire (ProgressBarr)"""
self.f2=tkinter.Toplevel()
self.f2.withdraw()
self.f2.transient()
self.f2.title("fenetre ProgressBar")
# progressBar :
self.pbar = ttk.Progressbar(self.f2, mode='indeterminate' ,length=300)
self.pbar.pack()
Centremoi(self.f2)
self.f2.deiconify()
self.pbar.start()
def lance_thread(self):
""" Dans le script final, cette méthode lancera 3 threads de cette manière."""
m=Monthread(self)
m.start()
def treadFini(self, event=None):
texte=thread_resultat[0]
self.text1.insert('1.0', texte)
self.f2.geometry("10x10") # Pourquoi puisque il y a destroy juste apres ?
self.f2.destroy()
if __name__=='__main__':
fen=MaFenetre(None)
fen.title("fenetre principale")
thread_resultat=[]
fen.mainloop() |
Partager