2013-03-08 38 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