右から左に流れる文字列

新幹線車両の前方にある電光掲示板で、ニュース等のメッセージが表示されているのをよく見かける。あれと同じようなパネルを作ってみる。パネル上を文字が右から左へ流れていく。

wxPythonでフレームを作成後、wxStaticTextで文字列を連続して表示してみた。以下、ソース。

# ---------------------------------------------------------------------------
#   messageb.py                                     2008/09/24
# ---------------------------------------------------------------------------
import wx
import time

class MyApp(wx.PySimpleApp):
    def OnInit(self):
        Frm = wx.Frame(None, -1, "Message Board", size=(250, 80))
        Pan = wx.Panel(Frm, -1)
        Frm.Show()

        mssgfl = open('message.txt', 'r')    #表示する文字列が書かれているファイル
        mssg = mssgfl.readlines()
        for i in xrange(len(mssg)):
            mssgline = mssg[i][:-1] + '.'*100  #改行コードを除きピリオドを加える
            mssglen = len(mssgline)
            for j in xrange(0, mssglen):
                time.sleep(0.1)        # 0.1秒ごとに文字列を書き換える
                TxCtr = wx.StaticText(Pan, -1, mssgline[0:j+1], size=(220, 20),
                                      pos=(10,15), style=wx.ALIGN_RIGHT)

        return 1

app = MyApp()
app.MainLoop()

読み込むファイルmessage.txtの内容は以下の通り。一行ごとに改行させる。

1234567890(改行する)
0987654321(改行する)
abcdefghijk(改行する)

実行画面。

右から文字が現れて左へ消えてゆくようにしたかったのだが、

mssgline = mssg[i][:-1] + '.'*100

の部分を

mssgline = mssg[i][:-1] + ' '*100

として、スペースを100個加えようとしてもうまく表示されなかった。なので、ピリオドでごまかした。

気づいたことは次の通り。

  • 一応動作しているようだが、正常に終了しない。不安定。
  • 文字列にスペースが入ると表示がおかしくなる。なので英文の表示ができない。
  • wxStaticTextの適切な使い方をもう少し調べる。
  • 日本語の文章を表示するためにどう変えるか。