文本控件主要用于编辑和显示文本。仅显示文本内容而不能编辑文本的控件是wx.StaticText;可以允许用户输入和编辑的文本控件是wx.TextCtrl。下面分别介绍这两个控件的使用方法。
1、wx.StaticText控件
wx.StaticText只能用于在窗体中输出文本内容,而不能获取用户的文本输入。它可用于在窗体中显示必要的文字信息。wx.StaticText可以修饰输出的文字内容:(1)设定文本的对齐方式(相对wx.StaticText的窗口宽度);(2)设定文本的字体和颜色;(3)设定控件的背景色。
wx.StaticText的构造函数为:
wx.StaticText (parent, id=ID_ANY, label="", pos=DefaultPosition, size=DefaultSize, style=0, validator=DefaultValidator, name=TextCtrlNameStr)
其构造函数的参数说明如下:
parent:该控件的父窗口,可以是窗体对象,也可以是面板对象,类型是wx.Window。
id:控件标识符。使用-1可以自动创建一个唯一的标识,类型是wx.WindowID。
label:要输出的内容,类型是string。
pos: 控件在父窗口的起始位置,类型是wx.Point。
size: 控件的宽度和高度,类型是wx.Size。
style:控件样式。
validator:窗口验证器。
name:控件的名称。
参数style设定了wx.StaticText的输出样式,主要样式如下:
wx.ALIGN_CENTER:文本内容相对于控件宽度居中对齐。
wx.ALIGN_LEFT:文本内容相对于控件宽度居左对齐。这是默认的样式。
wx.ALIGN_RIGHT:文本内容相对于控件宽度居右对齐。
wx.ST_NO_AUTORESIZE:设置该样式后,输出文字内容的变化不会引起控件自适应调整控件尺寸。
样式可以使用“|”符号来组合使用。
注意:wx.StaticText控件不会接收和响应用户的鼠标事件。
案例代码:
import wx
class TextExampleFrame(wx.Frame):
def __init__(self, *args, **kw):
# 调用父类的 __init__ 方法
super(TextExampleFrame, self).__init__(*args, **kw)
#创建面板
panel = wx.Panel(self, -1)
#创建静态文本控件,宽度为200、高度为30
st = wx.StaticText(panel, -1, "这是个静态文本控件", (100, 10),(200,30),wx.ALIGN_CENTER)
# 获取静态文本对象的字体对象
font = st.GetFont()
# 修改静态文本对象字体尺寸
font.PointSize += 5
# 加粗字体
font = font.Bold()
# 设置字体
st.SetFont(font)
#设定文本的前景色和背景色
st.SetForegroundColour("White")
st.SetBackgroundColour("Blue")
def main():
app = wx.App()
frame = TextExampleFrame(None, title='文本控件')
frame.Show(True)
app.MainLoop()
if __name__ == '__main__':
main()案例代码执行效果图:
2、可编辑文本控件
在界面程序中,我们经常需要搜集用户的信息,需要用户输入一些文本内容。在这种情况下,就要用到wx.TextCtrl控件,该控件在窗体中创建一个输入区域,允许用户在输入区域输入文本内容,程序可以通过控件的GetValue方法获取用户输入的内容。
创建wx. TextCtrl控件
wx. TextCtrl的构造函数为:
wx. TextCtrl (parent, id=ID_ANY, value="", pos=DefaultPosition, size=DefaultSize, style=0, validator=DefaultValidator, name=TextCtrlNameStr)
其构造函数的参数说明如下:
parent:该控件的父窗口,可以是窗体对象,也可以是面板对象,类型是wx.Window。
id:控件标识符。使用-1可以自动创建一个唯一的标识,类型是wx.WindowID。
value:默认的文本内容,类型是string。
pos: 控件的相对父窗口的起始位置,类型是wx.Point。
size: 控件的宽度和高度,类型是wx.Size。
style:控件样式。
validator:窗口验证器。
name:控件的名称。
参数style设定了wx.TextCtrl的样式,主要样式如下:
wx.TE_CENTER:内容文本在控件窗口居中对齐。
wx.TE_LEFT:内容文本在控件窗口居左对齐。默认样式。
wx.TE_RIGHT:内容文本在控件窗口居右对齐。
wx.TE_NOHIDESEL:内容文本高亮显示,只适用于Windows。
wx.TE_PASSWORD:不回显所键入的文本内容,以“*”号显示,通常用于密码输入。
wx.TE_PROCESS_ENTER:回车事件,当用户在控件内按下回车键时,一个文本输入事件被触发。
wx.TE_PROCESS_TAB:Tab键事件,当用户在控件内按下Tab键时,一个文本输入事件被触发。
wx.TE_READONLY:设定文本控件为只读,用户不能修改控件的内容。
响应文本事件
如果要对wx.TextCtrl控件发生的事件进行处理(例如用户按下回车键事件),需要通过Frame的Bind方法捕获该事件。
Bind(self,event,handler,source=None,id=wx.ID_ANY,id2=wx.ID_ANY)
函数参数说明如下:
event:要绑定的事件类型。
handler:处理该事件的方法。
source:事件的来源,一般传入控件对象。
id:事件来源的ID,一般是控件对象的ID。
id2:当需要将事件处理方法绑定到一个ID范围时使用,例如使用evt_menu_range。
wx.TextCtrl控件响应的事件类型:
EVT_TEXT:控件中的文本内容发生改变时发送该事件。文本因用户的输入或在程序中使用SetValue()而被改变,都会发送该事件。
EVT_TEXT_ENTER:当用户在一个wx.TE_PROCESS_ENTER样式的文本控件中按下了回车键时,发送该事件。
EVT_TEXT_URL:当在文本控件内的URL上发生了一个鼠标事件时,该事件被触发。前提是wx.TE_RICH或wx.TE_RICH2样式被设置,并且wx.TE_AUTO_URL样式也被设置。
EVT_TEXT_MAXLEN:如果使用控件的SetMaxLength方法指定了该控件的最大长度,当用户试图输入更长的字符串时,该事件被触发。
案例代码:
import wx
#自定义窗口类,继承于Frame
class TextCtrlSampleFrame(wx.Frame):
def __init__(self, *args, **kw):
# 调用父类的 __init__ 方法
super(TextCtrlSampleFrame, self).__init__(*args, **kw)
# 创建Panel对象
pnl = wx.Panel(self)
# 创建一个可编辑文本对象,设定回车事件
et = wx.TextCtrl(pnl,-1,"请输入内容",(50,50),(200,80),wx.TE_PROCESS_ENTER)
# 绑定回车事件
self.Bind(wx.EVT_TEXT_ENTER, self.OnEnter,et)
#回车事件处理方法
def OnEnter(self, event):
wx.MessageBox("您按下了回车")
if __name__ == '__main__':
app = wx.App()
frm = TextCtrlSampleFrame(None, title='这是一个可编辑文本控件')
frm.Show()
app.MainLoop()案例代码执行效果图:
