我正在使用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)
我希望用户能够单击文本框,然后“输入数量”立即消失,而不必使用退格键。这可能吗?
我正在使用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")
至少这样的事情...