Fokus

Fragen zu Tkinter.
Antworten
kosche

hallo leute,
ich mal wieder. ich wollte mal fragen, wie ich den fokus festsetze? also folgendes: ich habe ein fenster A. in diesem fenster A habe ich die möglichkeit noch ein fenster B zu öffnen. wenn ich das getan habe, soll man nichts im fenster A machen können, solange bis ich das fenster B wieder geschlossen habe.

focus_set() - setzt nur den fokus, macht ihn aber nicht fest
focus_force() - keine ahnung, aber fest wird er auch nicht

mfg
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

dann ist das nicht nur ein Problem des Fokuses, sondern auch ob das fester disabled ist, oder nicht.

Also mal genauer (da ich wieder mal kein Code hab, beschreib ich nur mal wie das mit Tkinter wäre): wenn du das neue Fenster öffnest gibst du ihm mit fokus_set den Fokus. Dann nimmst du das erste Fenster und machst A["state"]=DISABLED. DISABLED ist eine Konstante aus Tkconstants. Dann kannst du da nichts mehr machen. Dann musst du nur noch, wenn B geschlossen wird ne Funktion rufen lassen die A wieder aktiv macht, also A["state"]=ACTIVE. auch ACTIVE ist so eine Konstante aus Tkconstants. Ich hoff mal, dass das nicht zu theoretisch war und du mir folgen konntest.
kosche

Code: Alles auswählen

from Tkinter import *
from Tkconstants import *

wm = Tk()
def fenster():
    wm["state"]="disabled"
    fens = Toplevel()
    b2 = Button(fens, text="Fenster zu")
    b2.pack()
    fens.mainloop()
b1 = Button(wm, text="Fenster auf", command=fenster)
b1.pack()
wm.mainloop()
wenn ich das state argument so einbaue, dann kommt folgende fehlermeldung:
TclError: unknown option "-state"

wo liegt der fehler?

mfg
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

hmm... hab das noch nie für Toplevels probiert gehabt, nur für Buttons. mit denen klappts auch, hab an deinem Beispiel mal nen bissel rumgewerkelt und dann gings mit dem Button. Ich hab gedacht das wär für alle Widgets so, da sie ja alle ne gemeinsame Urklasse haben, scheint aber nich so zu sein. Sorry.
kosche

hey leute,
ich habe die lösung und will euch daran teil haben lassen:

Code: Alles auswählen

wm = Tk()
def fenster():
    fens = Toplevel()
    b2 = Button(fens, text="Fenster zu",command=fens.destroy)
    b2.pack()
    fens.grab_set()
    fens.focus_set()
    fens.wait_window()
    fens.mainloop()
b1 = Button(wm, text="Fenster auf", command=fenster)
b1.pack()
wm.mainloop()
den entscheiden punkt hier setzt aber wait_window(). mit dieser fkt. sagt man dem fenster, dass es erst verlassen werden kann, wenn man es zerstört. wichtig!

manchmal ist es so einfach :D
mfg
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

Sorry wenn ich mich einmische, obwohl ich (noch) keine Ahnung von TKinter habe. Die Aufgabe war glaube ich, ein modales Fenster zu öffnen. Diese Fenster sind eindeutig nicht modal.

