wxpython 文本输入对话框不显示

0 投票
1 回答
1138 浏览
提问于 2025-04-17 18:27

我正在跟着一个教程学习使用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 设置一个默认值。

编辑:
正如所提到的,你的代码还有一些其他问题:

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

撰写回答