将Pandas数据帧转换为tkinter obj

2024-05-15 00:19:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试在tkinter中创建一个Pandas的dataframegui,当用户更改单元格的值(每个单元格都是一个条目)时,它就会更新。我想把数据帧转换成tkinter变量(tk.StringVar公司, 塔卡国际机场……)将是实现这一目标的最佳途径。在

我的问题是: 我不知道如何将dataframe转换成这些对象。我尝试使用astype函数,但它似乎无法转换类型。在

我的问题: 1) 如何将dataframe转换成tkinter变量?在

2)将dataframe转换成ttkinter变量是使dataframe立即更新的最佳方法吗?在


Tags: 数据对象用户目标dataframepandastkinter公司
1条回答
网友
1楼 · 发布于 2024-05-15 00:19:11

我认为pandas不能用StringVar作为dtype。在

您必须获取dataframe中的每个元素并创建分离的var = StringVar(value=df[row,col])(或var = StringVar() ; var.set(df[row,col]))),并将它们保存在标准列表中。在

但您可以将值直接放入Entry,并将bind()事件设置为Entry,它将在Entry或按Enter时执行函数。此函数可以将值从Entry复制到dataframe。在


编辑:示例代码

当您在任何Entry中单击Enter(或键盘上的Enter)时,dataframe中的值会发生变化。在

import pandas as pd
import tkinter as tk

df = pd.DataFrame([[1,2,3], [5,6,7], [101,102,103]])

#  - functions  -

def change(event, row, col):
    # get value from Entry
    value = event.widget.get()
    # set value in dataframe
    df.iloc[row,col] = value
    print(df)

#  - main      

root = tk.Tk()

# create entry for every element in dataframe

rows, cols = df.shape

for r in range(rows):
    for c in range(cols):
        e = tk.Entry(root)
        e.insert(0, df.iloc[r,c])
        e.grid(row=r, column=c)
        # ENTER 
        e.bind('<Return>', lambda event, y=r, x=c: change(event,y,x))
        # ENTER on keypad
        e.bind('<KP_Enter>', lambda event, y=r, x=c: change(event,y,x))

# start program

root.mainloop()

要更改每个键的数据帧中的值,请按<KeyRelease>

(当您按Ctrl+V时,它也能工作,所以您可以从剪贴板粘贴数据)

^{pr2}$

编辑:示例为class DataFrameEdit(tk.Frame)

相关问题 更多 >

    热门问题