Logo

郎哥编程

静态文本与可编辑文本控件

2019-07-08 683

文本控件主要用于编辑和显示文本。仅显示文本内容而不能编辑文本的控件是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()

案例代码执行效果图:

image.png                          

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

案例代码执行效果图:


image.png

代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论