【发布时间】: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