Seite 1 von 1

Aktives Fenster festlegen

Verfasst: Donnerstag 23. März 2006, 20:09
von Albatros16
Hallo,
vielleicht kann mir jemand helfen.
Ich habe drei Fenster erzeugt:
Hauptfenster = Tk()
Fenster2 = Toplevel()
Fenster3 = Toplevel()
Wie erreiche ich, dass nach dem Start ein ganz bestimmtes Fenster aktiv ist (ohne dass man das Fenster anklicken muss).
Herzlichen Dank

Edit (Leonidas): Thread in Tkinter-Forum verschoben.

Verfasst: Donnerstag 23. März 2006, 20:34
von mawe
Hi!

Versuch mal z.B. Fenster2.focus_set().

Gruß, mawe

Verfasst: Freitag 24. März 2006, 13:16
von Hannes-Spz
servus!

wie wärs denn mal mit mein_widget.focus_force()?
damit wird der focus wort-wörtlich erzwungen...
total praktisch, wenn man etwas machen mag, wo immer ein fenster im
vordergrund stehen soll...
zb:
eine uhr...
immer wenn der wecker abgelaufen ist, soll nicht nur irgendetwas ausgeführt werden,
sondern auch der ganze bildschirm mit dem Tk() ausgefüllt werden (vollbild)
also am ende der funktion einfach root.focus_force() machen und schon ist
dies fenster im vordergrund...
(focus_set finde ich schlecht, weil man doch - glaub ich - ein arg angeben muss!)
my tip: mit Alt+m in der idle "Tkinter" öffnen und nach "def focus_" suchen, wird lustig.

(PS: übrigens bringt es dir GAR nichts, wenn du einfach NUR =Toplevel() hinschreibst...
wenn dann kannst du doch auch =Tk() benutzen oder schreibst =Toplevel(root), das macht mehr sinn :wink:
)

also:

Verfasst: Freitag 24. März 2006, 19:32
von mawe
Hannes-Spz hat geschrieben:wenn dann kannst du doch auch =Tk() benutzen
Mehrmals Tk() aufrufen, und Du kommst in Teufels Küche (siehe idle) :)
Hannes-Spz hat geschrieben:oder schreibst =Toplevel(root), das macht mehr sinn
Warum macht das mehr Sinn?

Verfasst: Samstag 25. März 2006, 13:59
von Hannes-Spz
@mave:
ob es SINN macht, ist sowieso immer eine andere frage :wink:

aber nein:
hast du schonmal das ausprobiert?:

Code: Alles auswählen

from Tkinter import *
l = Label(text = "hallo") # beachte: KEIN master angegeben!!
l.pack()
mainloop()
dann wirst du feststellen, dass du trotzdem ein lustiges fensterchen erhälst, wo drüber
"Tk" steht, und das zeigt mir jedenfalls, dass doch mindestens einmal
...=Tk()
aufgerufen wurde
wenn du in der Tkinter mal alle wege verfolgst, wirst du merken, dass er immer, wenn er
keinen master hat, sich einen neuen erschafft...!

der clou kommt nun:
wenn du die Toplevel() ohne master angibst, erschafft er sich einen neuen
meister/ ein neues Tk()-fenster eigens dafür!

-> zweck verfehlt, da die Toplevel() dann keine "ECHTEN" toplevel von
root wären!!
soll heißen, du kannst root schließen, ohne dass sich die toplevel auch vom acker machen :wink:

probiers aus! (und sag mir bescheid, wenn ich mich irre :D )

ansosnsten:

Verfasst: Samstag 25. März 2006, 21:56
von mawe
Hi!
Hannes-Spz hat geschrieben:soll heißen, du kannst root schließen, ohne dass sich die toplevel auch vom acker machen Wink

probiers aus! (und sag mir bescheid, wenn ich mich irre)
Dann darf ich Dir jetzt mitteilen dass Du dich irrst :D
Naja, jedenfalls denke ich das. Bei folgendem Code

Code: Alles auswählen

from Tkinter import *

root = Tk()
root.title("root")
t1 = Toplevel()
t1.title("zwei")
t2 = Toplevel()
t2.title("drei")
mainloop()
kann ich die Toplevel einzeln löschen. Wenn ich das root-Window lösche, sind auch die Toplevel weg. Widerlegt das Deine Theorie? Bin mir nicht sicher, bin schon sehr müde :)

PS: Was ich auch komisch finde: Wenn ich nur dem root einen Titel verpasse haben die Toplevel automatisch den selben Titel.

Gruß, mawe

Verfasst: Samstag 25. März 2006, 23:18
von Hannes-Spz
nun gut, nun gut... du hast gewonnen, aber auch nur insofern, dass ich meine "THEORIE"
einschränken muss!
durch etliches herum-testen bin ich zu dem schluss gekommen, dass er immer das erste Tk()-fenster als root nimmt, das er finden kann!
ich hab mal was von ner liste gehört, wo alle masterlies hereingespeichert
werden, bin mir aber grad nicht sicher, ob das für hier gilt :roll:

ich werd morgen aber nochmal nachschauen..! *bei-python-referenz-schwör* :D