wxPython:使用Show()和Hide()
我正在开发一个简单的程序来收集和检查用户输入。除了展示 一个消息框如果用户提供的输入未通过检查,我还想添加一个提示 就在输入字段的右侧,告诉用户需要什么类型的数据。为了实现这一点,我创建了一个单行FlexGridSizer,由以下内容组成: [(wx.StaticText,“名称”),(wx.TextCtrl,“此处用户输入”),(wx.StaticText,“输入指南”)] 初始化时,“输入指南”小部件被隐藏。如果用户未能在提供的字段中输入任何内容,然后点击OK按钮,我希望发生三件事wxPython:使用Show()和Hide(),python,wxpython,hide,show,validation,Python,Wxpython,Hide,Show,Validation,我正在开发一个简单的程序来收集和检查用户输入。除了展示 一个消息框如果用户提供的输入未通过检查,我还想添加一个提示 就在输入字段的右侧,告诉用户需要什么类型的数据。为了实现这一点,我创建了一个单行FlexGridSizer,由以下内容组成: [(wx.StaticText,“名称”),(wx.TextCtrl,“此处用户输入”),(wx.StaticText,“输入指南”)] 初始化时,“输入指南”小部件被隐藏。如果用户未能在提供的字段中输入任何内容,然后点击OK按钮,我希望发生三件事 字段更改
编辑:对于新问题,我将使用pubsub来解决。将侦听器放在MyDialog类的init中,然后在另一个类中运行Validate方法时向其发布消息。在理论上将在MyDialog中创建的消息处理程序中,您需要在对话框上显示其他小部件并调用Layout()。这将使其适当调整大小 您可以在此处阅读关于pubsub的教程: 以下是原始问题: 您的Validate方法从未启动过,因此我重新安排了Validate和OnChar方法,使其如下所示:
import string
def Validate(self, win):
"""
Enter your code here...
"""
return True
def OnChar(self, event):
txtObj = event.GetEventObject()
txt = txtObj.GetValue()
if txt == "": txt = '0'
key = chr(event.GetKeyCode())
if key in string.digits:
if int(txt+str(key)) < 150:
event.Skip()
else:
msg = "You have entered an age greater than 150!"
wx.MessageBox(msg, "Improbable entry", style=wx.OK|wx.ICON_ERROR)
# PROBLEM ARISES HERE
# ===================
MyDialog().ageWarning_ST.Show()
MyDialog().mainSizer.Fit(MyDialog())
return False
key = event.GetKeyCode()
if key in(wx.WXK_RETURN, wx.WXK_DELETE, wx.WXK_BACK):
event.Skip()
elif (chr(key)).isdigit():
event.Skip()
else:
return
导入字符串
def验证(自我,赢):
"""
在这里输入您的代码。。。
"""
返回真值
def OnChar(自身、事件):
txtObj=event.GetEventObject()
txt=txtObj.GetValue()
如果txt==“”:txt='0'
key=chr(event.GetKeyCode())
如果输入string.digits:
如果int(txt+str(键))<150:
event.Skip()
其他:
msg=“您输入的年龄大于150岁!”
MessageBox(消息,“不可能的输入”,style=wx.OK | wx.ICON_错误)
#这里出现了问题
# ===================
MyDialog().ageWarning\u ST.Show()
MyDialog().mainSizer.Fit(MyDialog())
返回错误
key=event.GetKeyCode()
如果输入(wx.WXK_返回,wx.WXK_删除,wx.WXK_返回):
event.Skip()
elif(chr(key)).isdigit():
event.Skip()
其他:
返回
还请注意,我导入了字符串模块,使事情变得更简单。代码可能需要一些清理,但它在我的机器上工作。我已将您的代码添加到Mike中,但仍然无法获得我想要的行为。我正试图弄清楚的是StaticText小部件的.Show()和.Hide()。我编辑了我的问题,使代码更短,目标更明确。谢谢,保罗。非常感谢。现在按预期工作。下面得到迈克回应的代码有点像狗的早餐。我已经对它进行了大量的修改,以使我的目标更加清晰,尽管这确实意味着迈克的代码与新的和改进的问题无关
import string
def Validate(self, win):
"""
Enter your code here...
"""
return True
def OnChar(self, event):
txtObj = event.GetEventObject()
txt = txtObj.GetValue()
if txt == "": txt = '0'
key = chr(event.GetKeyCode())
if key in string.digits:
if int(txt+str(key)) < 150:
event.Skip()
else:
msg = "You have entered an age greater than 150!"
wx.MessageBox(msg, "Improbable entry", style=wx.OK|wx.ICON_ERROR)
# PROBLEM ARISES HERE
# ===================
MyDialog().ageWarning_ST.Show()
MyDialog().mainSizer.Fit(MyDialog())
return False
key = event.GetKeyCode()
if key in(wx.WXK_RETURN, wx.WXK_DELETE, wx.WXK_BACK):
event.Skip()
elif (chr(key)).isdigit():
event.Skip()
else:
return