我正在尝试创建一个对话框,该对话框将从弹出对话框中获取社会安全号码(或类似输入),但是当我尝试时,我得到一个错误,说该类没有该属性。这是代码:
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()
答案 0 :(得分:0)
问题是,您的socialDialog
课程只有在按social
属性,这会调用ok
方法。因此,当您调用getSocial
(实例化socialDialog
,然后立即访问social
属性时,social
实例中的socialDialog
属性不存在爱好。
我不确定您对此代码的长期目标是什么,但立即解决方法是立即更改getSocial
功能:
def getSocial(self):
d = socialDialog(root)
# print d.social
然后添加
print self.social
到ok
方法。
答案 1 :(得分:0)
问题是在显示对话框后立即执行print
,因为对话框没有以模态显示。
要解决此问题,请尝试以下方法:
d = socialDialog(root)
root.wait_window(d.top)
print d.social
但请注意,如果关闭对话框而未输入任何内容,则仍会出现错误。为防止这种情况,请确保social
属性具有默认值:
class socialDialog:
social = None