Reputation:
I'm unable to get lbox to display the values of selected cbox value. For example, if name: "juli" is selected in cbox, lbox will display their age "12", "14" automatically.
Does anyone know how to do it? Please let me know my mistakes in the code as well thank you.
from tkinter import *
from tkinter.ttk import *
from tkinter import ttk
import tkinter as tk
import pandas as pd
window = Tk()
window.title("TEST")
window.geometry("1400x800")
window.configure(bg='white')
df = [['tom', 10, 'Male'], ['juli, 12, 'Male'], ['nick', 15, 'Male'], ['juli', 14, 'Female'], ['nick', 20, 'Male']] #column = Name, Age, Gender
df3 = pd.DataFrame(df, columns=["Name", "Age", "Gender"])
df3.sort_values("Name", inplace=True)
df3.drop_duplicates(subset="Name", inplace=True)
df3["Name"].tolist()
def callback1(eventObject):
global cutrow
m = df3[df['Name'].str.contains(cbox.get())]
#print(cbox.get())
lbox.delete("0", "end")
for row in df3[df3["Name"].eq(cbox.get())].iterrows():
print(row)
cutrow = m.loc[:, 'Age']
cutrow.reset_index(drop=True, inplace=True)
print(cutrow)
cutrow = StringVar()
cbox = Combobox(window,width=30, state="readonly", values="Name")
cbox.place(x=150,y=60)
cbox.current(0)
cbox.bind("<<ComboboxSelected>>", callback1)
lbox = Combobox(window, width=30, textvariable=cutrow, values="Age")
lbox.place(x=150,y=90)
lbox.current(0)
window.mainloop()
Upvotes: 0
Views: 1238
Reputation: 161
below there is an example of how you can achieve that. Run the code and you'll see it works.
from tkinter import *
from tkinter.ttk import *
window = Tk()
df = [['tom', 10, 'Male'], ['juli', 12, 'Male'], ['nick', 15, 'Male'], ['juli', 14, 'Female'], ['nick', 20, 'Male']] #column = Name, Age, Gender
def callback1(e):
name = cbox.get()
lbox.delete("0", "end")
values_from_selected_name = list(set([record[1] for record in df if record[0]==name]))
lbox['values'] = values_from_selected_name
Label(window, text='Name: ').grid(row=0, column=0, padx=10, pady=10)
cbox = Combobox(window, width=10, state="readonly")
cbox.grid(row=0, column=1)
all_values = list(set([record[0] for record in df]))
cbox['values'] = all_values
cbox.bind("<<ComboboxSelected>>", callback1)
Label(window, text='Age: ').grid(row=1, column=0)
lbox = Combobox(window, width=10)
lbox.grid(row=1, column=1, padx=10, pady=10)
window.mainloop()
You may note several things:
Upvotes: 1