简体   繁体   中英

I am trying to create a simple GUI with two combobox using tkinter. But first combo box selected value gets over written in second combobox

If you run this code you will see that it results in a window with two dropdown boxes and a button. When you select a value from first dropdown box it reflects in second! That's the problem to be solved.

Note : For this code to run clearly you need to create a table and add few records to it atleast two rows with two columns. So that dropdown boxes can be populated.

import tkinter as tk
from tkinter import ttk
from tkinter import messagebox
import pandas as pd
import sqlite3
# Creating tkinter window
conn = sqlite3.connect('test.db')
print('Opened Database successfully');
tempAge = []
Salary = []
cursor = conn.execute('''Select * from Company''')
for row in cursor:
    tempAge.append(row[2])
    Salary.append(row[4])
data_dict = {'name': pd.Series(tempAge), 'age':pd.Series(Salary)}
dframe = pd.DataFrame(data_dict)
window = tk.Tk()
window.title('Combobox')
window.geometry('500x250')

# label text for title
ttk.Label(window, text="GFG Combobox Widget",
          background='green', foreground="white",
          font=("Times New Roman", 15)).grid(row=0, column=1)

# label
ttk.Label(window, text="Select the Age :",
          font=("Times New Roman", 10)).grid(column=0,
                                             row=5, padx=10, pady=25)

# Combobox creation
n = tk.StringVar()
agechoosen = ttk.Combobox(window, width=27, textvariable=n)
salchoosen = ttk.Combobox(window, width=27, textvariable=n)

agechoosen['values'] = (tempAge)
salchoosen['values'] = (Salary)
ageVar=''
salVar=''
def salComboSelect():
    if salchoosen.current()==-1:
        s=0
    else:
        salVar = salchoosen.get()
        messagebox.showinfo('Message',str(salVar))
def comboselect():
    if agechoosen.current()==-1 and salchoosen.current()==-1:
        s=0
    else:
        ageVar=agechoosen.get()
        salVar = salchoosen.get()
        tempStr = str(ageVar)+" & "+str(salVar)
        messagebox.showinfo('Message',str(tempStr))
        # print(monthchoosen.current(), monthchoosen.get())
button = ttk.Button(window, text='Submit', command=comboselect, width=20)
ttk.Label(window, text="Select the Age :",
          font=("Times New Roman", 10)).grid(column=0,
                                             row=5, padx=10, pady=25)

agechoosen.grid(column=1, row=5)
salchoosen.grid(column=1, row=6)
button.grid(column=1, row=7)
agechoosen.current()
window.mainloop()

I think issue is here in lines mentioned below but am not sure. Please help.

agechoosen['values'] = (tempAge)
salchoosen['values'] = (Salary)

在此处输入图片说明

As per suggestion of @acw1668 in comment above. I added n = tk.StringVar() and m = tk.StringVar() and it worked. Here is the final code.

import tkinter as tk
from tkinter import ttk
from tkinter import messagebox
import pandas as pd
import sqlite3
# Creating tkinter window
conn = sqlite3.connect('test.db')
print('Opened Database successfully');
tempAge = []
Salary = []
cursor = conn.execute('''Select * from Company''')
for row in cursor:
    tempAge.append(row[2])
    Salary.append(row[4])
data_dict = {'name': pd.Series(tempAge), 'age':pd.Series(Salary)}
dframe = pd.DataFrame(data_dict)
window = tk.Tk()
window.title('Combobox')
window.geometry('500x250')

# label text for title
ttk.Label(window, text="GFG Combobox Widget",
          background='green', foreground="white",
          font=("Times New Roman", 15)).grid(row=0, column=1)

# label
ttk.Label(window, text="Select the Age :",
          font=("Times New Roman", 10)).grid(column=0,
                                             row=5, padx=10, pady=25)

# Combobox creation
n = tk.StringVar()
m = tk.StringVar()
agechoosen = ttk.Combobox(window, width=27, textvariable=n)
salchoosen = ttk.Combobox(window, width=27, textvariable=m)
# print("dframe['name']", dframe['name'])
# agechoosen['values'] = (tempAge)
agechoosen['values'] = (tempAge)
salchoosen['values'] = (Salary)
ageVar=''
salVar=''
def salComboSelect():
    if salchoosen.current()==-1:
        s=0
    else:
        salVar = salchoosen.get()
        messagebox.showinfo('Message',str(salVar))
def comboselect():
    if agechoosen.current()==-1 and salchoosen.current()==-1:
        s=0
    else:
        ageVar=agechoosen.get()
        salVar = salchoosen.get()
        tempStr = str(ageVar)+" & "+str(salVar)
        messagebox.showinfo('Message',str(tempStr))
        # print(monthchoosen.current(), monthchoosen.get())
button = ttk.Button(window, text='Submit', command=comboselect, width=20)
ttk.Label(window, text="Select the Age :",
          font=("Times New Roman", 10)).grid(column=0,
                                             row=5, padx=10, pady=25)
# print(monthchoosen.selection_get())
# monthchoosen['values'] = (pd.Series(tempAge))
# Adding combobox drop down list
# monthchoosen['values'] = (' January',
#                           ' February',
#                           ' March',
#                           ' April',
#                           ' May',
#                           ' June',
#                           ' July',
#                           ' August',
#                           ' September',
#                           ' October',
#                           ' November',
#                           ' December')
agechoosen.grid(column=1, row=5)
salchoosen.grid(column=1, row=6)
button.grid(column=1, row=7)
agechoosen.current()
window.mainloop()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM