Python Tk_tkinter.TclError:无效的命令名";。42818376“;

Python Tk_tkinter.TclError:无效的命令名";。42818376“;,python,tkinter,Python,Tkinter,我得到的错误中提到的标题的职位,我真的只是希望这个工作。这个问题已经研究了一段时间,令人沮丧。我的最终目标是获得varables文本、chkvar和v的值 感谢任何人谁可以回答和帮助这一点 #!C:/Python27/python.exe from Tkinter import * import ImageTk, Image root = Tk() root.title('HADOUKEN!') def killwindow(): root.destroy() text = Text

我得到的错误中提到的标题的职位,我真的只是希望这个工作。这个问题已经研究了一段时间,令人沮丧。我的最终目标是获得varables文本、chkvar和v的值

感谢任何人谁可以回答和帮助这一点

#!C:/Python27/python.exe

from Tkinter import *
import ImageTk, Image

root = Tk()
root.title('HADOUKEN!')

def killwindow():
  root.destroy()

text = Text(root, height=16, width=40)
scroll = Scrollbar(root, command=text.yview)

text.configure(yscrollcommand=scroll.set)

text.grid(sticky=E)
scroll.grid(row=0,column=1,sticky='ns')

text.focus()

chkvar = IntVar()
chkvar.set(0)
c = Checkbutton(root, text="CaseIt", variable=chkvar)
c.grid(row=1,column=0,sticky=W)

v = ""
radio1 = Radiobutton(root, text="Src", variable=v, value=1)
radio1.grid(row=1,column=0)
radio1.focus()

radio2 = Radiobutton(root, text="Dst", variable=v, value=2)
radio2.grid(row=2,column=0)

b1 = Button(root, text="Submit", command=killwindow)
b1.grid(row=1, column=2)

img = ImageTk.PhotoImage(Image.open("Hadoken.gif"))
panel = Label(root, image = img)
panel.grid(row=0, column=2)

root.mainloop()


tk1 = text.get(text)
tk2 = chkvar.get(chkvar)
tk3 = v.get(v)


print tk1
print tk2
print tk3

一旦退出
mainloop
,小部件就不再存在。当您执行
text.get(text)
操作时,您正在尝试访问已删除的小部件。Tkinter根本不允许您在主窗口被破坏后访问小部件


快速解决方案是修改
killwindow
,在它破坏窗口之前获取值,并将它们存储在一个全局变量中,您可以在退出
mainloop
后访问该变量。

程序没有通过变量获取,因此它从未报告错误的方法调用。我对原始代码做了一些更改(添加了textval StringVar,并将v变量更改为另一个IntVar)。我觉得“关联变量”不会有问题,也不需要包含在killwindow代码中。我在killwindow中获取的唯一变量是文本数据

工作代码(用#++标记的更改行):

#!C:/Python27/python.exe

from Tkinter import *
import ImageTk, Image

root = Tk()
root.title('HADOUKEN!')

textval = StringVar() #++ added

def killwindow():
    textval.set(text.get('1.0',END)) #++ grab contents before destruction
    root.destroy()

text = Text(root, height=16, width=40)
scroll = Scrollbar(root, command=text.yview)

text.configure(yscrollcommand=scroll.set)

text.grid(sticky=E)
scroll.grid(row=0,column=1,sticky='ns')

text.focus()

chkvar = IntVar()
chkvar.set(0)
c = Checkbutton(root, text="CaseIt", variable=chkvar)
c.grid(row=1,column=0,sticky=W)

v = IntVar() #++ changed
v.set(1) #++ initial value
radio1 = Radiobutton(root, text="Src", variable=v, value=1)
radio1.grid(row=1,column=0)
radio1.focus()

radio2 = Radiobutton(root, text="Dst", variable=v, value=2)
radio2.grid(row=2,column=0)

b1 = Button(root, text="Submit", command=killwindow)
b1.grid(row=1, column=2)

img = ImageTk.PhotoImage(Image.open("Hadoken.gif"))
panel = Label(root, image = img)

panel.grid(row=0, column=2)

root.mainloop()

# windows are destroyed at this point

tk1 = textval.get() #++ changed
tk2 = chkvar.get() #++ changed
tk3 = v.get() #++ changed

print tk1
print tk2
print tk3