wxPython - 实现 wx.EVT_TEXT_PASTE
wxPython - implementing wx.EVT_TEXT_PASTE
我正在为我的文本框创建一个 wx.PyValidator:
class IPValidator(wx.PyValidator):
"Validator for validating IP addresses"
def __init__(self):
super(IPValidator, self).__init__()
self.Bind(wx.EVT_TEXT_PASTE, self.OnPaste)
def Clone(self):
"""Cloning the validator"""
return self.__class__()
def Validate(self, win):
"""the validate function"""
return self.OnValidate(self.GetWindow().GetValue())
def OnValidate(self, text):
"""returns True or False about the given text"""
return re.match(text, ip_pattern)
def OnPaste(self, event): #######
text = event.GetString()
if self.OnValidate(text):
event.Skip()
def TransferToWindow(self):
return True
def TransferFromWindow(self):
return True
我的 OnPaste
方法有问题。如何在粘贴之前获取粘贴的字符串并确保其有效? event.GetString
returns 一个空字符串
你需要直接连接剪贴板
def get_clipboard_text():
if not wx.TheClipboard.IsOpened(): wx.TheClipboard.Open()
do = wx.TextDataObject()
success = wx.TheClipboard.GetData(do)
if success:
return do.GetText()
return ""
class MyWidget(...):
....
def OnPaste(self, event): #######
text = get_clipboard_text()
if self.OnValidate(text):
event.Skip()
是仅使用 wx 就可以做到的方法...但我建议使用 pyperclip 之类的东西,因为它更容易处理
我正在为我的文本框创建一个 wx.PyValidator:
class IPValidator(wx.PyValidator):
"Validator for validating IP addresses"
def __init__(self):
super(IPValidator, self).__init__()
self.Bind(wx.EVT_TEXT_PASTE, self.OnPaste)
def Clone(self):
"""Cloning the validator"""
return self.__class__()
def Validate(self, win):
"""the validate function"""
return self.OnValidate(self.GetWindow().GetValue())
def OnValidate(self, text):
"""returns True or False about the given text"""
return re.match(text, ip_pattern)
def OnPaste(self, event): #######
text = event.GetString()
if self.OnValidate(text):
event.Skip()
def TransferToWindow(self):
return True
def TransferFromWindow(self):
return True
我的 OnPaste
方法有问题。如何在粘贴之前获取粘贴的字符串并确保其有效? event.GetString
returns 一个空字符串
你需要直接连接剪贴板
def get_clipboard_text():
if not wx.TheClipboard.IsOpened(): wx.TheClipboard.Open()
do = wx.TextDataObject()
success = wx.TheClipboard.GetData(do)
if success:
return do.GetText()
return ""
class MyWidget(...):
....
def OnPaste(self, event): #######
text = get_clipboard_text()
if self.OnValidate(text):
event.Skip()
是仅使用 wx 就可以做到的方法...但我建议使用 pyperclip 之类的东西,因为它更容易处理