Python 使用tkinter复选框为folium选择数据帧
我是tkinter的初学者,我正在尝试使用tkinter创建带有熊猫数据帧的folium choropleth地图。 看起来像这样 以下是此操作的代码:Python 使用tkinter复选框为folium选择数据帧,python,pandas,tkinter,folium,choropleth,Python,Pandas,Tkinter,Folium,Choropleth,我是tkinter的初学者,我正在尝试使用tkinter创建带有熊猫数据帧的folium choropleth地图。 看起来像这样 以下是此操作的代码: from tkinter import * master = Tk() def var_states(): print("data1: %d,\ndata2: %d,\ndata3: %d,\ndata4: %d,\ndata5: %d,\ndata6: %d," % (var1.get(), var2.get()
from tkinter import *
master = Tk()
def var_states():
print("data1: %d,\ndata2: %d,\ndata3: %d,\ndata4: %d,\ndata5: %d,\ndata6: %d," % (var1.get(), var2.get(),var3.get(), var4.get(),var5.get(), var6.get()))
Label(master, text="What data would you like to see?:").grid(row=0, sticky=W)
var1 = IntVar()
Checkbutton(master, text="Data1", variable=var1).grid(row=1, sticky=W)
var2 = IntVar()
Checkbutton(master, text="Data2", variable=var2).grid(row=2, sticky=W)
var3 = IntVar()
Checkbutton(master, text="Data3", variable=var3).grid(row=3, sticky=W)
var4 = IntVar()
Checkbutton(master, text="Data4", variable=var4).grid(row=4, sticky=W)
var5 = IntVar()
Checkbutton(master, text="Data5", variable=var5).grid(row=5, sticky=W)
var6 = IntVar()
Checkbutton(master, text="Data6", variable=var6).grid(row=6, sticky=W)
Button(master, text='Quit', command=master.quit).grid(row=7, sticky=W, pady=4)
Button(master, text='Generate', command=var_states).grid(row=8, sticky=W, pady=4)
mainloop()
现在,它打印0或1(如果选择了数据,则打印1),但我希望它选择一个数据帧,以便在我的choropleth代码中将其用作数据(d5):
def choromapping(name, col1):
choropleth = folium.Choropleth(
geo_data=kunnat_geo,
name=name,
data=d5,
columns=['Kunta',col1],
key_on='feature.properties.Name',
fill_color='OrRd',
fill_opacity=0.8,
line_opacity=0.2,
legend_name=name,
show=False
).add_to(map)
Checkbutton
不必使用IntVar
作为其变量。在您的情况下,StringVar
实际上会更好
var_states
中创建数据帧,并创建一个字典来保存数据帧
键
作为检查按钮的onvalue
。选中时,将字典键作为值传递给var\u states
函数
var_states
的值作为键调用相应的字典
数据帧
,过滤掉offvalue
状态
dataframe
传递给choromapping
函数
import tkinter as tk
import pandas as pd
master = tk.Tk()
def choromapping(name, col1, data):
print(data)
def var_states():
#create data frames
data = [['tom', 10], ['nick', 15], ['juli', 14]]
df1 = pd.DataFrame(data, columns = ['Name1', 'Age1'])
df2 = pd.DataFrame(data, columns = ['Name2', 'Age2'])
df3 = pd.DataFrame(data, columns = ['Name3', 'Age3'])
df4 = pd.DataFrame(data, columns = ['Name4', 'Age4'])
df5 = pd.DataFrame(data, columns = ['Name5', 'Age5'])
df6 = pd.DataFrame(data, columns = ['Name6', 'Age6'])
df_dict = {
'df1': df1,
'df2': df2,
'df3': df3,
'df4': df4,
'df5': df5,
'df6': df6
}
variables = (var1.get(), var2.get(), var3.get(), var4.get(), var5.get(), var6.get())
for var in variables:
if var != 'None':
choromapping(None, None, df_dict[var])
#print("data1:", variables)
tk.Label(master, text="What data would you like to see?:").grid(row=0, sticky='W')
var1 = tk.StringVar()
var1.set(None)
tk.Checkbutton(master, text="Data1", variable=var1, onvalue='df1', offvalue=None).grid(row=1, sticky='W')
var2 = tk.StringVar()
var2.set(None)
tk.Checkbutton(master, text="Data2", variable=var2, onvalue='df2', offvalue=None).grid(row=2, sticky='W')
var3 = tk.StringVar()
var3.set(None)
tk.Checkbutton(master, text="Data3", variable=var3, onvalue='df3', offvalue=None).grid(row=3, sticky='W')
var4 = tk.StringVar()
var4.set(None)
tk.Checkbutton(master, text="Data4", variable=var4, onvalue='df4', offvalue=None).grid(row=4, sticky='W')
var5 = tk.StringVar()
var5.set(None)
tk.Checkbutton(master, text="Data5", variable=var5, onvalue='df5', offvalue=None).grid(row=5, sticky='W')
var6 = tk.StringVar()
var6.set(None)
tk.Checkbutton(master, text="Data6", variable=var6, onvalue='df6', offvalue=None).grid(row=6, sticky='W')
tk.Button(master, text='Quit', command=master.quit).grid(row=7, sticky='W', pady=4)
tk.Button(master, text='Generate', command=var_states).grid(row=8, sticky='W', pady=4)
master.mainloop()
Checkbutton
不必使用IntVar
作为其变量。在您的情况下,StringVar
实际上会更好
var_states
中创建数据帧,并创建一个字典来保存数据帧
键
作为检查按钮的onvalue
。选中时,将字典键作为值传递给var\u states
函数
var_states
的值作为键调用相应的字典
数据帧
,过滤掉offvalue
状态
dataframe
传递给choromapping
函数
import tkinter as tk
import pandas as pd
master = tk.Tk()
def choromapping(name, col1, data):
print(data)
def var_states():
#create data frames
data = [['tom', 10], ['nick', 15], ['juli', 14]]
df1 = pd.DataFrame(data, columns = ['Name1', 'Age1'])
df2 = pd.DataFrame(data, columns = ['Name2', 'Age2'])
df3 = pd.DataFrame(data, columns = ['Name3', 'Age3'])
df4 = pd.DataFrame(data, columns = ['Name4', 'Age4'])
df5 = pd.DataFrame(data, columns = ['Name5', 'Age5'])
df6 = pd.DataFrame(data, columns = ['Name6', 'Age6'])
df_dict = {
'df1': df1,
'df2': df2,
'df3': df3,
'df4': df4,
'df5': df5,
'df6': df6
}
variables = (var1.get(), var2.get(), var3.get(), var4.get(), var5.get(), var6.get())
for var in variables:
if var != 'None':
choromapping(None, None, df_dict[var])
#print("data1:", variables)
tk.Label(master, text="What data would you like to see?:").grid(row=0, sticky='W')
var1 = tk.StringVar()
var1.set(None)
tk.Checkbutton(master, text="Data1", variable=var1, onvalue='df1', offvalue=None).grid(row=1, sticky='W')
var2 = tk.StringVar()
var2.set(None)
tk.Checkbutton(master, text="Data2", variable=var2, onvalue='df2', offvalue=None).grid(row=2, sticky='W')
var3 = tk.StringVar()
var3.set(None)
tk.Checkbutton(master, text="Data3", variable=var3, onvalue='df3', offvalue=None).grid(row=3, sticky='W')
var4 = tk.StringVar()
var4.set(None)
tk.Checkbutton(master, text="Data4", variable=var4, onvalue='df4', offvalue=None).grid(row=4, sticky='W')
var5 = tk.StringVar()
var5.set(None)
tk.Checkbutton(master, text="Data5", variable=var5, onvalue='df5', offvalue=None).grid(row=5, sticky='W')
var6 = tk.StringVar()
var6.set(None)
tk.Checkbutton(master, text="Data6", variable=var6, onvalue='df6', offvalue=None).grid(row=6, sticky='W')
tk.Button(master, text='Quit', command=master.quit).grid(row=7, sticky='W', pady=4)
tk.Button(master, text='Generate', command=var_states).grid(row=8, sticky='W', pady=4)
master.mainloop()