試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

Python

PyGTKでGUI部品を自前で描画する(前半)

GTK+ではDrawingAreaというGUI部品を用いることにより、その中に自由に描画を行うことができる。 GUI部品の描画はウィンドウのサイズ変更時や最小化後の最小化解除といった場面で描き直しがされるようになっているが、これもうまく処理されるようにできる。 …

OpenOffice.orgのマクロをPythonで記述して動かす(Calcのシート追加に関するメモとシート追加のコード例)

「OpenOffice.orgのマクロをPythonで記述して動かす(Calc上でマクロが動作しているかのチェックと全シートのオブジェクトの取得に関するメモ)」の続き。 シート操作 シート名が存在しているかをチェックする 全シートを含むオブジェクトのメンバ関数hasByNam…

OpenOffice.orgのマクロをPythonで記述して動かす(Calc上でマクロが動作しているかのチェックと全シートのオブジェクトの取得に関するメモ)

「OpenOffice.orgのマクロをPythonで記述して動かす(概要,ファイル配置,ダイアログの表示)」の続きとして、ここでは、Python-UNOを用いてOpenOffice.org Calc上でマクロが実行されているかどうかのチェックとOpenOffice.org Calcの全てのシートのデータを保…

OpenOffice.orgのマクロをPythonで記述して動かす(概要,ファイル配置,ダイアログの表示)

OpenOffice.orgには専用の「OpenOffice.org Basic」という言語があり、マクロを記録したときにはこの言語で書き出されるのだが、マクロはPythonで記述することもできる。 ここでは、必要なパッケージ,スクリプトの配置,簡単なダイアログの表示までを扱う。 …

PythonでPyGObjectを用いずにファイルの変更を監視する

「Pythonでファイルの変更を監視する (OS非依存・PyGObject使用)」ではGLib(PyGObject/PyGTK)のメインループを用いたタイムアウト機能により定期的に監視処理を実行してファイルの変更を監視したが、ここでは参考としてPyGObjectを用いずにファイルの変更を…

PyGObjectで gobject.GObjectクラスを継承してGObjectプロパティを用いる(後半)

「PyGObjectで gobject.GObjectクラスを継承してGObjectプロパティを用いる(前半)」の続き。 クラスとプロパティの初期化 gobject.GObjectクラスを継承したクラスの__init__()の中では必ずメンバ関数__gobject_init__()親クラスのgobject.GObject.__init__()…

PyGObjectでgobject.GObjectクラスを継承してGObjectプロパティを用いる(前半)

PyGObjectにおいて、gobjectモジュールのクラスGObjectを継承し、適切な設定をすることにより、Python標準のプロパティよりも高度な機能を持ったGObjectプロパティを用いることができる。 動的型付けな言語であるPythonにおいて値の書き込み時の型のチェック…

PyGObject/PyGTKにおけるGObjectプロパティの操作について

ここではgobject.GObjectクラスから派生した定義済みクラスにおけるGObjectプロパティの操作のみを扱い、自分でgobject.GObjectクラスを継承してプロパティを作り設定する手順については別記事にて扱う。 PyGObjectのプロパティ PyGObjectやPyGTKのリファレ…

NSFファイル作成に用いるWAVE-DMC変換ツールをPythonに移植したもの(pydmcconv,pydmcconv-gtk)を作成・公開

「NSFファイル作成に用いるWAVE-DMC 変換ツールDMC(DPCM)コンバータをWineの開発パッケージでビルドしてインストールするスクリプト」のDMC(DPCM)コンバータ(DMCconv.exe)のソースを見たところ、WindowsのMedia Control Interface(MCI)という高レベルAPIを用…

Pythonでオブジェクトのプロパティを使用する

PythonのオブジェクトにおいてC#言語やVala言語にあるようなプロパティ(関連記事)を用いる方法についてを扱う。 プロパティについて再び オブジェクトのメンバ変数は、(オブジェクト指向における)オブジェクトとその利用側の管理上の理由により、直接外から…

MMLファイルの変更を監視して上書き保存時にppmck(ppmckc/nesasm)でNSF変換を自動で行うツールを更新(2010/2/17版)

「GNU/Linux上におけるppmckについてのその後(2010/2/2現在)」の内容を受けて、MMLファイルの変更を監視して上書き保存時にppmck(ppmckc/nesasm)でNSF変換を自動で行うツールを大幅に手直しし、GNU/Linux向けにビルドしたppmckc,nesasmの両コマンドとppmckの…

PyGTKでフォント選択ボタンのフォントをテキストビューに適用

「PyGTKでテキストビュー内の文字列にスタイルを適用する」ではGTK+のテキストビューにおいてテキストタグというものを用いてスタイルを変更するということを行ったが、ここではGTK+のフォント選択ボタンを用いて選択したフォントをテキストビューの選択範囲…

PythonでUNIXシグナルのハンドラを扱う(後半)

「PythonでUNIXシグナルのハンドラを扱う(前半)」の続き。 UNIXシグナルハンドラ処理に関する特殊な指定 signal.signal()の2番目の引数にsignal.SIG_DFLもしくはsignal.SIG_IGNという値を指定すると、ハンドラが指定される代わりに動作を変更する。 signal.S…

PythonでUNIXシグナルのハンドラを扱う(前半)

Pythonスクリプトの実行中にCtrl+Cを押すと Traceback (most recent call last): File "[スクリプトの場所]", line xxx, in <module> app.main() File "[スクリプトの場所]", line xxx, in main gtk.main() KeyboardInterruptのようにKeyboardInterrupt例外が発生し</module>…

任意の環境変数をGUIで変更して外部プロセスを起動するツールを作成

