0

チュートリアルに従って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
4

1 に答える 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'

または、句nameAの前にデフォルト値を指定します。if

編集:
示されているように、コードにはさらにいくつかの問題があります。

  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()
于 2013-03-08T22:35:26.557 に答える