3266354 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

傀儡師の館.Python

傀儡師の館.Python

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

PR

Recent Posts

Calendar

Keyword Search

▼キーワード検索

Category

Archives

2023.11
2023.10
2023.09
2023.08
2023.07

Freepage List

Profile

kugutsushi

kugutsushi

Free Space

設定されていません。
2010.10.01
XML
カテゴリ:Python
wxPython 入門 (1) wxPython 入門 (2) に引き続き、wPython.org の Getting Started をサカナに第三弾。"Building a simple text editor" のあたりを見ていく。シンプルなテキストエディタを作ってみましょうというところ。

TextCtrl の style を指定すれば、スクロールやワードラップ、右寄せ、左寄せ、センタリング等々の設定ができるところまで wxPython 入門 (2) で確認したが、文字の色をつけたり、フォントを指定したりするにはどうしたらよいかということを見ていく。要するに、TextCtrl をもう少し見ていきましょうということ。

TextCtrl の文字色と背景色を変える



テキストコントロールの SetForgroundColour メソッドで文字色、SetBackgroundColour メソッドで背景色を変更することができる。文字色は、英語名でも、16進形式でも、10進形式(RGB を 0-255で指定) でも可能だが、英語名の場合は、すべての名前が使えるわけではなく、red, blue, yellow, black, white, gray... といった基本色以外は使えない。名前は何が使えるか、未調査。たとえば、wheet みたいなものは使えない。wx.WHITE、wx.GREEN、wx.BLACK、wx.CYAN, wx.RED, wx.LIGHT_GREY のようなものも使える。

無効な色が指定された場合は、デフォルトの色になる。10進形式の場合は、wxColour(R, G, B) で指定する(それぞれ 0~255)。ちなみに、"colour" であって、"color" でないので注意(英国式の綴り)、と思ったら、実は、wx.Color(R,G,B) でも大丈夫だった。どちらかに統一しておいたほうがよいだろう。wx.LIGHT_GREY はあるが、wx.LIGHT_GRAY はないなど、基本的には英国式綴りをベースにした方が問題ないように思える(最初は英国綴りだけしかなくて、みな間違えるので米国式綴りも定義されたんじゃなかろうか。それゆえ、すべてのクラスで両方あるわけではないと。歴史的経緯については調べていないけど)

# -*- coding: utf-8 -*-
import wx

class MyFrame(wx.Frame):
""" 文字色と背景色を変える """
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title=title, size=(400,300))
self.control = wx.TextCtrl(self, style=wx.TE_MULTILINE)

# 文字色の指定
# 次の4つはどれでも同じ結果になる。
# self.control.SetForegroundColour("red")
# self.control.SetForegroundColour(wx.RED)
# self.control.SetForegroundColour(wx.Colour(255, 0, 0))
self.control.SetForegroundColour("#ff0000")
# 背景色の指定
self.control.SetBackgroundColour("#e0ffff")
# 表示
self.Show(True)

app = wx.App(False)
frame = MyFrame(None, '簡易エディタ')
app.MainLoop()



wx.色 で定義されているのは、次の色。
wx.BLACK
wx.WHITE
wx.RED
wx.BLUE
wx.GREEN
wx.CYAN
wx.LIGHT_GREY

TextCtrl のフォントを変える



今度は、フォントの種類を変えたり、文字の大きさを変えたり、イタリックにしたり、太字にしたりしてみる。指定は、SetFont メソッドを使う。ただし、直接値を渡すのではなく、wx.Font() でフォント指定のオブジェクトを作ってから渡す。その際には、フォントのサイズ、ファミリー、スタイル、ウェイトを指定しなければならない。下線を文字の下につけたいときは、引数の最後に True を追加する (1でもよい)。False なら下線なし。

