popup boxen

Fragen zu Tkinter.
Antworten
mkdigital

Dienstag 23. August 2005, 07:08

hi!

wie kann ich mit Tkinter MEHRERE message boxen aufmachen?
problem: eine geht wunderbar mit "easygui" oder auch manuelles zusammenbauen einer Frame

aber bei mehreren gelingt das einfach nicht, auch nicht wenn jedes in einem eigenen thread ist, zb:

thread.start_new_thread(msgbox,("test",))

wobei msgbox eine methode von "easygui" ist. setzt man diesen befehlt mehrmals ab, so erhält man zwar mehrere symbole in der taskleiste, aber sie reagieren nicht. 1x funktionert es gut, aber ich brauche mehrere fenster.

mfg
BlackJack

Dienstag 23. August 2005, 22:11

Zu Easygui speziell kann ich jetzt nichts sagen, aber bei GUI Toolkits im allgemeinen gilt: die GUI immer nur von einem Thread aus ansprechen.
mkdigital

Mittwoch 24. August 2005, 15:28

das ist mir aber nicht möglich

es ist so: ich hab ein socket dass afu port X lauscht. wenn eine best. meldung kommt, soll es ein popup geben. und da es ein paraleller server sein muss, gibt es für jede anfrage einen thread.

ausserdem blockt das gui element ja wenn es angezeigt wird, wie soll ich dann mehrere anzeigen?
ProgChild
User
Beiträge: 210
Registriert: Samstag 9. April 2005, 10:58
Kontaktdaten:

Mittwoch 24. August 2005, 22:01

mkdigital hat geschrieben:ausserdem blockt das gui element ja wenn es angezeigt wird, wie soll ich dann mehrere anzeigen?
Das ist ja gerade der Sinn von EasyGUI, dass es auf die Eingabe vom Benutzer wartet. Du musst, wenn du mehrere Fenster anzeigen willst, warscheinlich auf das richtige tkIter zurückgreifen.
BlackJack

Mittwoch 24. August 2005, 22:16

mkdigital hat geschrieben:es ist so: ich hab ein socket dass afu port X lauscht. wenn eine best. meldung kommt, soll es ein popup geben. und da es ein paraleller server sein muss, gibt es für jede anfrage einen thread.
Das löst man dann normalerweise damit, dass die "Arbeiter" Threads dem GUI Thread sagen, dass er ein Fenster aufmachen soll. Bei Tkinter kann man diese Benachrichtigung beispielsweise über eigene Events machen, oder etwas GUI-Toolkit-neutraler, mit einer `Queue` aus dem gleichnamigen Modul.
Antworten