Fortsetzung des Scripts

Fragen zu Tkinter.
Antworten
hypnoticum
User
Beiträge: 132
Registriert: Dienstag 15. März 2011, 15:43

Hallo Allerseits,
ich erzeuge in meinem Script eine Instanz eines zweiten Tkinter Fensters. Ich hatte erwartet, dass sobald das Fenster beendet wird auch die Ausführung im Script fortgesetzt wird.
Die zweite Ausgabe wird aber erst nach Beenden des ersten Fensters erzeugt.

Code: Alles auswählen

import Tkinter

class Command(object):
    def __init__(self):
        self.Dia = Tkinter.Toplevel()
        self.Dia.mainloop()
        
def RunTest():
    print"Start"
    ComDia = Command()
    print "Continued"
      
TestGUIMain = Tkinter.Tk()
TestGUIMain.RunBtn = Tkinter.Button(master = TestGUIMain,
                          text = 'Run',
                          command = RunTest)
TestGUIMain.RunBtn.grid()                 
TestGUIMain.mainloop()
Ich habe den Verdacht, dass auch bei meinen C-Extensions, die ich in einem anderen Programm zweimal aufrufe ein ähnlicher Fehler auftritt.

Vielen Dank schonmal
BlackJack

@hypnoticum: Lass mal den Aufruf der `mainloop()` von dem `Toplevel` weg. Wenn diese Hauptschleife läuft, kann ja die andere nicht laufen. Erst wenn *der* Aufruf zurück kehrt, läuft der Rest des Programms weiter.
hypnoticum
User
Beiträge: 132
Registriert: Dienstag 15. März 2011, 15:43

Danke! hatte dort vorher

self.Dia = Tkinter.Tk()

stehen. Deshalb meinte ich genauso ein

mainloop()

zu brauchen.
problembär

Das mußt Du mit ".wait_window()" machen, sonst kann Dir der Mainloop durcheinandergeraten. Z.B. so:

Code: Alles auswählen

#!/usr/bin/env python
# coding: iso-8859-1

import Tkinter

class Command:
    def __init__(self, master):
        self.master = master
        self.Dia = Tkinter.Toplevel()
        self.master.wait_window(self.Dia)
       
class TestGUIMain:
    def __init__(self):
        self.mw = Tkinter.Tk()
        self.RunBtn = Tkinter.Button(master = self.mw,
                                     text = 'Run',
                                     command = self.RunTest)
        self.RunBtn.grid()                
        self.mw.mainloop()

    def RunTest(self):
        print"Start"
        ComDia = Command(self.mw)
        print "Continued"
 
if __name__ == "__main__":
    TestGUIMain()
Gruß
Antworten