天天看點

wxPython控件學習之TextCtrl(二)多行及樣式文本框

<code>#!/usr/bin/env python #coding:UTF-8 ''' Created on 2010-5-14 wxPython多行文本輸入框,以及豐富樣式模式的 使用範例 @author: [email protected] ''' 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 go\n\n\ntest",                               size=(200,100),                               style=wx.TE_MULTILINE)         multiText.SetInsertionPoint(0)                  #豐富式樣的多行文本輸入框         richLabel=wx.StaticText(panel,-1,"Rich-Label:")         richText=wx.TextCtrl(panel,-1,                              "如果系統支援的話\n\nThis 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()</code>

注意事項:

#① 其他隻在多行或樣式文本框中才起作用的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)