wxPython:如何一键清除TextCtrl中的默认文本
wxPython: How to clear default text in TextCtrl with one click
我正在使用 wxPython 制作 GUI,并且我有一个需要用户输入的文本框:
self.boxQuantity = wx.TextCtrl(panel, value="Enter quantity", pos=(100, 150), size=(100, 30))
self.Bind(wx.EVT_TEXT, self.getQuantity, self.boxQuantity)
我希望用户能够单击文本框,然后 "Enter quantity" 立即消失,而不必使用退格键。这可能吗?
我正在使用 Windows 10,Python 2.7.9。
我想你想要
def toggle1(evt):
if self.boxQuantity.GetValue() == "Enter quantity":
self.boxQuantity.SetValue("")
evt.Skip()
def toggle2(evt):
if self.boxQuantity.GetValue() == "":
self.boxQuantity.SetValue("Enter quantity")
evt.Skip()
self.boxQuantity.Bind(wx.EVT_FOCUS,toggle1)
self.boxQuantity.Bind(wx.EVT_KILL_FOCUS,toggle2)
创建一个子类可能更好
import wx
class PlaceholderTextCtrl(wx.TextCtrl):
def __init__(self, *args, **kwargs):
self.default_text = kwargs.pop("placeholder", "")
wx.TextCtrl.__init__(self, *args, **kwargs)
self.OnKillFocus(None)
self.Bind(wx.EVT_SET_FOCUS, self.OnFocus)
self.Bind(wx.EVT_KILL_FOCUS, self.OnKillFocus)
def OnFocus(self, evt):
self.SetForegroundColour(wx.BLACK)
if self.GetValue() == self.default_text:
self.SetValue("")
evt.Skip()
def OnKillFocus(self, evt):
if self.GetValue().strip() == "":
self.SetValue(self.default_text)
self.SetForegroundColour(wx.LIGHT_GREY)
if evt:
evt.Skip()
# then sometime later...
self.text_entry1 = PlaceHolderTextCtrl(self,-1,placeholder="Enter Value")
至少是这样的……
我知道这个问题很老了,但是 wxPython 现在 (4.1) 有一个新的 SetHint
函数用于 TextCtrl
:
text = wx.TextCtrl(self)
text.SetHint('First name') # This text is grey, and disappears when you type
我正在使用 wxPython 制作 GUI,并且我有一个需要用户输入的文本框:
self.boxQuantity = wx.TextCtrl(panel, value="Enter quantity", pos=(100, 150), size=(100, 30))
self.Bind(wx.EVT_TEXT, self.getQuantity, self.boxQuantity)
我希望用户能够单击文本框,然后 "Enter quantity" 立即消失,而不必使用退格键。这可能吗?
我正在使用 Windows 10,Python 2.7.9。
我想你想要
def toggle1(evt):
if self.boxQuantity.GetValue() == "Enter quantity":
self.boxQuantity.SetValue("")
evt.Skip()
def toggle2(evt):
if self.boxQuantity.GetValue() == "":
self.boxQuantity.SetValue("Enter quantity")
evt.Skip()
self.boxQuantity.Bind(wx.EVT_FOCUS,toggle1)
self.boxQuantity.Bind(wx.EVT_KILL_FOCUS,toggle2)
创建一个子类可能更好
import wx
class PlaceholderTextCtrl(wx.TextCtrl):
def __init__(self, *args, **kwargs):
self.default_text = kwargs.pop("placeholder", "")
wx.TextCtrl.__init__(self, *args, **kwargs)
self.OnKillFocus(None)
self.Bind(wx.EVT_SET_FOCUS, self.OnFocus)
self.Bind(wx.EVT_KILL_FOCUS, self.OnKillFocus)
def OnFocus(self, evt):
self.SetForegroundColour(wx.BLACK)
if self.GetValue() == self.default_text:
self.SetValue("")
evt.Skip()
def OnKillFocus(self, evt):
if self.GetValue().strip() == "":
self.SetValue(self.default_text)
self.SetForegroundColour(wx.LIGHT_GREY)
if evt:
evt.Skip()
# then sometime later...
self.text_entry1 = PlaceHolderTextCtrl(self,-1,placeholder="Enter Value")
至少是这样的……
我知道这个问题很老了,但是 wxPython 现在 (4.1) 有一个新的 SetHint
函数用于 TextCtrl
:
text = wx.TextCtrl(self)
text.SetHint('First name') # This text is grey, and disappears when you type