Python StringVar()/IntVar()不返回值
请注意,我在这个问题上也提到了类似的相关答案 1) 在什么情况下,StringVar()/IntVar()将分别返回空的/0值 2) 下面是我应用于我的应用程序中的一个功能的小部分代码。请告诉我检索预期输出的代码中缺少了什么Python StringVar()/IntVar()不返回值,python,python-3.x,tkinter,radio-button,tkinter-entry,Python,Python 3.x,Tkinter,Radio Button,Tkinter Entry,请注意,我在这个问题上也提到了类似的相关答案 1) 在什么情况下,StringVar()/IntVar()将分别返回空的/0值 2) 下面是我应用于我的应用程序中的一个功能的小部分代码。请告诉我检索预期输出的代码中缺少了什么 from tkinter import * class App(Frame): def __init__(self,master): Frame.__init__(self,master) self.pack() L
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()
StringVar()
/IntVar()
将分别返回空白/0值?”get
方法对它们的返回,因为如果不是,答案总是和从不(它们总是返回None
,并且不等于0
)可能会分别不同,因为它们是各自类的理想对象,或者他们没有这样做,在这种情况下,我怀疑他们返回None
两个get
方法返回各自值的情况相同,它们要么从未被设置('
和0
是它们的默认值),要么被显式设置为默认值
self.delayvar
按其应有的方式进行实例化,并且工作正常,然而:
self.delayentryvar
目前没有任何用途,它是完全冗余的。这主要是因为Entry
对象已经有了一个get
方法,它的工作方式与StringVar
对象的工作方式完全相同,因此,如果这是需要StringVar
的核心,那么它就没有用了
以及:
实际上与上面解释的内容相同,在代码中,OP始终返回'
。这是因为它们是几乎在一瞬间之前首次创建的条目
对象的当前值的返回。条目也没有插入任何内容,因此它们返回None
或'
加:
在之前的某个地方的内部delayfunc
:
self.delayentry = self.delayent.get() #self.delayentryvar.get()
更好地了解正在发生的事情。我不知道问题出在哪里。此程序的哪个部分发生意外?Entry
self.delayent
未返回值,我将其存储在self.delayentry
中,稍后我将使用它显示在文本字段中,它返回的是正确的值。新创建的条目是空的,因此当然self.delayent.get()
返回一个空字符串。你并没有给用户一个输入任何文本的机会,是吗?理解你的观点。但我在许多教程中看到,他们在创建条目之前显式创建textvariable
,这是为什么so@cs2612我不知道他们为什么会这样做,也许看看我问的这个问题:@cs2612他们这样做可能是为了防止在创建输入字段时出错。如果在创建输入字段后定义了一个文本变量,则会出现如下错误:NameError:name“variable\u name”未定义
self.delayentryvar.get()
self.delayent.insert('end', 'TEST')
self.delayentry = self.delayent.get() #self.delayentryvar.get()