【问题标题】:TypeError: 'Frame' object is not callable errorTypeError:“框架”对象不可调用错误
【发布时间】:2017-08-25 08:40:12
【问题描述】:

我正在尝试编写一个代码,该代码将首先从一个 excel 文档创建一个数据框,创建一个 tkinter 窗口和一个窗口内的框架,它本质上是一个 megawidget。底部的 for 循环用于创建 megawidget 的新实例。

import pandas
from tkinter import *
#assigns a dataframe variable
summer17=pandas.read_excel("summer17.xlsx","list")

window=Tk()#Start of the main window
row_widget = Frame(window)#Creates a frame or "megawidget"
row_widget.grid()
#Variaous variables for widget parameters
tw_height = 1.5
tw_width1 = 30
tw_width2 = 5
brew_row = 14
#Text blocks for megawidget
t1=Text(row_widget,height=tw_height,width=tw_width1)
t1.grid(row=0,column=0)
t1.insert(END,summer17.iloc[brew_row,0])

t2=Text(row_widget,height=tw_height,width=tw_width1)
t2.grid(row=0,column=1)
t2.insert(END,summer17.iloc[brew_row,1])

t3=Text(row_widget,height=tw_height,width=tw_width2)
t3.grid(row=0,column=2)
t3.insert(END,summer17.iloc[brew_row,2])

t4=Text(row_widget,height=tw_height,width=tw_width2)
t4.grid(row=0,column=3)
t4.insert(END,summer17.iloc[brew_row,3])

t5=Text(row_widget,height=tw_height,width=tw_width2)
t5.grid(row=0,column=4)
t5.insert(END,summer17.iloc[brew_row,4])

t6=Text(row_widget,height=tw_height,width=tw_width2)
t6.grid(row=0,column=5)
t6.insert(END,summer17.iloc[brew_row,5])
#for loop to create new instances of the megawidget
for i in range(len(summer17.index)):
    row = row_widget(Frame)
    row.grid(row=i,column=0)

window.mainloop()

毕竟,我得到了这个错误

Traceback(最近一次调用最后一次): 文件“dataframe_v1.py”,第 40 行,在 行 = row_widget(帧) TypeError: 'Frame' 对象不可调用

【问题讨论】:

  • 您只是创建了 row_widget 的单个实例:您还没有实现任何允许您创建更多它们的函数或类,并且小部件没有内置的复制方式.
  • 这不是 row.grid(row=i,column=0) 行应该做的吗?另外,你说的重复是什么意思?它们都(理论上)应该是有效地重新创建数据框或电子表格的唯一行,它应该与从中提取数据的 Excel 电子表格基本相同。
  • 既然你已经定义了row_widget = Frame(window),那你不是只需要row = row_widget吗?
  • 是的,这就是问题所在。我发誓有时这是最简单的事情。现在错误消失了,我必须弄清楚如何让 for 循环在每次迭代时创建一个新的小部件。但是,这是另一个问题线程的问题。

标签: python-3.x tkinter


【解决方案1】:

正如上面 cmets 所指出的,这个问题的解决方案是从 for 循环中删除 (Frame)。它现在应该看起来像

for i in range(len(summer17.index)):
    row = row_widget
    row.grid(row=i,column=0)

【讨论】:

    猜你喜欢
    • 2020-09-30
    • 1970-01-01
    • 2018-12-03
    • 2012-04-21
    • 2020-06-24
    • 2014-06-13
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多