![](/img/trans.png)
[英]Python Tkinter - 2 combo boxes to filter dataset - first combobox lists states, second combobox lists only facilities in that state
[英]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
如果您運行此代碼,您將看到它會生成一個帶有兩個下拉框和一個按鈕的窗口。 當您從第一個下拉框中選擇一個值時,它會反映在第二個! 這就是要解決的問題。
注意:為了讓這段代碼清晰地運行,您需要創建一個表並向其中添加幾條記錄,至少兩行兩列。 這樣可以填充下拉框。
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()
我認為問題出在下面提到的行中,但我不確定。 請幫忙。
agechoosen['values'] = (tempAge)
salchoosen['values'] = (Salary)
根據上面評論中@acw1668 的建議。 我添加了 n = tk.StringVar() 和 m = tk.StringVar() 並且它起作用了。 這是最終的代碼。
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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.