如何从Python中的'for'循环获取整数值并打印它

时间:2015-12-16 08:05:02

标签: python python-2.7 for-loop tkinter canopy

我目前正在使用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()

4 个答案:

答案 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()