環境変数は端末シェルのbashやzshではexport、tcshではsetenvというコマンドでスクリプトから設定できるが、デスクトップ環境などでGUIを用いて環境変数を設定することはできないため、GUI上で環境変数を一覧に登録してアプリケーション下部の入力欄に入力し…

Pythonでコマンド行のような文字列を解析してリストに格納する上でのメモ(後半)

「Pythonでコマンド行のような文字列を解析してリストに格納する上でのメモ(前半)」の続き。 ダブルクォートされた部分とそうでない部分とをうまく処理する 色々試した結果、ダブルクォート文字を区切りとして元の文字列を分割してやることでダブルクォート…

Pythonでコマンド行のような文字列を解析してリストに格納する上でのメモ(前半)

文字列メソッドsplit()ではスペースを含んだダブルクォートされたまとまりを処理できない Pythonの文字列オブジェクトにはsplit()というメンバ関数があり、文字列中の特定の文字を区切りとしてリストに分割することができるのだが、コマンド行のような文字列…

mml2nsf.py(2009/12/7版)作成上のメモ

「Wine上のppmckで.mmlファイルを.nsfファイルに変換する処理を自動化するPythonスクリプト(2009/12/7版)」のスクリプトを作成した上での幾つかのメモを扱う。 Pythonのshutil shutilというモジュールを用いると端末シェル上のファイル操作系コマンドのよう…

Pythonでファイルの変更を監視する(OS非依存・PyGObject使用)

ライブラリGLibのメインループには定期的に関数を呼び出す仕組みがあり、「PyGTK上のタイマー処理について」で扱っている。これを用いてファイルのタイムスタンプを定期的に取得し、前回の結果と比較するようにすることで、ファイルが変更されるのを監視し、…

PythonからC言語の関数を呼び出す

バージョン2.5以上のPythonではctypesというモジュールを用いて任意のC言語ライブラリを読み込んでその中の関数を呼び出すことができる。 整数や文字列でないデータ(Pythonの変数)は型を指定する関数を呼んで渡す必要があるなど、扱う上での注意点は色々とあ…

PythonでZIPファイルを展開する(コード例)

「PythonでZIPファイルを展開する(メモ)」の続き。 ここでは、前回のメモの内容を踏まえた上で作成した、ZIPファイルを展開するPythonのコード例を貼り付ける。ファイル名についてはWindows上で日本語を含むもの(エンコーディングがCP932な場合)にも対応した…

PythonでZIPファイルを展開する(メモ)

Pythonではzipfileというモジュールを用いることによりZIP書庫の読み書きが行える。 ここでは既存のZIP書庫の展開をPythonで行う処理を扱う。 ZIP書庫を扱うオブジェクト zipfile.ZipFileオブジェクトを用いる。 開くときにファイル名とモードを指定 閉じる…

ttaenc(TTAエンコード/デコード用コマンド)をドラッグ・アンド・ドロップで使うGUIツールを作成

「cfgforsfをドラッグ・アンド・ドロップで使用するためのGUIフロントエンドを作成」のgtk-cfgforsfと同様にしてTTAエンコード/デコード用のコマンドttaencをドラッグ・アンド・ドロップで使用するためのGUIツールを作成し、 kakurasan.ehoh.net/software/gt…

Pythonにおけるクラスのメンバを非公開にする

Pythonにおけるクラスのメンバは基本的に外部から直接参照可能(公開されている状態)となっているが、先頭にアンダースコア(「_」の文字)が2つ付いた名前のメンバは内部的に別の名前に変更され(難号化/mangle)、外部からの参照を禁止することができる。これに…

複数のフラグ(真偽値)を1つの整数値として扱う上でのメモ

プログラム内のある設定などに関する複数の「オン/オフ」形式の情報をまとめて扱えると便利なことがある。そうしたとき、真偽値型データの配列を用意したりするのではなく、2進数の性質を用いて1つの整数のみを用いてその中で複数の「オン/オフ」情報を出し…

PyGTKで最近開いたファイルを記憶する

最近開いたファイルを管理するオブジェクト バージョン2.10以上のGTK+ではファイル選択ダイアログの中で最近開いたファイルを一覧してその中から項目を選択することができるようになっている。 「最近開いたファイル」という項目が左上にある ところが、GTK+…

複数の正規表現により文字列を繰り返しフィルタすることのできるGUIツールを作成

「Pythonで正規表現による文字列処理(検索・置換・分割)を行う」ではPythonで正規表現を使用した操作についてを扱っているが、この機能を使用してGUI上でテキストを置換するツールを作成した。GtkBuilderファイルを使用しているため、実行にはバージョン2.12…

Pythonの正規表現モジュールにおける日本語の扱いについて

Pythonは文字列をUnicodeで扱うことができるため、正規表現においても日本語を正しく扱うことができる。Python 2では処理時にパターンと入力文字列の両方をUnicode文字列にしておく必要がある。 Unicodeのコードによる指定を行うことにより、コード範囲によ…

PyGTKで重い処理をしているときにGUIを固まらせないための手法をまとめる

これまでに書いたPyGTKのコードの中で、何か重い処理をさせているときに(メインループに処理が回らないことにより)GUIが固まってしまうのを避けるために幾つかの方法を使用してきた。ここではそれらをまとめておく。 スレッドを使用する マルチスレッド化し…

PyGTKでダイアログを出しつつ親ウィンドウも操作できるようにする

ダイアログと親ウィンドウについて ダイアログを作成すると、そのダイアログに対するメインループがメインウィンドウのループの中で開始され、多重のメインループになる。このとき、ダイアログ側に対する操作は受け付けるが、メインウィンドウ側をいじること…