- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我写了这段代码:
# -*- coding: utf-8 -*-
import wx
import wx.animate
import wx.lib.agw.hyperlink as hl
ID_BUTTON_ACCEPT = 700
ID_BUTTON_CANCEL = 701
ID_TEXT_INPUT_LOG = 702
ID_TEXT_LABLE_LOG = 703
ID_TEXT_INPUT_PSW = 704
ID_TEXT_LABEL_PSW = 705
ID_NEW_MEMBER_TXT = 706
ID_PRELOADER = 707
class TextObjectValidator(wx.PyValidator):
def __init__(self):
wx.PyValidator.__init__(self)
def Clone(self):
return TextObjectValidator()
def Validate(self, win):
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):
return True
def TransferFromWindow(self):
return True
class CloudStorage(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, -1, title, style=wx.DEFAULT_FRAME_STYLE ^ wx.RESIZE_BORDER)
# inputs
self.login_label = wx.StaticText(self, ID_TEXT_LABLE_LOG, label='Логин', pos=(15, 15))
self.login_input = wx.TextCtrl(self, ID_TEXT_INPUT_LOG, "", size=(210, -1), pos=(75, 10),
validator = TextObjectValidator())
self.pass_label = wx.StaticText(self, ID_TEXT_LABEL_PSW, label='Пароль', pos=(15, 55))
self.pass_input = wx.TextCtrl(self, ID_TEXT_INPUT_PSW, size=(210, -1), pos=(75, 50), style=wx.TE_PASSWORD,
validator = TextObjectValidator())
# buttons
self.accept_button = wx.Button(self, id=ID_BUTTON_ACCEPT, label='Войти', pos=(15, 95))
self.accept_button.SetBackgroundColour('#BFD8DF')
self.accept_button.SetForegroundColour("#2F4D57")
self.accept_button.SetFont((wx.Font(8, wx.DEFAULT, wx.NORMAL, wx.BOLD, 0)))
self.cancel_button = wx.Button(self, id=ID_BUTTON_CANCEL, label='Отмена', pos=(110, 95))
# hyperlink to register
self.new_member_label = hl.HyperLinkCtrl(self, ID_NEW_MEMBER_TXT, 'Зарегистрироваться...', pos=(15,130))
self.new_member_label.EnableRollover(True)
self.new_member_label.SetUnderlines(False, False, True)
self.new_member_label.AutoBrowse(False)
self.new_member_label.SetFont(wx.Font(8, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0))
# preloader
self.preloader = wx.animate.AnimationCtrl(self, ID_PRELOADER, pos=(260, 97), size=(24, 24))
self.preloader.LoadFile('./gui/icons/preloader.gif', wx.animate.ANIMATION_TYPE_GIF)
self.preloader.Hide()
# events
self.Bind(wx.EVT_BUTTON, self.OnRegisterNewUser, id=ID_BUTTON_ACCEPT)
self.Bind(hl.EVT_HYPERLINK_LEFT, self.OnRegisterNewUser, id=ID_NEW_MEMBER_TXT)
self.Bind(wx.EVT_BUTTON, self.OnExit, id=ID_BUTTON_CANCEL)
# form settings
size = (310, 150)
self.SetSize(size)
self.icon = wx.Icon('./gui/icons/app.ico', wx.BITMAP_TYPE_ICO)
self.SetIcon(self.icon)
self.Show()
def PreloaderPlay(self):
self.preloader.Show()
self.preloader.Play()
def PreloaderStop(self):
self.preloader.Hide()
self.preloader.Stop()
def OnExit(self, event):
self.Close()
def OnRegisterNewUser(self, event):
self.Hide()
def OnExitRegister(self, event):
self.Close()
def OnExitFilemanager(self, event):
self.Close()
if __name__ =='__main__':
app = wx.App(0)
frame = CloudStorage(None, -1, 'Авторизация')
frame.Show()
app.MainLoop()
并希望在按下“接受”按钮(俄语为“Войти”)后验证输入的数据,但没有任何反应。然而,验证器将在 TextCtrl 的构造函数中使用。怎么了?
最佳答案
我对 wxPyvalidators 进行了一些挖掘,并发现了一个较早的关于此的问题:wx.TextCtrl and wx.Validator .
在您的类 CloudStorage(wx.Frame)
中添加以下行:
def OnRegisterNewUser(self, event):
if self.login_input.GetValidator().Validate(self.login_input) and self.pass_input.GetValidator().Validate(self.pass_input):
self.Hide()
显然,如果您使用 wx.Dialog,验证器会被自动调用。但是,如果您使用 wx.Panel 或 wx.Frame,则必须从事件处理程序中调用验证器方法。您可能还想阅读this 。但我的理解可能是错误的。不过,代码似乎可以工作。
关于python - 验证 TextCtrl 中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24573892/
已解决:感谢下面 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
我是一名优秀的程序员,十分优秀!