[python-users] Tkinterprobleme

Thomas Lenarz tommesml at netcologne.de
So Apr 22 09:12:24 CEST 2007


Thomas.Siegler at sew-eurodrive. schrieb:

> ich nehm Blumen statt Tomaten ;-)
Vielen lieben Dank :-)

prof. dr. peter ziese schrieb:

> danke für Deine Ausführungen. Dazu kann ich folgendes sagen: Unter WIndows und 
> zwar mit Vb, C# als auch Delphi funktioniert das so, wie ich es versucht 
> habe. Auch unter Linux mit Kylix funktioniert es. Unter Java ebenfalls. 
Zu Delphi/Kylix, VB und .NET, C# kann ich leider nichts sagen. Da fehlen mir die 
Kenntnisse :-(

Bei Java ist es so, dass automatisch eine Nachrichten-Verarbeitungsschleife (Event-
Dispatch-Loop) in einem separaten Thread ausgeführt wird (Kann man im Debugger 
beobachten.) Ich weiss nicht genau, wer diesen Thread wie startet, glaube aber nach einem 
Blick in die Sourcen ableiten zu können, dass bei jedem Ereignis ( postEvent() ) geprüft 
wird, ob schon ein EventDispatchThread eingerichtet ist. Wenn nicht, wird er gestartet. Der 
Thread und damit die Nachrichtenverarbeitung ist also ab dem Zeitpunkt verfügbar, an dem 
der erste wie auch immer geartete GUI-Aufruf zum Senden eines Ereignisses geführt hat.

Das Verhalten in Java ist also im Prinzip die erste Lösung (Threads) aus Michaels Beitrag. 
Mit dem Unterschied, dass das AWT (Abstract Window Toolkit) dort das Starten des 
Threads automatisch übernimmt.

Bei allen GUI-Toolkits mit Python-Bindings scheint die DispatchLoop "offiziell" aufgerufen 
werden zu müssen (habe selbst bisher aber nur mit Tkinter und wxPython experimentiert.)

Aus dem Internet:

wxPython:

import wx
app = wx.PySimpleApp()
frame = wx.Frame(None, wx.ID_ANY, "Hello World")
frame.Show(True)
app.MainLoop()

pyGTK:

   73       def main(self):
   74           # All PyGTK applications must have a gtk.main(). Control ends here
   75           # and waits for an event to occur (like a key press or mouse event).
   76           gtk.main()

pyQT:

app=QApplication(sys.argv)                                 
button=QPushButton("Hello World", None)                   
app.setMainWidget(button)         
button.show()                       
app.exec_loop()                     

Viele Grüße
Tommes

-- 
mailto:Thomas.Lenarz at netcologne.de
mailto:Thomas.Lenarz at koeln.de






Mehr Informationen über die Mailingliste python-users