Tk, mit Radio-Button den wert eines Entrys zuweisen / value=Entry.get

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
attega
User
Beiträge: 10
Registriert: Samstag 4. April 2015, 22:17

Hallo zusammen,

ich möchte mit Radio-Buttons die Werte eines ausgewählten Entrys abfragen und der Variable zuweisen.
rad2=tk.Radiobutton(Kto_Frame,padx = 20,variable=stat,value=Konto1.get)

Im Netz findet man verscheidene Versionen davon, entweder mit Konto1.get oder mit Konto1.get()

Bei mir wird jedoch immer höchstens der zum Programmstart angegebene Initialwert des gewählten Entrys, also Hase oder Igel, zurück gegeben. Nicht jedoch der durch den Nutzer geänderte Wert.
Bei expliziter Abfrage der Entrys Konto1.get() kommt immer der Aktuelle wert.

Die Frage ist nun wie der Value-Parameter der Radiobuttons zur Laufzeit das get() von Konto aufrufen kann. Ich dachte er würde es einfach tun.

Wäre super wenn jemand wüsste wie es geht :?:

Vielen Dank schonmal fürs Nachdenken :)

Code: Alles auswählen

############ADD Extra-Frame##########################################################
stat = tk.StringVar()
Kto_Frame=tk.Frame(tab2)
Kto_Frame.grid(row=row,column=1)
rad1=tk.Radiobutton(Kto_Frame,text="Nicht-Eingestellt",padx = 20,variable=stat,value="0")
Konto1 = tk.Entry(Kto_Frame,width=10,font=ft1)
Konto1.insert(END,"Hase")
rad2=tk.Radiobutton(Kto_Frame,padx = 20,variable=stat,value=Konto1.get)
Konto2 = tk.Entry(Kto_Frame,width=10,font=ft1)
Konto2.insert(END,"Igel")
rad3=tk.Radiobutton(Kto_Frame,padx = 20,variable=stat,value=Konto2.get)
rad1.grid(column=0, row=0)
rad2.grid(column=1, row=0)
Konto1.grid(column=2, row=0)
rad3.grid(column=3, row=0)
Konto2.grid(column=4, row=0)
############ADD Extra-Frame##########################################################
Benutzeravatar
peterpy
User
Beiträge: 188
Registriert: Donnerstag 7. März 2013, 11:35

Hallo attega,
den Radiobuttons fehlt die Option command.
Inhalte von Entrys können auch über die textvariable gelesen und gesetzt werden.
Variablen Namen werden komplett klein geschrieben.
Gruss Peter

Code: Alles auswählen

import tkinter as tk
from functools import partial


def set_konto1_2_null(konto1, konto2, stat, var_konto1):    
    var_konto1.set(stat.get())# mit Textvariable 
    konto2.delete(0, 'end')
    konto2.insert('end', stat.get())# ohne Textvariable

def set_konto1_2(konto1, konto2, stat, var_konto1):    
    var_konto1.set(stat.get())# mit Textvariable 
    konto2.delete(0, 'end')
    konto2.insert('end', stat.get())# ohne Textvariable

def set_konto1(konto1, konto2, var_konto1):
    # schreibt den Wert aus konto2 in konto1
    value=konto2.get()
    var_konto1.set(value)# mit Textvariable

def set_konto1_2(konto1, konto2, var_konto1, initialwert_konto1,
                 initialwert_konto2):    
    var_konto1.set(initialwert_konto1)# mit Textvariable 
    konto2.delete(0, 'end')
    konto2.insert('end', initialwert_konto2)# ohne Textvariable

def main():
    root = tk.Tk()
    stat = tk.StringVar()
    var_konto1 = tk.StringVar()
    kto_Frame=tk.Frame(root)
    kto_Frame.grid(row=0,column=1)
    initialwert_konto1 = "Hase"
    initialwert_konto2 = "Igel"
    konto1 = tk.Entry(kto_Frame,width=10, textvariable=var_konto1)#,font=ft1)
    konto1.insert('end', initialwert_konto1)
    konto2 = tk.Entry(kto_Frame,width=10)#(,font=ft1)
    konto2.insert('end',initialwert_konto2)
    rad1=tk.Radiobutton(kto_Frame,text="Nicht-Eingestellt",padx = 20,
                        variable=stat,value="0",
                        command=partial(set_konto1_2_null, konto1, konto2,
                                        stat, var_konto1))
    rad2=tk.Radiobutton(kto_Frame,padx = 20,variable=stat,value=konto1.get(),
                        command=partial(set_konto1, konto1, konto2,
                                        var_konto1))
    
    rad3=tk.Radiobutton(kto_Frame,padx = 20,variable=stat,value=konto2.get(),
                        command=partial(set_konto1_2, konto1, konto2,
                                        var_konto1, initialwert_konto1,
                                        initialwert_konto2))
    
    rad1.grid(column=0, row=0)
    rad2.grid(column=1, row=0)
    konto1.grid(column=2, row=0)
    rad3.grid(column=3, row=0)
    rad1.select()    
    
    konto2.grid(column=4, row=0)
    root.mainloop()

if __name__ == "__main__":
    main()
Antworten