Python 从其他类访问变量-自定义对话框
我试图创建一个对话框,从弹出对话框中获取社会保险号(或simular输入),但是当我尝试时,我得到一个错误,表示该类没有该属性。代码如下:Python 从其他类访问变量-自定义对话框,python,tkinter,Python,Tkinter,我试图创建一个对话框,从弹出对话框中获取社会保险号(或simular输入),但是当我尝试时,我得到一个错误,表示该类没有该属性。代码如下: from Tkinter import * class App: def __init__(self, master): b = Button(text="Click for social dialog", command=self.getSocial) b.grid(row=0, column=0) def
from Tkinter import *
class App:
def __init__(self, master):
b = Button(text="Click for social dialog", command=self.getSocial)
b.grid(row=0, column=0)
def getSocial(self):
d = socialDialog(root)
print d.social
class socialDialog:
def __init__(self, master):
self.top = Toplevel()
Label(self.top, text='Social Security #: ').grid(row=0, column=0)
self.entry = Entry(self.top)
self.entry.grid(row=0, column=1)
self.entry.focus_set()
self.top.bind('<Key>', self.formatData)
self.top.bind('<Return>', self.ok)
def formatData(self, master):
currentData = self.entry.get()
if len(currentData) == 3:
self.entry.insert(3, '-')
elif len(currentData) == 6:
self.entry.insert(6, '-')
elif len(currentData) > 11:
self.entry.delete(-1, END)
def ok(self, master):
self.social = self.entry.get()
self.top.destroy()
root = Tk()
app = App(root)
root.mainloop()
从Tkinter导入*
类应用程序:
定义初始(自我,主):
b=按钮(text=“单击社交对话”,command=self.getSocial)
b、 网格(行=0,列=0)
def getSocial(自我):
d=社会对话(根)
打印d.social
班级社会对话:
定义初始(自我,主):
self.top=Toplevel()
Label(self.top,text='Social Security#::').grid(行=0,列=0)
self.entry=entry(self.top)
self.entry.grid(行=0,列=1)
self.entry.focus_set()
self.top.bind(“”,self.formatData)
self.top.bind(“”,self.ok)
def格式数据(自身、主):
currentData=self.entry.get()
如果len(currentData)==3:
self.entry.insert(3“-”)
elif len(当前数据)=6:
self.entry.insert(6“-”)
elif len(当前数据)>11:
self.entry.delete(-1,END)
def正常(自身、主控):
self.social=self.entry.get()
self.top.destroy()
root=Tk()
app=app(根目录)
root.mainloop()
问题在于,您的socialDialog
类只在按下Return键后分配了social
属性,该属性调用ok
方法。因此,当您调用实例化socialDialog
的getSocial
,然后立即访问social
属性时,socialDialog
实例中的social
属性还不存在
我不确定您对这段代码的长期目标是什么,但一个直接的解决办法是更改getSocial
函数,从而:
def getSocial(self):
d = socialDialog(root)
# print d.social
然后加上
print self.social
到
确定
方法。问题是显示对话框后立即执行打印
,因为对话框不是以模式显示的
要解决此问题,请尝试以下方法:
d = socialDialog(root)
root.wait_window(d.top)
print d.social
但是请注意,如果关闭对话框而不输入任何内容,则仍然会发生错误。要防止出现这种情况,请确保社交
属性具有默认值:
class socialDialog:
social = None
这一次我能够弄明白,但是如果您打印错误堆栈跟踪,那么帮助您处理错误就容易多了——它包含有有价值的调试信息!