考虑:
from Tkinter import *
class App(Frame):
def __init__(self, master):
Frame.__init__(self, master)
self.grid()
self.create_widgets()
def create_widgets(self):
self.entryLabel = Label(self, text="Please enter a list of numbers (no commas):")
self.entryLabel.grid(row=0, column=0, columnspan=2)
self.listEntry = Entry(self)
self.listEntry.grid(row=0, column=2, sticky=E)
self.entryLabel = Label(self, text="Please enter an index value:")
self.entryLabel.grid(row=1, column=0, columnspan=2, sticky=E)
self.indexEntry = Entry(self)
self.indexEntry.grid(row=1, column=2)
self.runBttn = Button(self, text="Run Function", command=self.psiFunction)
self.runBttn.grid(row=2, column=0, sticky=W)
self.answerLabel = Label(self, text="Output List:")
self.answerLabel.grid(row=2, column=1, sticky=W)
该代码构建了一个小型用户界面,然后用于以下功能:
def psiFunction(self):
j = int(self.indexEntry.get())
valueList = list(self.listEntry.get())
x = map(int, valueList)
if x[0] != 0:
x.insert(0, 0)
rtn = []
for n2 in range(0, len(x) * j - 2):
n = n2 / j
r = n2 - n * j
if r == 0:
rtn.append(j * x[n])
else:
rtn.append(j * x[n] + r * (x[n + 1] - x[n]))
self.answer = Label(self, text=rtn)
self.answer.grid(row=2, column=2, sticky=W)
if __name__ == "__main__":
root = Tk()
app = App(root)
root.mainloop()
例如,如果我们取j=3,并且我们的列表x=[0,1,2,3,4,5],我们得到[0,1,2.3..,13,14,15]作为我们的输出列表(尽管程序将其输出为字符串)。这是通过使用固定参数j的输入列表中的项来计算长度为len(x)*j-2的输出列表的值来完成的。现在,这个例子可以很好地使用上面的代码。然而,如果我尝试采取,比如说,j=4x=[0,1,2,3,4,5]什么都不会出现-我没有输出。我也没有收到任何错误消息,所以我不确定为什么会出现这个问题。起初,我认为这可能与列表长度小于j值有关(只是胡乱猜测),但这个例子表明我的想法是错误的。有人知道为什么会发生这种事吗?
注意:标题是指在使用从tkinter代码中删除的python函数时不会发生这种情况。
编辑:更改了定义的代码
def psiFunction(self):
j = int(self.indexEntry.get())
valueList = list(self.listEntry.get())
x = map(int, valueList)
length = len(x)
if x[0] != 0:
x.insert(0, 0)
rtn = []
for n2 in range(0, length * j):
n = n2 / j
r = n2 - n * j
if r == 0:
rtn.append(j * x[n])
else:
rtn.append(j * x[n] + r * (x[n + 1] - x[n]))
self.answer = Label(self, text=rtn)
self.answer.grid(row=2, column=2, sticky=W)
我不知道为什么你的计算机中没有错误,但你的这部分代码确实给出了x=[0,1,2,3,4,5]
和j=4
的错误。
for n2 in range(0, len(x) * j - 2):
n = n2 / j
r = n2 - n * j
if r == 0:
rtn.append(j * x[n])
else:
rtn.append(j * x[n] + r * (x[n + 1] - x[n]))
让我们看看,range(0, len(x) * j - 2)
等于range(0, 22)
,所以当n2
变为21时,n = 5, j = 1
。它将进入else,然后会出现x[6]
,这将引发索引错误,并且您无法获得所需的输出。