- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我需要使用 wx.Textvalidator 验证文本框。有什么可以帮我做这个吗?
我如何将 wx.FILTER_ALPHA 与验证器一起使用,如果用户输入错误,我该如何给他们消息?
我需要在点击保存按钮时验证所有输入吗?
有人可以为此提供示例代码吗?
最佳答案
这是wxWidgets的一个特性,并没有在wxPython中实现。
http://www.wxpython.org/docs/api/wx.TextValidator-class.html - 没有找到
同时:
http://docs.wxwidgets.org/trunk/classwx_text_validator.html http://docs.wxwidgets.org/stable/wx_wxtextvalidator.html
wxPython demo中有Validators的demo:
import wx
class TextObjectValidator(wx.PyValidator):
""" This validator is used to ensure that the user has entered something
into the text object editor dialog's text field.
"""
def __init__(self):
""" Standard constructor.
"""
wx.PyValidator.__init__(self)
def Clone(self):
""" Standard cloner.
Note that every validator must implement the Clone() method.
"""
return TextObjectValidator()
def Validate(self, win):
""" Validate the contents of the given text control.
"""
textCtrl = self.GetWindow()
text = textCtrl.GetValue()
if len(text) == 0:
wx.MessageBox("A text object must contain some text!", "Error")
textCtrl.SetBackgroundColour("pink")
textCtrl.SetFocus()
textCtrl.Refresh()
return False
else:
textCtrl.SetBackgroundColour(
wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW))
textCtrl.Refresh()
return True
def TransferToWindow(self):
""" Transfer data from validator to window.
The default implementation returns False, indicating that an error
occurred. We simply return True, as we don't do any data transfer.
"""
return True # Prevent wxDialog from complaining.
def TransferFromWindow(self):
""" Transfer data from window to validator.
The default implementation returns False, indicating that an error
occurred. We simply return True, as we don't do any data transfer.
"""
return True # Prevent wxDialog from complaining.
#----------------------------------------------------------------------
class TestValidateDialog(wx.Dialog):
def __init__(self, parent):
wx.Dialog.__init__(self, parent, -1, "Validated Dialog")
self.SetAutoLayout(True)
VSPACE = 10
fgs = wx.FlexGridSizer(0, 2)
fgs.Add((1,1));
fgs.Add(wx.StaticText(self, -1,
"These controls must have text entered into them. Each\n"
"one has a validator that is checked when the Okay\n"
"button is clicked."))
fgs.Add((1,VSPACE)); fgs.Add((1,VSPACE))
label = wx.StaticText(self, -1, "First: ")
fgs.Add(label, 0, wx.ALIGN_RIGHT|wx.CENTER)
fgs.Add(wx.TextCtrl(self, -1, "", validator = TextObjectValidator()))
fgs.Add((1,VSPACE)); fgs.Add((1,VSPACE))
label = wx.StaticText(self, -1, "Second: ")
fgs.Add(label, 0, wx.ALIGN_RIGHT|wx.CENTER)
fgs.Add(wx.TextCtrl(self, -1, "", validator = TextObjectValidator()))
buttons = wx.StdDialogButtonSizer() #wx.BoxSizer(wx.HORIZONTAL)
b = wx.Button(self, wx.ID_OK, "OK")
b.SetDefault()
buttons.AddButton(b)
buttons.AddButton(wx.Button(self, wx.ID_CANCEL, "Cancel"))
buttons.Realize()
border = wx.BoxSizer(wx.VERTICAL)
border.Add(fgs, 1, wx.GROW|wx.ALL, 25)
border.Add(buttons)
self.SetSizer(border)
border.Fit(self)
self.Layout()
app = wx.App(redirect=False)
f = wx.Frame(parent=None)
f.Show()
dlg = TestValidateDialog(f)
dlg.ShowModal()
dlg.Destroy()
app.MainLoop()
关于python - wx.TextCtrl 和 wx.Validator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2198903/
已解决:感谢下面 Aya 的回答,我现在知道问题是由第 18 行的 self.panel = wx.Panel(self, -1) 引起的。我创建了一个面板,但没有在其上附加任何内容。原始问题描述仍如
我想要一个 wx.TextCtrl获取面板的整个剩余宽度。它放置了一个 wx.StaticText和一个 wx.Button在水平 wx.BoxSizer在垂直 wx.BoxSizer在 wx.lib
我正在寻找一种将 textctrl 字段中输入的文本转换为大写的方法。我尝试使用验证器并使用“ord”将键事件对象的值转换为大写字母字符值,但是我找不到任何“set”方法。我也许能够直接访问事件类变量
我正在寻找一种将 textctrl 字段中输入的文本转换为大写的方法。我尝试使用验证器并使用“ord”将键事件对象的值转换为大写字母字符值,但是我找不到任何“set”方法。我也许能够直接访问事件类变量
我正在使用 wxPython-Phoenix 在 MS Windows 8.1 上编写一个计算器应用程序,其中我希望用户在其中一个参数字段中输入值时立即执行计算。为了实现这一点,我使用由任何参数字段生
我写了这段代码: # -*- coding: utf-8 -*- import wx import wx.animate import wx.lib.agw.hyperlink as hl ID_BU
平台窗口 使用 Windows API 创建了一个控件:CreateWindowExW 并将其父级设置为面板 hwnd 但控件似乎无法正确处理方向键、回车键和制表键。 wxwidgets 上是否有任何
我正在开发一个 GUI 程序,我使用 AppendText 来更新多行文本框(由 wx.TextCtrl 组成)中的状态。我注意到每次在此框中写入一个新行,而不是顺利地将此行添加到末尾,框中的整个文本
我一定是使用了错误的术语进行谷歌搜索,因为我找不到我要找的东西。任何帮助表示赞赏。 如何写入 textctrl 中的特定行? 当前我的程序处理文件,处理后文件会在文本 ctrl 中列出。我想要达到的目
所以,我正在尝试使用 wxPython 编写一个程序,该程序将有一个带有选项卡的笔记本,每个选项卡都让用户在文本框中输入一些数据。这是一个与物理相关的项目,所以我希望每个文本框在显示应输入的单位后都有
有人知道如何使用 wxPython 在 TextCtrl 对象中创建自定义上下文菜单吗? 目前,我可以创建一个自定义菜单,但这个菜单出现在鼠标光标位置 ,当原来的出现在文本光标位置 时当按下[菜单]键
我想做一个没有边框的 wx.TextCtrl wxpython :P我该怎么做? 最佳答案 wx.BORDER_NONE 怎么样: t1 = wx.TextCtrl(self, -1, "my tex
我在将 wx.TextCtrl 中的文本居中时遇到困难(如下图所示)。 -- 出于某种原因,它总是打印左对齐,而不是居中。 有人可以指出正确的“样式”或者告诉我哪里做错了吗? import wx cl
我有多行,在wxpython中只读TextCtrl我知道如何使用 设置值 myTextCtrl.SetValue('hello') 但这会改变我之前在我的 TextCtrl 中的任何内容...如何添加
如何从 TextCtrl 框中获取字符串?下面是练习代码: import wx class citPanel(wx.Panel): def __init__(self, parent, id)
我在我的 python 应用程序中使用了一个模块,该模块使用日志记录模块写入大量消息。最初我在控制台应用程序中使用它,使用控制台处理程序很容易让日志输出显示在控制台上。现在我已经使用 wxPython
我有一个文本(有多行),需要将其放入 wxPython TextCtrl 中。 问题是其中一些行包含无法打印的字符。 我的解决方案是使用 AppendText,并 try catch 有问题的行。 当
我正在 wxpython 中为 wx.TextCtrl 创建一个子类。 我希望此类将额外数据添加到 wx.TextCtrl 小部件,类似于将额外数据添加到 ComboBox 或 ListBox 的方式
我正在编写一个与 Skype 集成的聊天程序。我已经完成了大部分跑腿工作,但我在 wxPython 中的 Notebook 控件方面遇到了问题。我想当用户发送消息时在笔记本上创建一个新选项卡,我正在工
我的代码如下 log = wx.TextCtrl(面板, wx.ID_ANY, size=(300,100), 样式 = wx.TE_MULTILINE|wx.TE_READONLY|wx.HSCRO
我是一名优秀的程序员,十分优秀!