问题
I am making a GUI using wxPython, and I have a text box that requires user input:
self.boxQuantity = wx.TextCtrl(panel, value="Enter quantity", pos=(100, 150), size=(100, 30))
self.Bind(wx.EVT_TEXT, self.getQuantity, self.boxQuantity)
I want the user to be able to click on the text box, and "Enter quantity" to disappear immediately, instead of having to use backspace. Is this possible?
I'm using Windows 10, Python 2.7.9.
回答1:
I think you want
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)
its probably better to create a subclass
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")
something like that at least ...
来源:https://stackoverflow.com/questions/34379079/wxpython-how-to-clear-default-text-in-textctrl-with-one-click