gpt4 book ai didi

linux - 如何使wxpython中wxsearchctrl中的文本不灰显?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:25:21 25 4
gpt4 key购买 nike

#! /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 然后按回车键,sc 中的黑色文本一切正常。现在,我可以在文本框中输入 tc 然后按回车键,sc 中的文本仍然是黑色

  • 但是,如果我首先在搜索框 sc 中键入内容,然后按回车键,则 sc 中的文本将变为灰色。从那时起,如果我尝试键入 tc 然后按回车键,sc 中的文本将始终为灰色。

注意:在开始输入之前,您可以通过按“重置”按钮来重置布局。问题发生在 Linux RedHat 4.5.1-3,Python 2.7 上。当我在 Mac OS X 10.8、Python 2.7.2 上尝试这个时,这个问题没有发生。

如何使 SearchCtrl 中的文本始终为黑色?

最佳答案

这是一个 bugwxWidgets 2.8.12 中。

当文本与提示文本匹配时,控件只有在获得焦点时才会将文本颜色设置为黑色(当控件为空时显示灰色文本)。

要在不升级到 never 版本的情况下解决此问题,您必须在更改其文本之前聚焦控件:

wnd = self.FindFocus()   # get currently focused window
self.sc.SetFocus() # trigger the color update (if needed)
self.sc.SetValue(value)
if wnd: wnd.SetFocus() # restore previous focus
else: self.SetFocus() # set focus to frame if none was set

要从 wxSearchCtrl 中删除文本并恢复灰色提示文本,只需调用 Clear() 即可(无论如何在 2.8.12 中)。

该错误已在最新的开发版本 (2.9.4) 中修复。但是,清除文本不会恢复提示文本。

OS X 10.3 及更高版本上,使用的 native 搜索控件不会出现此行为。

关于linux - 如何使wxpython中wxsearchctrl中的文本不灰显?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13754538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com