wxpython 文本输入对话框不显示
我正在跟着一个教程学习使用Wxpython,所以我还不太明白发生了什么。但是当我运行下面的代码时,应该会出现一个对话框,问我名字。然而,对话框并没有出现,因此nameA这个变量没有被赋值,所以我得到了下面的错误。请问我哪里做错了?
Python程序:
import wx
class main(wx.Frame):
def __init__(self, parent, id):
wx.Frame.__init__(self, parent, id, "Test Window", size = (300, 200))
panel = wx.Panel(self)
text= wx.TextEntryDialog(None, "What is your name?", "Title", " ")
if text.ShowModal == wx.ID_OK:
nameA = text.GetValue()
wx.StaticText(panel, -1, nameA, (10, 10))
if __name__ == "__main__":
app = wx.PySimpleApp()
frame = main(parent=None, id= -1)
frame.Show()
app.MainLoop()
我收到的错误:
Traceback (most recent call last):
File "C:\Users\Taylor Lunt\Desktop\deleteme.py", line 17, in <module>
frame = main(parent=None, id= -1)
File "C:\Users\Taylor Lunt\Desktop\deleteme.py", line 12, in __init__
wx.StaticText(panel, -1, nameA, (10, 10))
UnboundLocalError: local variable 'nameA' referenced before assignment
1 个回答
1
如果你没有回答“OK”,那么 nameA
就不会被设置。
你可以使用一个 else
语句来给它一个备用值:
text= wx.TextEntryDialog(None, "What is your name?", "Title", " ")
if text.ShowModal == wx.ID_OK: # this is not correct. see edit
nameA = text.GetValue()
else:
nameA = 'Nothing'
或者在 if
语句之前给 nameA
设置一个默认值。
编辑:
正如所提到的,你的代码还有一些其他问题:
- 你需要调用
ShowModal()
让它正常工作。 - 可能你想在读取答案后关闭对话框。
- 也许你想给你的变量起一些更合适或更常见的名字。
这样你就会得到:
dlg = wx.TextEntryDialog(None, "What is your name?", "Title", " ")
answer = dlg.ShowModal()
if answer == wx.ID_OK:
nameA = dlg.GetValue()
else:
nameA = 'Nothing'
dlg.Destroy()