Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用tkinter复选框为folium选择数据帧_Python_Pandas_Tkinter_Folium_Choropleth - Fatal编程技术网

Python 使用tkinter复选框为folium选择数据帧

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()

我是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(),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()