from tkinter import *
def generator(n):
print((n*(n+1))/2)
root = Tk()
userText = int()
entryBox = Entry(root, textvariable=userText)
entryBox.grid(column=0)
generateButton = Button(root, text='Generate')
generateButton.grid(row=0, column=1)
def leftClick(event):
generator(userText)
generateButton.bind('<Button-1>', leftClick)
root.mainloop()
我用这段代码来练习使用Tkinter,通过创建一个界面,我可以输入一个数字'n‘,然后单击generate按钮,在三角形数字序列中生成’n‘项。我几乎知道如何正确使用这个输入框功能,但是当我在运行这段代码之后输入任何数字时,我会得到一个'0.0’返回。另外,我尝试使用IntVar()
而不是int()
来实现userText,但是IntVar()
只是返回了这个错误:TypeError: unsupported operand type(s) for +: 'IntVar' and 'int'
。为什么这不管用,我该怎么解决呢?
发布于 2015-07-12 19:04:18
它不能工作的原因是因为您与textvariable
关联的entryBox
不是Tkinter变量类的实例: BooleanVar、DoubleVar、IntVar、StringVar。Tkinter跟踪这些变量类的更新,并相应地更新小部件。标准的Python变量(如int
)不会被跟踪。
因此,可以使用userText.get()
将IntVar
(整数)的值传递给生成器函数:
userText = IntVar()
def leftClick(event):
generator(userText.get())
或者,您可以忘记userText
变量,直接从entryBox
获取当前值:
entryBox = Entry(root)
def leftClick(event):
generator(int(entryBox.get()))
但我认为前者稍微好一点。
https://stackoverflow.com/questions/31374794
复制