【问题标题】:wxpython textentrydialog won't appearwxpython textentrydialog 不会出现
【发布时间】:2013-02-24 14:32:59
【问题描述】:

我正在按照教程尝试学习使用 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

【问题讨论】:

    标签: python textbox dialog wxpython


    【解决方案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()
    

    【讨论】:

    • 谢谢,我按照你说的进行了尝试,现在程序运行没有错误,但对话框仍然没有出现,我也无法选择输入任何信息或单击任何按钮。
    • 你从来没有真正调用过 ShowModal。您只需查看 METHOD ShowModal 是否等于 wx.ID_OK。而不是 text.ShowModal == wx.ID_OK 做 text.ShowModal() == wx.ID_OK.
    • @SirDigbyChickenCaesar 谢谢我没看到。我专注于OP的问题。答案现已更正和扩展
    • 哦,所以对话框只有在调用 ShowModal 时才会出现。谢谢。
    • @Taylor 如果对您有用,请不要忘记选择和/或支持答案
    猜你喜欢
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 2014-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多