我正在创建一个基于wxPython的GUI(我第一次创建GUI的经验)。 GUI的几个元素是文本输入字段,用户可以在文本字段中输入数据(例如TextCtrl)。
我试图在文本输入字段中创建一个共同的效果,在数据输入文本字段之前,有一个默认的指示,应该在文本字段中放置什么(例如"输入此处的数据")在输入任何文本之前呈灰色显示。如果该字段没有用户输入,我希望此默认指示再次显示。
这类事物的一个很好的例子是" Title" stackoverflow问题输入表单的字段,表示"您的编程问题是什么?要具体。"虽然,在这种情况下,还有另一种效果,当我在文本字段内单击时,文本变为浅灰色,只有在我输入某事后才会消失。
如果TextCtrl能够这样做,怎么做?我试过这样做,但我没有成功。我不想通过例子证明我是如何不成功的,而是想问一下如何做到这一点。
对于这些类型的效果,我是否应该使用除TextCtrl之外的类?
在下面的代码中,我试图只传达必要的部分。我认为代码可以工作。
import wx
class FormTab(wx.Panel):
def __init__(self, *args, **kwargs):
super(FormTab, self).__init__(*args, **kwargs)
self.createControls()
self.bindEvents()
self.doLayout()
def createControls(self):
self.exeTextCtrl = wx.TextCtrl(self, value="Executable")
font=wx.Font(8,wx.DEFAULT,wx.ITALIC,wx.NORMAL)
self.exeTextCtrl.SetFont(font)
def bindEvents(self):
for control, event, handler in \
[(self.exeTextCtrl, wx.EVT_LEFT_DOWN, self.onExeReady),
(self.exeTextCtrl, wx.EVT_TEXT, self.onExeEntered)]:
control.Bind(event, handler)
def onExeReady(self, event):
self.exeTextCtrl.SetValue('')
font=wx.Font(8,wx.DEFAULT,wx.NORMAL,wx.NORMAL)
self.exeTextCtrl.SetFont(font)
event.Skip()
def onExeEntered(self, event):
exclass.exe=event.GetString()
def doLayout(self):
raise NotImplementedError # done in parent class
class FormTabLayout(FormTab):
def doLayout(self):
boxSizer = wx.BoxSizer(orient=wx.HORIZONTAL)
# A GridSizer will contain the other controls:
gridSizer = wx.FlexGridSizer(rows=12, cols=1, vgap=10, hgap=10)
expandOption = dict(flag=wx.EXPAND)
for control, options in \
[(self.exeTextCtrl, expandOption)]:
gridSizer.Add(control, **options)
for control, options in \
[(gridSizer, dict(border=5, flag=wx.ALL))]:
boxSizer.Add(control, **options)
self.SetSizerAndFit(boxSizer)
class Exclas():
def __init__(self):
self.exe=""
class FrameWithForms(wx.Frame):
def __init__(self, *args, **kwargs):
super(FrameWithForms, self).__init__(*args, **kwargs)
notebook = wx.Notebook(self)
self.form1 = FormTabLayout(notebook)
notebook.AddPage(self.form1, 'Options') # tab
self.SetClientSize(notebook.GetBestSize())
if __name__=='__main__':
exclass=Exclas()
app = wx.App(redirect=True, filename='mylog.txt')
frame = FrameWithForms(None, title='Example GUI')
frame.Show()
app.MainLoop()
谢谢。
答案 0 :(得分:2)
你可以使用一个wx.SearchCtrl,将SearchButton,CancelButton等设置为不显示,并使用SetDescriptiveText方法设置默认文本。
搜索控件是带有附加功能的wx.TextCtrl。