当前位置:  开发笔记 > 编程语言 > 正文

wxPython:如何一键清除TextCtrl中的默认文本

如何解决《wxPython:如何一键清除TextCtrl中的默认文本》经验,为你挑选了1个好方法。

我正在使用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。



1> Joran Beasle..:

我想你要

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")

至少这样的事情...

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有