Seite 1 von 1
Problem mit 2 Fenster
Verfasst: Sonntag 15. Januar 2012, 16:21
von jtschoch
Hallo Pythoner,
Ich wollte eigentlich sowas machen:
Code: Alles auswählen
#!/usr/bin/python
# -*- coding: utf-8 -*-
import Tkinter
class APP(Tkinter.Frame):
def Window1(self, master=None):
Tkinter.Frame.__init__(self, master)
l = Tkinter.Label(master)
l.grid(row = 0)
self.l0 = Tkinter.Label(self.master, text = "Filename:")
self.l0.grid(row=1, column=1)
self.b0 = Tkinter.Button(self.master,text = "Select")
self.b0.grid(row=1, column=2)
self.l1 = Tkinter.Label(self.master,text = "Title:")
self.l1.grid(row=2, column=1)
self.title = Tkinter.Entry(self.master)
self.title.grid(row=2, column=2)
self.b1 = Tkinter.Button(self.master, text = "Weiter >>",command = self.Window2)
self.b1.grid(row=6, column=2)
def Window2(self, master=None):
master = self.master
#self.Window1.destory()
Tkinter.Frame.__init__(self, master)
l = Tkinter.Label(master)
l.grid(row = 0)
self.b1 = Tkinter.Button(master, text = "<< Zurueck")
self.b1.grid(row=6, column=2)
master.mainloop()
root = Tkinter.Tk()
root.geometry("300x190")
create = APP()
create.Window1(root)
root.mainloop()
Das man zwischen 2 Fenstern hin und her Schalten kann,
aber das vorherige Fenster soll immer geschlossen werden.
Bloß das Funktioniert nicht, oben das ist nur ein Beispielcode nicht der Richtige, da ist aber das selbe Problen.
Re: Problem mit 2 Fenster
Verfasst: Sonntag 15. Januar 2012, 16:42
von Hyperion
Du beschreibst Dein Problem mal wieder nur unzureichend! Da Dir präzise Formulierung schwer fällt, wieso erstellst Du nicht einfach ein paar Screenshots von einem Mockup und zeigst uns, wie der Ablauf sein soll?
Suchst Du eine Art "Dialog"?
Ich kenn mich mit Tk nicht aus, bezweifel aber, dass man das "root"-Fenster schließen kann, ohne alle anderen zu beenden...
Re: Problem mit 2 Fenster
Verfasst: Sonntag 15. Januar 2012, 16:46
von jtschoch
Also ich möchte es so machen,
Window1 soll zuerst kommen(geöffnet werden), da kommt der eine Inhalt rein, unten ist ein Weiter Button,
der dann das geöffnete Fenster schließen soll und dann Window2 öffnen soll.
Dazu kann auch nochmal das ganze umgekehrt kommen.
Re: Problem mit 2 Fenster
Verfasst: Sonntag 15. Januar 2012, 16:51
von Hyperion
jtschoch hat geschrieben:
Dazu kann auch nochmal das ganze umgekehrt kommen.
Wasn das für nen UI-Konzept? So etwas habe ich noch nie gesehen - vermutlich wird es deswegen kein fertiges Konzept dafür geben!
Generell gibt es "Dialoge", die zusätzlich zu einem Fenster geöffnet werden, um kleinere, separate Eingaben zu realisieren. Kennt wohl jeder Computernutzer von so ziemlich allen Programmen.
Dann gibt es noch "Wizzards", die eine spezielle Form von Dialogen darstellen, bei denen man sich Schritt für Schritt durchklicken muss, um sequentielle Angaben zu machen. Das kennt man z.B. aus Installationsprogrammen oder bei der Einrichtung eines Programmes (z.B. Email-Konto anlegen, neues Projekt in Eclipse, usw).
Was Du da machen willst, passt da nicht wirklich rein.
Vielleicht beschreibst Du doch mal genauer, was Deine Absicht ist? Evtl. kann man das Verhalten ja durch Dialoge / Wizzards nachbauen...
Re: Problem mit 2 Fenster
Verfasst: Sonntag 15. Januar 2012, 17:09
von yipyip
Ungeachtet dessen, wie die Funktionalitaet spaeter mal aussehen soll, schau dir Toplevel-Windows und 'iconify ' an:
http://www.tkdocs.com/tutorial/windows.html
...und 2 mal 'mainloop' ist auch einmal zuviel.
Re: Problem mit 2 Fenster
Verfasst: Sonntag 15. Januar 2012, 18:17
von jtschoch
Ich möchte eigent. sowas wie bei einen Setup, wo man was Einstellt und auf weiter klickt und wieder was Angibt,
sowas meine ich.
Ich habe mir nämlich ein Modul geschrieben was eine HTML Seite erstellt,
da wollte ich noch was Extra über TKinter machen, wo man verschiedene Angaben machen kann.(z.B. Seitentitle,...)
Ich wollte aber nicht alles auf ein Fenster klatschen, sondern auf 2 verteilen, das meine ich.
Re: Problem mit 2 Fenster
Verfasst: Sonntag 15. Januar 2012, 18:28
von webspider
Hyperion hat geschrieben:Dann gibt es noch "Wizzards", die eine spezielle Form von Dialogen darstellen, bei denen man sich Schritt für Schritt durchklicken muss, um sequentielle Angaben zu machen. Das kennt man z.B. aus Installationsprogrammen oder bei der Einrichtung eines Programmes (z.B. Email-Konto anlegen, neues Projekt in Eclipse, usw).
jtschoch hat geschrieben:Ich möchte eigent. sowas wie bei einen Setup, wo man was Einstellt und auf weiter klickt und wieder was Angibt,
sowas meine ich.
Du möchtest also einen Wizard erstellen.
jtschoch hat geschrieben:Ich habe mir nämlich ein Modul geschrieben was eine HTML Seite erstellt,
da wollte ich noch was Extra über TKinter machen, wo man verschiedene Angaben machen kann.(z.B. Seitentitle,...)
Ich wollte aber nicht alles auf ein Fenster klatschen, sondern auf 2 verteilen, das meine ich.
Ich kenne nur ein Programm, dass alle Informationen wie von dir beschrieben auf mehrere Fenster verteilt und das ist GIMP. Wie die Mehrheit hier wissen dürfte, ist GIMPs Bedienung grauenhaft, insbesondere wenn man Photoshop gewöhnt ist, wo man stattdessen einzelne "Widgets" frei arrangieren kann, die einem Fenster zugeordnet sind.
Wäre die wohl bessere Variante das Problem anzugehen. Bzw. ein Redesign. Es gibt genug Editoren da draußen, du wirst dich sicher von einem gut gestaltetem diesbezüglich inspirieren lassen können.
Re: Problem mit 2 Fenster
Verfasst: Sonntag 15. Januar 2012, 18:33
von jtschoch
AH, Ja Danke ich kucke mir das gleich mal an!
EDIT: Gibt es mal irgendwo eine Seite wo das ordentlich Beschrieben ist?(Wizzards)
Re: Problem mit 2 Fenster
Verfasst: Sonntag 15. Januar 2012, 19:15
von Hyperion
jtschoch hat geschrieben:
EDIT: Gibt es mal irgendwo eine Seite wo das ordentlich Beschrieben ist?(Wizzards)
http://lmgtfy.com/?q=ui+wizzard
http://lmgtfy.com/?q=gui+wizzard
Re: Problem mit 2 Fenster
Verfasst: Sonntag 15. Januar 2012, 20:47
von wuf
Hi jtschoch
jtschoch hat geschrieben:Das man zwischen 2 Fenstern hin und her Schalten kann,
aber das vorherige Fenster soll immer geschlossen werden.
Bloß das Funktioniert nicht, oben das ist nur ein Beispielcode nicht der Richtige, da ist aber das selbe Problen.
Hier eine mögliche Variante aus meiner Spielzeugtruhe:
Code: Alles auswählen
import Tkinter as tk
class CreateToplevel(tk.Toplevel):
windows = list()
def __init__(self, app_win, geometry, title):
tk.Toplevel.__init__(self)
self.geometry('%dx%d+%d+%d' % geometry)
self.title(title)
if CreateToplevel.windows == []:
CreateToplevel.windows.append(self)
else:
CreateToplevel.windows.append(self)
self.withdraw()
button_frame = tk.Frame(self)
button_frame.pack(side='bottom', fill='x')
next_button = tk.Button(button_frame, text='Change-Window',
command=self.swap_windows)
next_button.pack(side='left', expand=True)
close_app_button = tk.Button(button_frame, text='Close App',
command=self.destroy_me)
close_app_button.pack(side='left', expand=True)
def destroy_me(self):
app_win.destroy()
def swap_windows(self):
for window_obj in CreateToplevel.windows:
if window_obj != self:
window_obj.deiconify()
else:
window_obj.withdraw()
app_win = tk.Tk()
app_win.withdraw()
geometry = (300, 200, 10, 10)
windos_1 = CreateToplevel(
app_win, geometry, 'Fenster-1')
geometry = (300, 200, 400, 10)
windos_2 = CreateToplevel(
app_win, geometry, 'Fenster-2')
app_win.mainloop()
Gruß wuf

