Seite 1 von 1

3 Fenster in einem Programm

Verfasst: Freitag 20. Februar 2015, 20:49
von Xfd7887a
Ich möchte eigentlich nur ein Fenster mit 2 Buttons erstellen. Klickt man jeweils auf einen der Buttons öffnet sich ein neues Fenster (das vorherige Auswahlfenster verschwindet). Von diesen kann man dann auf das Startfenster zurückkehren.

Wie kann man das umsetzen?

Re: 3 Fenster in einem Programm

Verfasst: Freitag 20. Februar 2015, 20:59
von BlackJack
@Xfd7887a: Für das erste Fenster könnte man das Hauptfenster verwenden welches durch das `Tk`-Exemplar bereitgestellt wird. Für weitere Fenster muss man dann `Tkinter.Toplevel`-Exemplare verwenden. Das Hauptfenster darf man nicht schliessen, kann es aber mit der `withdraw()`-Methode unsichtbar machen. Passt ja auch wenn man das später wieder anzeigen möchte (`wm_deiconify()`-Methode).

Re: 3 Fenster in einem Programm

Verfasst: Samstag 21. Februar 2015, 10:47
von Xfd7887a
Danke, werde mal schauen, ob das klappt.

Re: 3 Fenster in einem Programm

Verfasst: Sonntag 1. März 2015, 23:55
von MaddinET
Hallo,

ich habe ein ähnliches Problem.
Ich möchte nichts anderes als ein Hauptfenster erstellen, welches sozusagen als Auswahlmenü dient .
In diesem Hauptfenster kann ich Menü 1 oder Menü2 klicken . Durch das Klicken wird jeweils in das gewählte Menü gewechselt und dort dann das weitere Programm ausgeführt.

Gibt es irgendwo ein Beispielcode dafür? Ich habe soweit schon was vorbereitet (siehe unten)
Ich bin soweit, dass ich von dem Hauptmenü in die Untermenüs springen kann.
Die jeweiligen Menüs sollen aber in den Vordergrund springen und das Hauptmenü ausblenden. Als wenn ich halt in eine weitere Programmebene springe.
Ist die Vorgehensweise so in Ordnung oder gibt es eine saubere Lösung.
Ich habe was von Classen gehört, bzw. Toplevel gehört.

Code: Alles auswählen

# -*- coding: utf-8 -*-
from Tkinter import *

main = Tk()
main.geometry('400x300')
main.title('Hauptfenster')

def GPS():
    menue1 = Tk()
    menue1.geometry('400x300')
    menue1.title('GPS')
    Text3=Label(menue1,text='Text')
    Text3.pack()
    menue1.mainloop()
    

def Boardcomputer():
    menue2 = Tk()
    menue2.geometry('400x300')
    menue2.title('Boardcomputer')
    menue2.mainloop()


Knopf1=Button(main,text='Menü1', command=GPS)
Knopf2=Button(main,text='Menü2', command=Boardcomputer)

Knopf1.pack()
Knopf2.pack()

main.mainloop()

Re: 3 Fenster in einem Programm

Verfasst: Montag 2. März 2015, 00:14
von BlackJack
@MaddinET: Es darf immmer nur ein `Tk`-Exemplar zur gleichen Zeit geben sonst ist das Programmverhalten undefiniert und es kann alles Mögliche bis hin zu harten Programmabstürzen geben. Wenn man mehr als ein Fenster in einer Tk-Anwendung haben möchte, dann gibt es dafür die `Toplevel`-Klasse. Mehr als eine `mainloop()` möchte man in der Regel auch nicht laufen haben.

Willst Du wirklich mehrere Fenster wenn doch immer nur eines davon sichtbar sein soll? Das sieht vom Code und von den Namen eher so aus, als wäre ein Fenster dessen Inhalt sich entsprechend ändert, besser geeignet.

Von Klassen sollte man bei GUI-Programmierung nicht nur etwas gehört haben, sondern mit dem Sprachmittel auch umgehen können.

Sternchen-Importe sollte man vermeiden, denn da weiss man dann sehr schnell nicht mehr aus welchem Modul eigentlich welcher Name kommt und es besteht ausserdem die Gefahr von Namenskollisionen. Das `Tkinter`-Modul kippt einem bei dem Import mal so eben ca. 190 Namen ins Modul. Üblicherweise importiert man `Tkinter` als `tk` und referenziert die Objekte aus dem Modul über diesen abgekürzten Modulnamen.

Auf Modulebene sollten nur Konstanten, Funktionen, und Klassen definiert werden. Das Hauptprogramm steht in der Regel in einer `main()`-Funktion.

Re: 3 Fenster in einem Programm

Verfasst: Montag 2. März 2015, 15:06
von MaddinET
Hallo BlackJack,

vielen Dank für die schnelleAntwort.
Es ist doch wohl einiges im argen. :roll: Obwohl ich die Beispiele teilweise von Programmbeispielen entnommen habe.
Das waren die ersten Programmierversuche mit Tkinter.

Die Anwendung soll wie folgt sein.
Man kennt ja die kleinen Displays für den Raspberry. Es soll nichts anderes realisiert werden, als eine einfache
Oberfläche, die sozusagen 2 Button besitzt. Mit jedem Button kann man sozusagen in ein anderes Menü gehen.
In meinem Fall erstmal Menü1 und Menü2.
Jedes Menü wird eine unterschiedliche Aufgabe und Funktion haben. z.B. könnten im Menü 1 einfach nur Daten angezeigt werden und im Menü 2 vielleicht ein Button vomit ich ein Relais ansteuern kann.

Also es soll nicht so sein, dass ich alle Fenster benötige. Es soll nur das angezeigt werden welches ich gerade ausgewählt habe.
Was ausgeblendet ist wird nicht benötigt.

Ich finde überall nur Ansätze für ein Fenster. Niergenwo die Zusammenarbeit mit mehreren Fenstern.

Re: 3 Fenster in einem Programm

Verfasst: Montag 2. März 2015, 15:14
von BlackJack
@MaddinET: Dann stimmt meine Vermutung ja das man eigentlich mit *einem* Fenster auskommt und das halt je nach Situation mit unterschiedlichen Inhalten füllt. Statt drei Fenstern hätte man dann eines und zum Beispiel drei Frames mit verschiedenen Inhalten von denen man immer nur einen in diesem Fenster darstellt.

Re: 3 Fenster in einem Programm

Verfasst: Montag 2. März 2015, 21:33
von MaddinET
Ich bin nun ganz verwirrt. Jetzt weiß ich garnichts mehr. :K

Wie ich ein einfaches Fenster erstellen kann wird auf 100Seiten erklärt.Aber Frames und Ausblenden, keine Ahnung.

Re: 3 Fenster in einem Programm

Verfasst: Montag 2. März 2015, 23:37
von BlackJack
@MaddinET: Wenn Du Dich beim Programmieren auf das kopieren und anpassen von dem beschränkst was man als Beispiele im Netz per Suchmaschine finden kann, dann wirst Du nicht weit kommen.

Die Dokumentation zum `Tkinter`-Modul ist zwar sehr oberflächlich, hat aber Links zu tiefergehendem Material.