フォントファミリーは、
wx.FONTFAMILY_DEFAULT デフォルト
wx.FONTFAMILY_DECORATIVE デコラティブ
wx.FONTFAMILY_ROMAN ローマン(serif)
wx.FONTFAMILY_SCRIPT ハンドライティング(手書き風)
wx.FONTFAMILY_SWISS スイス(sans-serif) フォント
wx.FONTFAMILY_MODERN 固定ピッチフォント
wx.FONTFAMILY_TELETYPE テレタイプフォント

フォントスタイル (FONTSTYLE_) は、
wx.FONTSTYLE_NORMAL ノーマル
wx.FONTSTYLE_SLANT  スラント
wx.FONTWEIGHT_BOLD ボールド
wx.FONTWEIGHT_LIGHT ライト

フォントウェイトは、
wx.FONTWEIGHT_NORMAL ノーマル
wx.FONTWEIGHT_LIGHT ライト
wx.FONTWEIGHT_BOLD ボールド

ただし、wx.DEFAULT, wx.NORMAL, wx.SWISS, wx.BOLD のように、前半の FONTFAMILY_ や FONTSTYLE_ をつけなくても、実際の定数の INT の数値が同じなので問題ないようだ。同じ定数が定義されている。検索してみると、両方見つかるが、デモなど見ても、wx.DEFAULT のように短縮した形式になっているので、短い形式で指定することにした。

次の例では、24ポイントのノーマルフォントで太字でイタリックで表示している。

# -*- coding: utf-8 -*-
import wx

class MyFrame(wx.Frame):
""" 文字色と背景色とフォントを変える """
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title=title, size=(400,300))
self.control = wx.TextCtrl(self, style=wx.TE_MULTILINE)

# 文字色の指定
self.control.SetForegroundColour("#ff0000")
# 背景色の指定
self.control.SetBackgroundColour("#e0ffff")
# フォントの指定
font = wx.Font(24,
wx.NORMAL, # wx.FONTFAMILY_DEFAULT
wx.ITALIC, # wx.FONTSTYLE_ITALIC
wx.BOLD) # wx.FONTWEIGHT_BOLD
self.control.SetFont(font)
# 表示
self.Show(True)

app = wx.App(False)
frame = MyFrame(None, '簡易エディタ')
app.MainLoop()



TextCtrl のフォント名を指定する



使用するフォントを名前で指定することもできる。その場合、
wx.Font(ポイント, ファミリー, スタイル, ウェイト , アンダーライン(T|F), フォント名) のような指定になる。アンダーラインのところで True を指定すれば、文字に下線が引かれる。False なら通常の表示。次の例は、フォントにメイリオを使って、下線を表示している例。

# -*- coding: utf-8 -*-
import wx

class MyFrame(wx.Frame):
""" 文字色と背景色、フォントなどを変える """
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title=title, size=(400,300))
self.control = wx.TextCtrl(self, style=wx.TE_MULTILINE)

# 文字色の指定
self.control.SetForegroundColour("#ff0000")
# 背景色の指定
self.control.SetBackgroundColour("#e0ffff")
# フォントの指定
font = wx.Font(32, wx.DEFAULT, wx.NORMAL, wx.NORMAL, False, "メイリオ")
self.control.SetFont(font)
# 表示
self.Show(True)

app = wx.App(False)
frame = MyFrame(None, '簡易エディタ')
app.MainLoop()



ちなみに、TexCtrl を駆使すれば、それなりのリッチテキストエディタが作れるはずだが、リッチテキストエディタがほんとうに作りたければ、むしろ、wx.RichTextCtrl を使った方がいいだろう。デモを見ると、こういうものがある。ただし、ちゃんとしたアプリケーションとしては仕上げられてはいないから、表示するところまでで、保存はテキスト形式になっちゃうけど。



TextCtrl 自体、まだまだネタはあるのだが、おいおい取り込むことにして、とりあえず、先に進むことにする。






無料アクセス解析






お気に入りの記事を「いいね!」で応援しよう

Last updated  2015.03.08 17:07:05
コメント(0) | コメントを書く



© Rakuten Group, Inc.