我目前正在使用Canopy来运行我的代码。我试图根据我在for
循环中给出的数字从GUI中的输入框中获取一些整数数据并打印出来。它不起作用。
这是错误:
Traceback (most recent call last):
File "C:\Program Files\Enthought\Canopy\App\appdata\canopy-1.5.5.3123.win- x86_64\lib\lib-tk\Tkinter.py", line 1532, in __call__
return self.func(*args)
File "C:\Users\SIMULATOR\Desktop\python\life cycle graph\try4.py", line 24, in const
z=int(s)
ValueError: invalid literal for int() with base 10: ''
我的代码是:
from Tkinter import *
root = Tk()
root.geometry('1000x600+400+400')
def const():
const_entries = []
for i in range(0, 4):
en = Entry(root)
en.pack()
en.place(x=50, y = 200 + 25*i)
s = en.get()
z = int(s)
const_entries.append(z)
j = i + 1
label = Label(root, text="Alternative %r"%j)
label.pack()
label.place(x = 200, y = 200 + 25*i)
print const_entries
button1 = Button(root, text="Construction cost", command = const).grid(row = 15, column = 0)
root.mainloop()
答案 0 :(得分:3)
澄清:假设s
不为空(en.get()
返回一些数字)。
查看此示例:
int('55.500000')
它会让你:ValueError: invalid literal for int() with base 10: '55.500000'
和
float('55.500000')
获取你:55.5
所以只需投放到float
而不是int
。
答案 1 :(得分:0)
当文字s
无法转换为int
时,int(s)
失败。
try:
z = int(s)
except ValueError:
z = 0
答案 2 :(得分:0)
此时致电en.get()
,它将返回''
,然后int('')
将引发错误。也许在获取整数之前,您需要将整数设置为entry
的字符串。
撰写button1 = Button(root, text="Construction cost", command = const).grid(row = 15, column = 0)
button1
时,不会是Button
个实例; button1
应该是grid
函数的结果。
答案 3 :(得分:0)
正如其他答案中所述,您的代码失败,因为当您调用const
方法时,您的条目为空。
假设您想在输入框中输入内容然后打印备选方案,我猜这样的代码可以完成这项工作:
from Tkinter import *
root=Tk()
root.geometry('1000x600+400+400')
def const():
const_entries = []
for i in range(4):
s = entryArray[i].get()
z = int(s)
const_entries.append(z)
print const_entries
button1 = Button(root, text="Construction cost", command = const).grid(row = 15, column = 0)
entryArray = []
for i in range(0,4):
entryArray.append(Entry(root))
#Insert default value 0
entryArray[i].insert(0, 0)
entryArray[i].pack()
entryArray[i].place(x = 50, y = 200 + 25*i)
label = Label(root, text="Alternative %d"%(i+1))
label.pack()
label.place(x = 200, y = 200 + 25*i)
root.mainloop()
这样您就可以在启动时创建条目,并为用户提供输入内容的时间。当您按建筑成本按钮时,将调用const
功能,该功能将读取您输入的内容并将其打印出来。
<强>更新强>
如果您希望用户输入我建议使用类并定义两个按钮的条目数:
用于在用户输入号码
用于处理用户在创建的条目中输入的号码
from Tkinter import *
root=Tk()
root.geometry('1000x600+400+400')
class MainWindow():
def __init__(self):
Label(root, text='Number of Entries').grid(row = 15, column = 0)
self.numEntry = Entry(root)
self.numEntry.grid(row = 15, column = 1)
self.numEntry.insert(0, 0)
Button(root, text="Build entries", command = self.buildEntries).grid(row = 15, column = 3)
Button(root, text = "Construction cost", command = self.const).grid(row = 18, column = 0)
def buildEntries(self):
self.entryArray = []
numEntries = int(self.numEntry.get())
for i in range(numEntries):
self.entryArray.append(Entry(root))
#Insert default value 0
self.entryArray[i].insert(0, 0)
self.entryArray[i].pack()
self.entryArray[i].place(x = 50, y = 200 + 25*i)
label=Label(root, text="Alternative %d"%(i+1))
label.pack()
label.place(x = 200, y = 200 + 25*i)
def const(self):
const_entries = []
numVal = len(self.entryArray)
for i in range(numVal):
s = self.entryArray[i].get()
z = int(s)
const_entries.append(z)
print 'Const Entries:', const_entries
m = MainWindow()
root.mainloop()