考虑:
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=4 x = [0,1,2,3,4,5] 什么都没有出现 - 我没有得到任何输出。我也没有收到任何错误消息,所以我不确定为什么会出现这个问题。起初我认为这可能与列表长度小于 j 值有关(只是猜测)但这个例子表明我的想法是错误的。有谁知道为什么会发生这种情况?
注意:标题指的是使用 python 中的函数时不会发生这种情况,从 tkinter 代码中删除。
编辑:更改定义代码
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)