簡體   English   中英

將Pandas DataFrame轉換為tkinter對象

[英]Converting Pandas DataFrame to tkinter object

我正在嘗試在tkinter中創建一個熊貓的DataFrame GUI,以在用戶更改單元格的值(每個單元格是一個Entry)的時刻更新。 我認為將DataFrame轉換為tkinter變量(tk.StringVar,tk.IntVar ...)將是實現此目標的最佳方法。

我的問題:我不確定如何將數據幀轉換為那些對象。 我嘗試使用astype函數,但它似乎無法轉換類型。

我的問題:1)如何將數據框轉換為tkinter變量?

2)將數據框轉換為ttkinter變量是使數據框立即更新的最佳方法嗎?

我認為pandas不能將StringVar用作dtype

您將必須獲取數據幀中的每個元素,並創建單獨的var = StringVar(value=df[row,col]) (或var = StringVar() ; var.set(df[row,col])) )並將其保留在標准清單。

但是,你可以把值直接Entry ,並bind()事件Entry將在執行功能的東西,每次改變Entry或按Enter 該函數可以將值從Entry復制到dataframe


編輯:示例代碼

它改變的價值dataframe ,當你點擊Enter (或Enter鍵盤上)在任何Entry

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>值,請使用<KeyRelease>

(它也可以在按Ctrl+V時起作用,因此可以從剪貼板粘貼數據)

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)
        e.bind('<KeyRelease>', lambda event, y=r, x=c: changed(event, y,x))

編輯:作為類DataFrameEdit(tk.Frame)的示例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM