wxPython控件学习之TextCtrl(二)多行及样式文本框

发布时间:2020-03-21编辑:脚本学堂
wxPython控件学习之TextCtrl(二)多行及样式文本框

先来看例子:
 

复制代码 代码如下:

#!/usr/bin/env python
#coding:UTF-8
'''
Created on 2010-5-14
wxPython多行文本输入框,以及丰富样式模式的
使用范例
@author: zyl508@gmail.com
'''

import wx

class MultiTextFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self,None,-1,"Example For MultiTextCtrl",
                          size=(300,250))
        panel=wx.Panel(self,-1)
       
        #普通多行文本输入框
        multiLabel=wx.StaticText(panel,-1,"Multi-Line:")
        multiText=wx.TextCtrl(panel,-1,"Here we gonnntest",
                              size=(200,100),
                              style=wx.TE_MULTILINE)
        multiText.SetInsertionPoint(0)
       
        #丰富式样的多行文本输入框
        richLabel=wx.StaticText(panel,-1,"Rich-Label:")
        richText=wx.TextCtrl(panel,-1,
                             "如果系统支持的话nnThis is a diff font",
                             size=(200,100),
                             #创建丰富文本控件
                             style=wx.TE_MULTILINE|wx.TE_RICH2)
        richText.SetInsertionPoint(0)
        #设置richText控件的文本样式
        richText.SetStyle(2,6,wx.TextAttr("white","black"))
        points=richText.GetFont().GetPointSize()
        #创建一个字体样式
        f=wx.Font(points+3,wx.ROMAN,wx.ITALIC,wx.BOLD,True)
        #用创建的字体样式设置文本样式
        richText.SetStyle(8,14,wx.TextAttr("blue",wx.NullColor,f))
       
        #将上边俩文本框用Sizer管理布局
        sizer=wx.FlexGridSizer(cols=2,vgap=6,hgap=6)
        #AddMany方法添加的一定是一个列表list
        sizer.AddMany([multiLabel,multiText,richLabel,richText])
        panel.SetSizer(sizer)
       
class MyApp(wx.App):
    def __init__(self):
        #重构__init__方法,将错误信息重定位到文件中;
        #默认redirect=True,输出到StdOut或StdError;
        #为防止程序因错误一闪而过无法捕捉信息,可在
        #控制台中使用python -i example.py来运行程序。
        wx.App.__init__(self,redirect=False,filename=r"C:Runlog.txt")
    def OnInit(self):
        frame=MultiTextFrame()
        frame.Show(True)
        return True
   
def main():
    app=MyApp()
    app.MainLoop()

if __name__=="__main__":
    main()

#① 其他只在多行或样式文本框中才起作用的style值有:
wx.HSCROLL:除非设置,否则不自动换行,并设置水平滚动条
wx.TE_AUTO_URL:如果RICH或RICH2被设置并且系统支持的话,本样式将使用户
               鼠标移到URL上或点击URL时,产生一个事件。
wx.TE_DONTWARP:  wx.HSCROLL的别名
wx.TE_LINEWARP: 以字符为界自动换行
wx.TE_MULTILINE:文本控制显示多行
wx.TE_RICH:用于windows,允许丰富文本样式的使用
wx.TE_RICH2:同上,新版本
wx.TE_WORDWARP:以单词为界自动换行
式样可组合使用,如多行丰富式样:wx.MULTILINE|wx.RICH
 
TextCtrl的丰富样式要以类wx.TextAttr的实例来构造。例:
wx.TextAttr(textColor,backgroundColor=wx.NullColor,font=wx.NullFont)
其中color可以是颜色名或"RGB"值。NullColor,NullFont都是指使用系统默认值。

#② wx.TextAttr类的属性方法:
GetBackgroundColour():
GetFont():
GetTextColour():获取背景色,字体,字体颜色。
HasBackgroundColour()
HasFont()
HasTextColour():获取属性值存在性,返回Bool值,属性为默认值,Has*返回
                False,三项属性都为默认值则IsDefault()返回True。
 
#③ 当选用多行或丰富文本输入框时,wx.TextCtrl会附带下列方法:
GetDefaultStyle()
SetDefaultStyle(style)
SetStyle(start,end,style):应用文本样式,必须调用SetDeaultStyle()或SetStyle()
                          前者会保留设置了默认样式的文字的样式,
                          后者则会立刻改变从start到end范围能的文字。
                          例:
                          richText.SetStyle(8,14,wx.TextAttr("white","black"))
GetLineLength(lineNO):返回给定行的长度,整数值
GetLineText(lineNo):返回给定行的文本
GetNumberOfLines():返回行数,单行返回1
IsMultiLine()
IsSingleLine():返回是多行还是单行的Bool值,确定控件的状态。
PositionToXY(pos):指定文本内的一个位置(int型),返回该位置所在(列,行)的元组,
                  列,行的初始值都是0
ShowPosition(pos):显示指定位置的内容
XYToPosition():指定行列,返回该位置的整数值索引。
 
#④ 如何创建字体样式:
字体是wx.Font类的一个实例,构造函数如下:
wx.Font(pointSize,family,style,weight,underline=False,facename="",
        encoding=wx.FONTENCODING_DEFAULT)
参数介绍:
pointSize:以磅为单位的字体大小,整数值。
family:快速指定字体,支持的列表如下:
       %%%%%%%%%%%%%%%%%%%%%%%%
       wx.DECORATIVE:一个正式的,老的英文样式字体。
       wx.DEFAULT:系统默认字体。
       wx.MODERN:一个单间隔(固定字符间距)字体。
       wx.ROMAN:serif字体,通常类似于Times New Roman。
       wx.SCRIPT:手写体或草写体
       wx.SWISS:sans-serif字体,通常类似于Helvetica或Arial。
       %%%%%%%%%%%%%%%%%%%%%%%%
style:字体是否倾斜,其值有wx.NORMAL,wx.SLANT,wx.ITALIC。
weight:是否显示粗体,其值有wx.NORMAL,wx.LIGHT,wx.BOLD。
underline:仅windows可用,True为带下划线,False不带。
faceName:指定字体名,获取系统注册的字体名的一个列表(list),方法是:
         e=wx.FontEnumerator()
         wx.EnumerateFacenames()
         fontList=e.GetFacenames()
         如果要限制列表为固定宽度,则第一行修改为
         e=wx.FontEnumerator(fixedWidth=True)