widgets verstecken/anzeigen

Fragen zu Tkinter.
Antworten
N2Ndesign
User
Beiträge: 5
Registriert: Dienstag 21. August 2012, 15:07

Moin, ich bin gerade dabei etwas zu basteln und stieß auf folgendes Problem:

- Wenn ich auf verschiedene Buttons klicke, werden die widgets die diese zur Anzeige bringen sollen übereinander dargestellt....

Zur Verdeutlichung ein Beispielcode, wie es grad bei mir aussieht:

Code: Alles auswählen

from tkinter import *

def sehen():
    sehen=Label(master=fenster, text='sehen')
    sehen.grid(row=0, column=0) 

def hoeren():
    hoeren=Label(master=fenster, text='hören')
    hoeren.grid(row=0, column=1)

fenster=Tk()

fenster.geometry("100x100")

klick=Button(master=fenster, text='klick', command=sehen)
klick.grid(row=1, column=0)

klock=Button(master=fenster, text='klock', command=hoeren)
klock.grid(row=2, column=0)

fenster.mainloop()
Hier ist es nun so, dass die Wörter "sehen" und "hören" nebeneinander erscheinen, wenn man die Buttons drückt, ich aber möchte, dass das Wort "sehen" erscheint, wenn man "klick" drückt und das Wort "hören" wenn man "klock" drückt.

Ich bin blutiger Anfänger und vermute, dass ich den Code komplett umschreiben muss.

Tante Google brachte mich dann auf
grid_forget()
Aber wie ich das einbauen soll ist mir ein Rätsel, das ist leider auch nirgends so richtig beschrieben.

Danke für Tipps im Vorraus!
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hi N2Ndesign

Es gibt verschiedene Lösungsvarianten. Die grid_forget() Methode ist für deine Anwendung nicht nötig:

Code: Alles auswählen

from tkinter import *

def sehen():
    #sehen=Label(master=fenster, text='sehen')
    #sehen.grid(row=0, column=0)
    text_var.set('sehen')

def hoeren():
    #hoeren=Label(master=fenster, text='hören')
    #hoeren.grid(row=0, column=1)
    text_var.set('hören')
    
fenster=Tk()

fenster.geometry("100x100")

text_var = StringVar()
label = Label(fenster, textvariable=text_var)
label.grid(row=0, column=0)

klick=Button(master=fenster, text='klick', command=sehen)
klick.grid(row=1, column=0)

klock=Button(master=fenster, text='klock', command=hoeren)
klock.grid(row=2, column=0)

fenster.mainloop()
Gruß wuf :wink:
Take it easy Mates!
N2Ndesign
User
Beiträge: 5
Registriert: Dienstag 21. August 2012, 15:07

Hi wuf,

danke für die Antwort!

Nun, ich habe die Frage unpräzise gestellt. Nun erscheinen die Wörter "sehen" und "hören" ja an derselben Stelle.
Wenn aber das Ganze komplexer wird, stößt diese Lösung ja an ihre Probleme.

Mal ein besseres Beispiel um das zu verdeutlichen:

Code: Alles auswählen

from tkinter import *

def sehen():
    sehen=Label(master=fenster, text='sehen')
    sehen.grid(row=0, column=0)

    schmecken=Entry(master=fenster)
    schmecken.grid(row=0, column=1)


def hoeren():
    hoeren=Label(master=fenster, text='hören')
    hoeren.grid(row=0, column=1)
   
    riechen=Text(master=fenster, width=10, height=5)
    riechen.grid(row=0, column=2)

fenster=Tk()

fenster.geometry("350x200")

klick=Button(master=fenster, text='klick', command=sehen)
klick.grid(row=1, column=0)

klock=Button(master=fenster, text='klock', command=hoeren)
klock.grid(row=2, column=0)

fenster.mainloop()
Also es gibt verschiedene Widgets die im Fenster dargestellt werden sollen. Praktisch, den Inhalt von mehreren Fenstern dynamisch in einem Fenster darstellen, da möchte ich hin.

Grüße
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

OK N2Ndesign

Ich verstehe den Sinn deiner Anwendung noch nicht so ganz. Eventuell sehen da andere Forummitglieder besser was du damit erreichen möchtest.

Gruß wuf :wink:
Take it easy Mates!
N2Ndesign
User
Beiträge: 5
Registriert: Dienstag 21. August 2012, 15:07

Gut, ich versuche es mal anders zu erklären.

Ich möchte für mein Unternehmen ein Programm schreiben, in welchem ich einsehen kann, was sich im Lager befindet und welche Aufträge ich bekommen habe. Also wenn man so will ein kleines ERP.

Da habe ich eben einen Button "Aufträge", der mir mehrere Entry- Felder, ein Beschreibungsfeld und einen "Speichern" Button sowie einen Datenbankinhalt in einer tkTable darstellen soll.
Ähnliches bei "Lager", nur hier völlig anders aufgebaut.

Genauer gesagt habe ich bei "Aufträge" 5 Entry und 1 Beschreibung und bei "Lager" 3 Entry und 1 Beschreibung. Deshalb überlagern sich die Felder.

Grüße
BlackJack

@N2Ndesign: Kann es sein, dass Du eigentlich `ttk.Notebook` suchst?
N2Ndesign
User
Beiträge: 5
Registriert: Dienstag 21. August 2012, 15:07

Ja stimmt, mit ttk.Notebook würde sich das Problem lösen lassen. Danke für den Tipp!

Grüße
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

Hast du dir mal pyQt angesehen? Du kannst ansprechende Benutzeroberflächen mit dem Qt Designer zusammenklicken (wie bei Visual Basic) und entweder in Python Code umwandeln oder aber zur Laufzeit dynamisch laden. Deine Zielsetzung klingt eher nach einem komplexen GUI...

Ich habe mal ein sehr umfangreiches Programm in Tkinter geschrieben - ich weiß heute und merkte seinerzeit recht schnell, dass das keine gute Idee ist/war.
Antworten