gpt4 book ai didi

python - 更改 pandastable 中显示的数据框(tkinter 小部件)

转载 作者:行者123 更新时间:2023-12-01 08:25:21 27 4
gpt4 key购买 nike

我目前正在开发一个显示 pandas 数据帧的 GUI。

我想要一个 OptionMenu 从列表中选择数据帧,然后将其显示在 pandastable 中。

我当前的方法:我的类中有一个属性 curTable,我最初用第一个数据帧填充它,该数据帧正确显示在 pandastable 中。然后,当连接到 OptionMenuStringVar 值发生变化时,我会调用一个回调函数来更改属性并重新绘制 pandastable。

import tkinter as tk
from pandastable import Table, TableModel
import pandas as pd

class test_gui():

def __init__(self):
self.root = tk.Tk()
LF3 = tk.LabelFrame(self.root, text='Output')
LF3.grid(column=2, row=0, padx=(4,4), pady=4, sticky="nsew")

def tableSelChange(*args):
df1 = pd.DataFrame([[1,2,3],['what', 'is', 'this'],[123, 123, 123]],
columns=['This', 'is', 'a Test'])
df2 = pd.DataFrame([['bruh', 'this', 'is a gui'],[1235, 1235, 1235],[123, 123, 123]],
columns=['This', 'is', 'a Test2'])

if tableSelVar.get() == 'One':
print('ONE')
self.curTable = df1
elif tableSelVar.get() == 'Two':
print('Two')
self.curTable = df2
#self.dfTbl.redraw()
#dfTbl.tableChanged()
dfTbl.redraw()

tableSelVar = tk.StringVar(LF3)
tableSelVar.set('No tables available')

tableSelMenu = tk.OptionMenu(LF3, tableSelVar, 'One', 'Two')
tableSelMenu.pack()

df1 = pd.DataFrame([[1,2,3],['what', 'is', 'this'],[123, 123, 123]],
columns=['This', 'is', 'a Test'])
df2 = pd.DataFrame([['bruh', 'this', 'is a gui'],[1235, 1235, 1235],[123, 123, 123]],
columns=['This', 'is', 'a Test2'])

self.curTable = df1

LLF31 = tk.LabelFrame(LF3, text='Table editor')
LLF31.pack()
dfTbl = Table(LLF31, dataframe=self.curTable, showtoolbar=True, showstatusbar=True)
dfTbl.show()

tableSelVar.trace('w', tableSelChange)

self.root.mainloop()

if __name__ == '__main__':
t = test_gui()

当我选择第二个数据帧时,pandastable 不会改变。我怎样才能实现这个目标?

最佳答案

好的,我想我有解决方案:

我使用 TableModel 加载数据帧,然后使用 pandastable 的 updateModel() 方法。

def tableSelChange(*args):
df1 = pd.DataFrame([[1,2,3],['what', 'is', 'this'],[123, 123, 123]],
columns=['This', 'is', 'a Test'])
df2 = pd.DataFrame([['bruh', 'this', 'is a gui'],[1235, 1235, 1235],[123, 123, 123]],
columns=['This', 'is', 'a Test2'])

if tableSelVar.get() == 'One':
print('ONE')
dfTbl.updateModel(TableModel(df1))
elif tableSelVar.get() == 'Two':
print('Two')
dfTbl.updateModel(TableModel(df2))
dfTbl.redraw()

关于python - 更改 pandastable 中显示的数据框(tkinter 小部件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54290748/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com