2016-09-21 65 views
1

我正在写一个python GUI应用程序,它从用户处获取一个条目,将其转换为一个整数,然后在datetime模块中使用该整数。不过,我遇到了一个希望你可以帮忙的问题。字符串变量只是拒绝变成一个整数

我正在使用Tkinter构建一个带有3个元素的GUI,一个输入框,一个“GO!”按钮和一个“退出”按钮。这里是我的简化代码:

class MyFirstGUI: 
    def __init__(self, master): 

     numberdate = StringVar() 

     Label(root,text="Enter the Number of days you would like to search in").grid(row=0) 
     self.a = Entry(root,textvariable=numberdate) 
     self.a.grid(row=0, column=1) 

     self.close_button = Button(master, text="Close", command=master.quit) 
      self.close_button.grid(row=3, column=1) 

     self.macro_button = Button(master, text="GO!", command=self.macro) 
      self.macro_button.grid(row=4, column=1) 

现在这似乎很简单,我知道我已保存的变量作为STRINGVAR但我将在稍后讨论。现在当“GO!”按下按钮,它执行的代码的另一部分,这是如下:

numberdate = self.a.get() 

int(numberdate) 

date_threshold = datetime.datetime.today() - datetime.timedelta(days=numberdate) 

然而,每当我运行此代码,蟒蛇引发以下错误我:

TypeError: unsupported type for timedelta days component: str 

现在很明显,这意味着可变数字日期还没有被转换为整数,它仍然是一个数字,但对于我的生活,我无法弄清楚为什么。

我已经尝试在代码的前半部分将变量保存为IntVar,但仍然没有运气。

在我的代码中有没有明显的错误,我错过了,或者我只是生气?

+0

如果您使用'self.a.get',为什么使用'textvariable'?你知道'textvariable'是可选的,通常完全没有必要吗? –

+0

@bryanoakley,你好,不,我不幸的是,我从我之前写过的应用中复制了我的tkinter代码,但没有注意到,我的错误! – Ruthus99

回答

5

转换发生,但没有人在听。您必须将名称重新绑定到返回值:

numberdate = int(numberdate) 
+0

我是个白痴,工作完美。 6:30我经历了漫长的一天,如果这使得它更容易理解。再次感谢! @wim – Ruthus99

+0

那么我的好奇心已经达到了高峰,那么为什么它没有工作,那么当我在开始时将'numberdate'定义为IntVar? @wim – Ruthus99

+0

对不起,我不知道。我对tkinter不太了解。 – wim