2010-11-08 14 views
2

J'ai essayé d'ouvrir plusieurs cadres par plusieurs threads. Voici mon code.Comment ouvrir plusieurs cadres via un fil dans tkinter?

''' 
This is the module for test and studying. 
Author:Roger 
Date: 2010/10/10 
Python version: 2.6.5 
''' 


import threading, Tkinter 


class Application(Tkinter.Frame): 
    def __init__(self, master=None): 
     Tkinter.Frame.__init__(self, master) 
     self.columnconfigure(50) 
     self.rowconfigure(50) 
     self.grid() 
     self.createWidgets() 
     self.mainloop() 

    def createWidgets(self): 
     self.quitButton = Tkinter.Button (self, text='Quit', command=self.quit) 
     self.quitButton.grid() 


class lab_404(threading.Thread): 
    ''' 
    Is this the doc_string of lab_404? 

    Can there be mutiple_window? 
    I do know why is it like this? 
    Why is the button still on the frame? 
    ''' 

    myWindow = None 

    def __init__(self, computer = 10, server = None, table = 1, chair = 1, student = 2, myWindow = None): 
     threading.Thread.__init__(self) 
     self.__computer = computer 
     self.__server = server 
     self.__table = table 
     self.__chair = chair 
     self.__student = student 
     self.myWindow = Application() 
     #self.myWindow.mainloop() #mainloop method is here, I don't where to put it. 

    def getComputer(self): 
     return self.__computer 

    def getServer(self): 
     return self.__server 

    def getMyWindow(self): 
     return self.myWindow 


    def setServer(self, Server): 
     self.__server = Server 


    def run(self): 
     print super(lab_404, self).getName(), 'This thread is starting now!' 
     print super(lab_404, self).getName(), 'This thread is ending.' 


if __name__ == '__main__': 
    for n in xrange(1, 10, 1): 
     tn = lab_404(server = n) #Try to make a loop. 
     tn.start() 

Le code ci-dessus a été exécuté en tant que trame, puis s'arrête (mainloop?). Il ne passera pas à l'image suivante jusqu'à ce que je ferme la fenêtre du formateur. C'est agité. Comment est-ce que je pourrais faire ouvrir de nouveaux cadres automatiquement?

Répondre

1

Je ne pense pas que vous puissiez faire ce que vous voulez. De manière générale, il n'est pas nécessaire d'exécuter plusieurs trames et plusieurs boucles d'événements. Vous pouvez avoir plusieurs images dans un seul thread et dans une seule boucle d'événement.