Ich kann die Fenster nach belieben aktivieren (darf dabei nur eben nicht auf den Button Fenster schließen kommen.

Wo gibt's für TKinter eine Onlinedoku (notfalls auch in Neudeutsch)?

Hans
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

OK, die Onlinedoku habe ich gefunden http://www.python.org/doc/current/lib/m ... inter.html. 8)

was will uns die Doku http://www.pythonware.com/library/tkint ... ethods.htm sagen?

Code: Alles auswählen

focusmodel
focusmodel(model), focusmodel(). Set (get) the focus model.
Was meinen die mit model? Bisschen knapp geahlten, aber mein Bauch sagt mir, das könnte es sein.

Hans
kosche

hallo leute,
ich finde es schon ganz schön anmaßend, was zu kritisieren, wenn ich keine ahnung habe und es noch nicht einmal getestet habe.
ich dachte schon, ich habe schrott ins forum geschrieben. dem ist aber nicht so. ich habe das programm noch mal getestet und es macht genau das, was es soll. ich habe mein hauptfenster. aus diesem heraus kann ich ein toplevelfenster öffnen. wenn dies erscheint, kann man nicht ins hauptfenster zurück, bis man es zerstört.
es passiert also genau das, was ich gesucht habe. und daß das modal ist, darüber brauchen wir glaube ich, nicht zu streiten.

mfg
piddon
Gründer
Beiträge: 410
Registriert: Dienstag 30. Juli 2002, 18:03
Wohnort: Oestrich-Winkel
Kontaktdaten:

Ganz ruhig Leute.

Bisher hat hier jeder jedem geholfen, und ich habe hier noch nichts über "schlechtmachen" anderer gelesen.

Doch trotzdem, muss ich die Leute bitten, vorsichtig zu sein, was sie Schreiben, denn im Text kann vieles Missverstanden werden, da die Mimik und Gestik eines persönlichen Gespräches nicht vorhanden ist. Benutzt dann doch mal ein :) oder ;) oder so, das lockert ungemein auf, und man versteht wie was gemeint sein könnte.
irc: #python.de @ irc.freenode.net | [url=http://pythonwiki.pocoo.org]python-wiki[/url] | [url=http://www.pythonwiki.de/PythonDeForum/Faq]python-forum FAQ[/url]
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

Hi kosche,

ich fühle mich eigentlich noch genauso als newbie wie du. Also niedermachen, schlechtmachen, abkanzeln, ..... war alles nicht meine Absicht. Wollte eigentlich nur mitteilen, wie es bei mir lief.

Mal einen allgemeinen Hinweis an das ganze Forum: Ich glaube es ist angebracht, dass grundsätzlich ein Hinweis auf das verwendete OS gegben werden sollte. Ich vermute, da gibt es mehr Differenzen in Python, als uns lieb ist.

Also auf meinem LINUX Servverchen habe ich folgen Coode ausgeführt:

Code: Alles auswählen

from Tkinter import *
from Tkconstants import *

wm = Tk()
def fenster():
    fens = Toplevel()
    b2 = Button(fens, text="Fenster zu",command=fens.destroy)
    b2.pack()
    fens.grab_set()
    fens.focus_set()
    fens.wait_window()
    fens.mainloop()
b1 = Button(wm, text="Fenster auf", command=fenster)
b1.pack()
wm.mainloop()
Ich kann das Kindfenster aufmachen, aber ich kann auch das Kindfenster verlassen und in das Hauptfenster zurückkehren ohne ds Kindfenster zu schließen siehe Bild.
Bild
Das Fenster mit dem Blauen Rahmen hat den Fokus

Hans
kosche

daran habe ich auch erst gedacht als, ich schon meinen beitrag geleistet hatte. :lol:

ich hatte es unter win98 und unter win nt gebaut. mich würde mal interessieren, ob du viele neue fenster erzeugen konntest, oder ob du nur den fokus darauf lenken konntest?

mfg

p.s. @hans: ich hatte endlich mein problem gelöst und war deshalb ein bisschen angefressen, weil ich eben dachte, du machst die sache schlecht. war wohl ein missverständnis. ich denke piddon hat recht und man sollte öfter mal ein smiley setzen. :twisted:
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

Also aufmachen kann ich nur ein Fenster. Also unter Windows sind modale Fenster eigentlich üblich, z. B. bei Fehlerbehandlung. Das sind diese Fenster die nichts anderes zulassen, als das man sie erst schließen muß, bevor es weitergeht. Auch in ein anderes Prog wechseln geht nicht.


P.S. Mag sein das mein Ton vieleicht etwas grantelig war. Aber wenn mir etwas wirklich missfällt, sage ich es eigentlich deutlich (aber hoffentlich trotzdem noch in einer vernünftigen Tonart). :roll:

Hans
Antworten