Re: Problem mit 2 Fenster
Verfasst: Montag 16. Januar 2012, 16:54
von jtschoch
Danke genau so meinte ich das!
Aber wie kann ioch das jetzt mit dem unterschiedlichen Inhalt machen?
Und es soll an der gleichen Stelle bleiben.
------------------------------------------------------------------------------------------------------
Um euch das nochmal klar zu machen,
Ich will das so wie bei Eclipse, wo zuerst das Einstellungsfensterkommt (mit dem Path),
und dann das Hauptprogramm oder wie bei Thunderbird mit der Passwortabfrage.
Re: Problem mit 2 Fenster
Verfasst: Montag 16. Januar 2012, 17:51
von wuf
jtschoch hat geschrieben:Aber wie kann ioch das jetzt mit dem unterschiedlichen Inhalt machen?
Und es soll an der gleichen Stelle bleiben.
Ist sehr einfach:
Code: Alles auswählen
import Tkinter as tk
class CreateToplevel(tk.Toplevel):
windows = list()
def __init__(self, app_win, geometry, title):
tk.Toplevel.__init__(self)
self.geometry('%dx%d+%d+%d' % geometry)
self.title(title)
if CreateToplevel.windows == []:
CreateToplevel.windows.append(self)
else:
CreateToplevel.windows.append(self)
self.withdraw()
button_frame = tk.Frame(self)
button_frame.pack(side='bottom', fill='x')
swap_button = tk.Button(button_frame, text='Swap Window',
command=self.swap_windows)
swap_button.pack(side='left', expand=True)
close_app_button = tk.Button(button_frame, text='Close App',
command=self.destroy_me)
close_app_button.pack(side='left', expand=True)
def destroy_me(self):
app_win.destroy()
def swap_windows(self):
for window_obj in CreateToplevel.windows:
if window_obj != self:
window_obj.deiconify()
else:
window_obj.withdraw()
app_win = tk.Tk()
app_win.withdraw()
#--- Fenster-1 ----------------------------------------------------------------#
geometry = (300, 200, 10, 10)
window_1 = CreateToplevel(
app_win, geometry, 'Fenster-1')
label_for_window_1 = tk.Label(window_1, text='Label-1', padx=5,
font=('Helvetica', 30, 'bold'), fg='darkolivegreen', bd=4, relief='raised')
label_for_window_1.pack(expand=True)
#------------------------------------------------------------------------------#
#--- Fenster-2 ----------------------------------------------------------------#
geometry = (300, 200, 10, 10)
window_2 = CreateToplevel(
app_win, geometry, 'Fenster-2')
label_for_window_2 = tk.Label(window_2, text='Label-2', padx=5,
font=('Helvetica', 30, 'bold'), fg='steelblue4', bd=4, relief='raised')
label_for_window_2.pack(expand=True)
#------------------------------------------------------------------------------#
app_win.mainloop()
Grß wuf
