#! /usr/bin/python
#SearchCtrlProblem
import wx
class ControlPanel(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, size=(200,200))
self.panel = wx.Panel(self, -1)
vbox = wx.BoxSizer(wx.VERTICAL)
self.panel.SetSizer(vbox)
self.DoLayout()
self.Centre()
self.Show(True)
def DoLayout(self):
vbox = self.panel.GetSizer()
self.tc = tc = wx.TextCtrl(self.panel, size = (140,-1), style=wx.TE_PROCESS_ENTER)
vbox.Add(tc, 0, wx.ALL, 15)
tc.Bind(wx.EVT_TEXT_ENTER, self.OnTextCtrl, id=tc.GetId())
self.sc = sc = wx.SearchCtrl(self.panel, size = (140,-1), style=wx.TE_PROCESS_ENTER)
sc.ShowSearchButton(True)
sc.ShowCancelButton(True)
vbox.Add(sc, 0, wx.ALL, 15)
sc.Bind(wx.EVT_TEXT_ENTER, self.OnSearchCtrl, id=sc.GetId())
self.bn = bn = wx.Button(self.panel, -1, 'Reset', (140,-1))
vbox. Add(bn, 0, wx.ALL,15)
bn.Bind(wx.EVT_BUTTON, self.OnReset, id = bn.GetId())
vbox.Layout()
self.Refresh()
def OnTextCtrl(self, evt):
value = self.tc.GetValue()
self.sc.SetValue(value)
def OnSearchCtrl(self, evt):
value = self.sc.GetValue()
self.tc.SetValue(value)
def OnReset(self, evt):
self.panel.DestroyChildren()
self.DoLayout()
app = wx.App()
ControlPanel(None, -1, '')
app.MainLoop()
我写了这个愚蠢的程序来演示这个问题。+ 当我运行程序时,如果我首先在搜索框中输入 sc 然后按回车,一切正常,sc 中有黑色文本。现在,我可以在文本框中输入 tc 然后按回车,sc 中的文本仍然是黑色的
- 但是,如果我首先在搜索框 sc 中输入然后按 enter,sc 中的文本将变为灰色。从那时起,如果我尝试输入 tc 然后按回车,sc 中的文本总是灰色的。
注意:在开始输入之前,您可以通过按“重置”按钮来重置布局。该问题发生在 Linux RedHat 4.5.1-3、Python 2.7 上。当我在 Mac OS X 10.8、Python 2.7.2 上尝试这个时,这个问题没有发生。
如何使 SearchCtrl 中的文本始终为黑色?