StringVar()/ IntVar()不返回值

时间:2018-03-20 11:14:38

标签: python python-3.x tkinter radio-button tkinter-entry

请注意,我在这个主题上也提到过类似的相关答案

1)有什么情况,StringVar()/ IntVar()会返回空白/ 0值resp。?

2)下面是我应用于我的应用程序中的一个功能的代码的较小部分。请告诉我我的代码中缺少什么来检索预期的输出。

from tkinter import *

class App(Frame):
    def __init__(self,master):
        Frame.__init__(self,master)
        self.pack()
        Label(self,text="Choose timer options:").pack()
        self.delayvar = IntVar()
        self.delayradio1 = Radiobutton(self,text="Hours",variable=self.delayvar,value=1,command=self.delayfunc)
        self.delayradio1.pack()
        self.delayradio2 = Radiobutton(self,text="Minutes",variable=self.delayvar,value=2,command=self.delayfunc)
        self.delayradio2.pack()
        self.delayradio3 = Radiobutton(self,text="Seconds",variable=self.delayvar,value=3,command=self.delayfunc)
        self.delayradio3.pack()

    def delayfunc(self):
        self.delayvarvalue = self.delayvar.get()
        self.delayentryvar = StringVar()    # or IntVar()
        self.delayent = Entry(self,textvariable=self.delayentryvar)
        self.delayent.pack()
        if self.delayvarvalue == 1:
            Button(self,text="save delay",command=self.delayfunc1).pack()
        self.delayentry = self.delayent.get()   #self.delayentryvar.get()
        print(self.delayentry)

    def delayfunc1(self):
        self.delval = Text(self,height=1, width=10)
        self.delval.pack()
        self.delval.insert(END,self.delayentry)

if __name__ == '__main__' :
    root = Tk()
    App(root)
    root.title("Delay Timer")
    root.geometry("200x200")
    root.mainloop()

1 个答案:

答案 0 :(得分:1)

  
      
  1. "有哪些案例,StringVar() / IntVar()会返回空白/ 0值?"
  2.   

首先,通过返回,我必须假设你的意思是get方法返回它们,因为如果没有,答案 总是从不(它们总是返回None并且不等于0可能会分别变化,因为它们理想地是各个类的对象,或者它们不能这样做在这种情况下,我怀疑他们返回None

两个get方法的案例返回相应的值是相同的,它们从未设置''和{{1} }是他们的默认值)或他们明确设置为默认值

  
      
  1. 以下是我应用于我的应用中的一个功能的代码的较小部分。请告诉我我的代码中缺少什么来检索预期的输出。
  2.   

对我来说,你的预期输出是什么并不明显,但我可以指出某些的代码方面看起来很麻烦。

0完全按照应有的方式实例化并且正常工作,而:

self.delayvar目前没有用处,完全多余。这主要是因为self.delayentryvar对象已经有Entry方法与get对象的方法完全相同,因此如果这是需要的核心StringVar,然后没有用

StringVar

self.delayent.get()

实际上与上面解释的相同,并且提供的代码OP将始终返回self.delayentryvar.get() 。这是因为它们是几乎在不久之前首次创建的''对象的当前值的返回值。 条目也不是Entry任何内容,因此它们会返回insertNone

添加:

''

self.delayent.insert('end', 'TEST') 之内的某个地方之前:

delayfunc

更好地了解正在发生的事情。