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

 

 

注意事項:

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM