我正在使用pandastable在我的tkinter窗口中实现pandas数据帧,但是,出现了一个错误:
"NoneType"对象没有属性"bind_all">
当我使用这行时,不断出现:
table = pt = Table(window, dataframe=stats)
完整代码:
import tkinter as tk
import pandas as pd
from pandastable import Table, TableModel
places = {"Place":['1st'], "Name":['Derik'], "Time":['1.89']}
window = tk.Tk()
stats = pd.DataFrame.from_dict(places)
table = Table(window, dataframe=stats)
错误是因为pandastable
希望您将小部件放在容器中,而不是窗口中。您可以通过检查pandastable
源代码的第88行和第264行来找到这一点:
class Table(Canvas):
...
def __init__(self, parent=None, model=None, dataframe=None, ...):
self.parentframe = parent # Line 88
...
def doBindings(self):
...
self.parentframe.master.bind_all("<KP_8>", self.handle_arrow_keys) # Line 264
正如您所看到的,self.parentframe
是您传入的父级,在您的情况下是window
。在第264行中,他们访问self.parentframe
的master
,这是None
,因为根窗口没有主窗口。但是像框架这样的其他小部件可以。
所以你所要做的就是,把这个小部件放在一个容器里,比如Frame
:
frame = tk.Frame(window)
frame.pack()
table = Table(frame, dataframe=stats)
table.show()