Python 显示数据帧Tkinter子集的下拉选项
我有一个数据框,我想让GUI显示数据,我有date_time一列,每一小时显示一次数据,我想做一个下拉选项假设用户选择1小时,则只显示1小时所有列和行,如果用户选择2小时,则显示第二个所有列和行。请任何人帮助我如何显示数据gving下拉选项。 我会非常感激的。提前谢谢Python 显示数据帧Tkinter子集的下拉选项,python,pandas,tkinter,dropdown,Python,Pandas,Tkinter,Dropdown,我有一个数据框,我想让GUI显示数据,我有date_time一列,每一小时显示一次数据,我想做一个下拉选项假设用户选择1小时,则只显示1小时所有列和行,如果用户选择2小时,则显示第二个所有列和行。请任何人帮助我如何显示数据gving下拉选项。 我会非常感激的。提前谢谢 SAMPLE DATA: Name: Longitude(degree) Latitude(degree) DATE_TIME Mean Sea Value (m) DRY or WET SD 87
SAMPLE DATA:
Name: Longitude(degree) Latitude(degree) DATE_TIME Mean Sea Value (m) DRY or WET
SD 87.0308 21.4441 00:00 IST 05-08-2019 -0.0467 DRY
Sea1 87.0544 21.4152 00:00 IST 05-08-2019 -1.0653 DRY
4K 86.9927 21.4197 00:00 IST 05-08-2019 -0.1331 DRY
4KP1 86.9960 21.4166 00:00 IST 05-08-2019 -0.0863 DRY
Name: Longitude(degree) Latitude(degree) DATE_TIME Mean Sea Value (m) DRY or WET
SD 87.0308 21.4441 01:00 IST 05-08-2019 -0.0329 DRY
Sea1 87.0544 21.4152 01:00 IST 05-08-2019 -0.4067 DRY
4K 86.9927 21.4197 01:00 IST 05-08-2019 -0.0897 DRY
4KP1 86.9960 21.4166 01:00 IST 05-08-2019 -0.0676 DRY
如何使用OptionMenu在
DataFrame
我不会尝试在tkinter中显示它,因为它是不同的问题
我用值创建列表,这些值将显示在
选项菜单中
values = ['all'] + list(df['TIME'].unique())
和变量,按下按钮后我将使用该变量进行选择
selected = tk.StringVar()
当我得到选择,然后我可以使用
df2 = df[ filter ]
仅选择某些行
若你们需要一些不同的东西,那个么你们必须更好地描述这个问题,并展示一些可以用来测试和修改的代码
编辑:版本,数据显示在
GUI
中-不理想,但它显示所有或过滤的数据
import tkinter as tk
import pandas as pd
# --- functions ---
def showdata():
global table
# destroy old frame with table
if table:
table.destroy()
# create new frame with table
table = tk.Frame(frame_data)
table.grid(row=0, column=0)
# fill frame with table
row, column = df2.shape
for r in range(row):
for c in range(column):
e1 = tk.Entry(table)
e1.insert(1, df2.iloc[r, c])
e1.grid(row=r, column=c, padx=2, pady=2)
e1.config(state='disabled')
def on_click():
global df2
val = selected.get()
if val == 'all':
df2 = df
#next_button.grid_forget()
else:
df2 = df[ df['TIME'] == val ]
#next_button.grid(row=1, column=0)
print(df2)
showdata()
next_button.grid(row=1, column=0)
# --- main ---
frame_data = None
df = pd.DataFrame({
'TIME': ['00:00','00:00','01:00','01:00','02:00','02:00'],
'A': ['a','b','c','d','e','f'],
'B': ['x','x','y','y','z','z'],
})
root = tk.Tk()
values = ['all'] + list(df['TIME'].unique())
selected = tk.StringVar()
options = tk.OptionMenu(root, selected, *values)
options.pack()
button = tk.Button(root, text='OK', command=on_click)
button.pack()
# frame for table and button "Next Data"
frame_data = tk.Frame(root)
frame_data.pack()
exit_button = tk.Button(root, text="EXIT", command=root.destroy)
exit_button.pack()
# table with data - inside "frame_data" - without showing it
table = tk.Frame(frame_data)
#table.grid(row=0, column=0)
# buttom "Next Data" - inside "frame_data" - without showing it
next_button = tk.Button(frame_data, text="Next Data", command=showdata)
#next_button.grid(row=1, column=0)
root.mainloop()
使用选项创建下拉列表,从下拉列表中获取值,并在熊猫中使用它来选择要显示的行,然后显示它们。见:有类似的例子吗?如何在下拉列表中将行和列作为变量传递,我有400多行6列。在链接中,您有如何使用OptionMenu的示例。只需从OptionMenu中获取值并与pandas一起使用-
df2=df1[filter]
,然后显示df2
。坦白地说,我不明白你想选什么。如果您想要更好的示例,请首先创建我们可以运行和修改的最小工作代码。非常感谢,我非常感谢您的帮助,但我希望在下拉列表中选择时间00时显示所有行和列数据,然后显示时间00的所有行和列数据,请让我知道如何继续,00时间的行和列可以在entry中,也可以标记为any。谢谢,但我的例子就是这样。当您选择时间01:00
时,它会显示(print()
)所有有时间01:00
的行和列,实际上我希望在GUI上看到数据,而不是在终端上,因为我的try在下面,它在条目_tkinter.TclError:bad option“-row”中给出错误:必须是-after,-anchor,-before,-expand,-fill,-in,-ipadx,-ipady、-padx、-pady或-side使用Entryelse:df2=df[df['TIME']==val]print(df2)行,列=df.shape用于范围内的r(row):用于范围内的c(column):e1=tk.Entry(root)e1.insert(1,df.iloc[r,c])e1.pack(row=r,column=c)e1.config(state='disabled')正如我在回答中所写的:在GUI中显示是不同的大问题。
import tkinter as tk
import pandas as pd
# --- functions ---
def showdata():
global table
# destroy old frame with table
if table:
table.destroy()
# create new frame with table
table = tk.Frame(frame_data)
table.grid(row=0, column=0)
# fill frame with table
row, column = df2.shape
for r in range(row):
for c in range(column):
e1 = tk.Entry(table)
e1.insert(1, df2.iloc[r, c])
e1.grid(row=r, column=c, padx=2, pady=2)
e1.config(state='disabled')
def on_click():
global df2
val = selected.get()
if val == 'all':
df2 = df
#next_button.grid_forget()
else:
df2 = df[ df['TIME'] == val ]
#next_button.grid(row=1, column=0)
print(df2)
showdata()
next_button.grid(row=1, column=0)
# --- main ---
frame_data = None
df = pd.DataFrame({
'TIME': ['00:00','00:00','01:00','01:00','02:00','02:00'],
'A': ['a','b','c','d','e','f'],
'B': ['x','x','y','y','z','z'],
})
root = tk.Tk()
values = ['all'] + list(df['TIME'].unique())
selected = tk.StringVar()
options = tk.OptionMenu(root, selected, *values)
options.pack()
button = tk.Button(root, text='OK', command=on_click)
button.pack()
# frame for table and button "Next Data"
frame_data = tk.Frame(root)
frame_data.pack()
exit_button = tk.Button(root, text="EXIT", command=root.destroy)
exit_button.pack()
# table with data - inside "frame_data" - without showing it
table = tk.Frame(frame_data)
#table.grid(row=0, column=0)
# buttom "Next Data" - inside "frame_data" - without showing it
next_button = tk.Button(frame_data, text="Next Data", command=showdata)
#next_button.grid(row=1, column=0)
root.mainloop()