Seite 1 von 1

Fortsetzung des Scripts

Verfasst: Dienstag 15. März 2011, 16:12
von hypnoticum
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

Re: Fortsetzung des Scripts

Verfasst: Dienstag 15. März 2011, 16:53
von 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.

Re: Fortsetzung des Scripts

Verfasst: Dienstag 15. März 2011, 18:00
von hypnoticum
Danke! hatte dort vorher

self.Dia = Tkinter.Tk()

stehen. Deshalb meinte ich genauso ein

mainloop()

zu brauchen.

Re: Fortsetzung des Scripts

Verfasst: Dienstag 15. März 2011, 18:06
von 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ß