Seite 1 von 1

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

Verfasst: Dienstag 6. Dezember 2022, 21:34
von attega
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##########################################################

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

Verfasst: Mittwoch 7. Dezember 2022, 13:42
von peterpy
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()