Wechselnde Einträge bei aktiviertem RadioButton
Ich hab ein Fenster, in dem 2 RadioButton sind.
Und zwar, würde ich gern, das wenn z.B. : radiobutton1 aktiv ist, dass ich dann 4 entrys habe und sobald ich auf radiobutton2 klicke dass dann nur 3 entrys da sind, und bei radiobutton1 halt wieder 4 entrys
Wie stelle ich das am besten an?
Ich habe mir erst gedacht, das wenn Radio Button 1 toggled wurde, das er dann in eine Funktion geht, in der er die 4 entrys in eine box macht, aber wie bekomme ich die dann im Fenster angezeigt?
Und wie schaffe ich es dann, das wenn Button 2 toggled wurde, das er die 4 entrys aus der box löscht und 3 wieder herein schreibt?
Es handelt sich um GTK
ich hatte mir das jetzt so vorgestellt:
der abschnitt in dem ich das vor habe:
Aber so funktioniert das nicht, allein schon, weil dort, vbox ja noch nicht definiert ist. Aber ich weis nicht, wie ich das sonst anstellen sollte.
Bitte um jede Hilfe
EDIT Mitchell
Überschrift geändert
Und zwar, würde ich gern, das wenn z.B. : radiobutton1 aktiv ist, dass ich dann 4 entrys habe und sobald ich auf radiobutton2 klicke dass dann nur 3 entrys da sind, und bei radiobutton1 halt wieder 4 entrys
Wie stelle ich das am besten an?
Ich habe mir erst gedacht, das wenn Radio Button 1 toggled wurde, das er dann in eine Funktion geht, in der er die 4 entrys in eine box macht, aber wie bekomme ich die dann im Fenster angezeigt?
Und wie schaffe ich es dann, das wenn Button 2 toggled wurde, das er die 4 entrys aus der box löscht und 3 wieder herein schreibt?
Es handelt sich um GTK
ich hatte mir das jetzt so vorgestellt:
der abschnitt in dem ich das vor habe:
class umfang:
def change(self, widget, data):
if data=="radio1":
entry1=gtk.Entry()
entry2=gtk.Entry()
entry3=gtk.Entry()
entry4=gtk.Entry()
vbox.pack_start(entry1)
vbox.pack_start(entry2)
vbox.pack_start(entry3)
vbox.pack_start(entry4)
if data=="radio2":
entry1=gtk.Entry()
entry2=gtk.Entry()
entry3=gtk.Entry()
vbox.pack_start(entry1)
vbox.pack_start(entry2)
vbox.pack_start(entry3)
def __init__(self):
window=gtk.Window(gtk.WINDOW_TOPLEVEL)
window.set_title("Rechner - Umfang")
window.set_border_width(0)
vbox=gtk.VBox(False, 0)
window.add(vbox)
frame=gtk.Frame("Erklaerung:")
label=gtk.Label("Waehlen sie zunaechst ob Viereck oder Dreieck.\n"
"Danach geben sie entweder 4 Informationen fuer das Viereck\n"
"oder 3 fuer das Dreieck.")
frame.add(label)
vbox.pack_start(frame)
radio1=gtk.RadioButton(None, "Viereck")
radio1.connect("toggled", self.change, "radio1")
vbox.pack_start(radio1)
radio2=gtk.RadioButton(radio1, "Dreieck")
radio2.connect("toggled", self.change, "radio2")
vbox.pack_start(radio2)
window.show_all()
Aber so funktioniert das nicht, allein schon, weil dort, vbox ja noch nicht definiert ist. Aber ich weis nicht, wie ich das sonst anstellen sollte.
Bitte um jede Hilfe
EDIT Mitchell
Überschrift geändert
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 104916
Url: https://administrator.de/contentid/104916
Ausgedruckt am: 25.11.2024 um 05:11 Uhr
1 Kommentar
Da gibts ne ganz einfache loesung fuer. Jedes Gtk::Widget verfuegt ueber die methode set_visible(boolwert). Damit kann man ein widget ein-oder ausblenden und braucht nicht die ganze rechenintensiver packerei bei jedem klick nochmal durchfuehren. Alternativ gaebe es auch noch set_sensitive(boolwert) mit der kannst du (0) ein widget "ausgrauen" oder (1) wieder benutzbar machen
Deine change() muesste dann so aussehen. Wichtig: Entries schon vorher generieren
def change(self, widget, data):
if data=="radio1":
entry4.set_visible(1)
if data=="radio2":
entry4.set_visible(0)
Deine change() muesste dann so aussehen. Wichtig: Entries schon vorher generieren
def change(self, widget, data):
if data=="radio1":
entry4.set_visible(1)
if data=="radio2":
entry4.set_visible(0)