2013-03-08 45 views
0

我正在学习使用Wxpython的教程,所以我还没有完全理解到底发生了什么,但是当我运行下面的代码时,它应该会显示为一个文本对话框并询问我的名字,但是对话框没有出现,因此nameA变量没有赋值,所以我得到下面的错误。我究竟做错了什么?wxpython textentrydialog不会出现

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

如果你不回答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' 

或给nameAif子句之前的默认值。

编辑:
如图所示有一些更多的问题在你的代码:

  1. 你需要调用ShowModal()为它工作。
  2. 您可能想在阅读答案后关闭对话框。
  3. 也许你想给更充足的/常规的名称为您的变量

然后,你将有:

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() 
+0

谢谢你,我想你说的和程序现在运行没有错误,但该对话框仍然不会出现,我从来没有选择任何信息或点击任何按钮。 – Taylor 2013-03-09 00:26:12

+1

你永远不会真正调用ShowModal。你只要看看METHOD ShowModal是否等于wx.ID_OK。而不是text.ShowModal == wx.ID_OK做text.ShowModal()== wx.ID_OK。 – 2013-03-09 04:15:34

+0

@SirDigbyChickenCaesar谢谢我没有看到它。我专注于OP的问题。答案现在已被纠正并扩展 – joaquin 2013-03-09 13:28:02