2 Fenster, aber nur 1 darf bearbeitet werden

Fragen zu Tkinter.
Antworten
Tux
User
Beiträge: 70
Registriert: Freitag 8. November 2002, 23:07
Kontaktdaten:

Hi @ll!

Wie immer bin ich im Tkinter!

Ich habe folgendes Problem (vereinfacht):

Ich habe ein Fenster mit einem Button! Sobald man auf diesen Button klickt, soll ein neues Fenster geöffnet werden! Wenn das neue Fenster geöffnet wurde, soll man nur auf dieses zugreifen können - das 1. Fenster darf nichts mehr machen! Im 2. Fenster soll wieder ein Button sein - klickt man auf diesen, so soll sich dieses 2. Fenster schließen und die im Fenster 1 wieder alles funktionieren! Wie geht das?

Ich hoffe iihr versteht mich!

Danke schon mal
ICH
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

Hi Tux, sieht nicht gut aus. Daran haben wir uns schon mal die Zähne ausgebissen. Siehe hier http://python.sandtner.net/viewtopic.php?t=196

Bei deinem Namen könnte man doch eigentlich eher erwarten, dass du QT einsetzt. :wink:

Hans
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Hallo!

Also, wenn ich das richtig sehe, willst Du einen sog. 'modalen Dialog'. Sowas geht mit Tkinter natürlich auch, am einfachsten wohl mit der Klasse tkSimpleDialog.Dialog.
Kleines Beispiel:

Code: Alles auswählen

from Tkinter import *
import tkSimpleDialog

class modalerDialog(tkSimpleDialog.Dialog):
    def body(self, master):
        self.title("Ein modaler Dialog")
        Label(master,text='Ich bin ein modaler Dialog').pack()

def dialogOeffnen():
    modalerDialog(root)
  
root = Tk()
Button(root,text="modalen Dialog oeffnen",command=dialogOeffnen).pack()
root.mainloop()
Man leitet also immer von der Klasse tkSimpleDialog.Dialog seine eigene Dialogklasse ab und überschreibt je nach Bedarf die Methoden, die tkSimpleDialog.Dialog einem ansonsten vererben würde. \Python22\Lib\lib-tk\tkSimpleDialog.py sollte man sich auf jeden Fall angucken.

Jan
Tux
User
Beiträge: 70
Registriert: Freitag 8. November 2002, 23:07
Kontaktdaten:

Hi Voges!

Danke erstmal für dein Bsp.!

Hier noch eine Frage: Bei dem Dialog sind unten die Buttons OK und Cancel ! Ist es möglich, dass man für diese Buttons selbst ein commando definiert? Wenn ja, wie?

Danke
ICH
Gast

Tux hat geschrieben:Hier noch eine Frage: Bei dem Dialog sind unten die Buttons OK und Cancel ! Ist es möglich, dass man für diese Buttons selbst ein commando definiert?
Hallo Tux!
Wenn es z.B. nur darum geht, beim Druck auf den OK-Button zu prüfen, ob im Dialog gemachte Angaben z.B. richtig oder ausreichend sind, kannst Du die Methode validate() überschreiben.

Code: Alles auswählen

    def validate(self):
        if <bedingung>:
            return 1    # alles ok, Dialog wird beendet
        else:
            # hier ggf. Fehlermeldung
            return 0    # Dialog wird nicht beendet
Wenn Du höchstmöglichen Einfluss auf die Buttons haben willst (z.B. weitere hinzufügen, eigene Methoden aufrufen etc.), dann überschreibe die Methode buttonbox(). Einfach die Methode aus der Datei tkSimpleDialog.py rauskopieren, in die eigene Dialog-Klasse einfügen und dann nach belieben verändern.
Jan
Antworten