Linux」カテゴリーアーカイブ

GtkTreeView in Get front Iterator

今日の SeeMe for Linux バックアップ。
バックアップ機能とか細かいものはまだ作っていないけど編集は可能になったよ。
wnck を使った Opera 起動チェックも行っている、しかし私以外に使う人がいるのだろうか?。
見た目は前回と変わらない、いや、セパレータのラインなんかは表示するようにしたけど。

seeme4_t6

seeme4_t6.tar

ところで Gtk# をやっていた頃にもリンクしたけど

PyGTK FAQ Entry

GtkListStore で手前の GtkTreeIter を得て順番を入れ替える方法なんですけど。
PyGtk における GtkTreePath は単なるタプルなので

def on_item_up(self, widget, event=None):
    selection = self.custome_treeview.get_selection()
    model, it = selection.get_selected()
    if it:
        path = model.get_path(it)
        if path[0] > 0:
            path2 = (path[0]-1, )
            itprev = model.get_iter(path2)
            if itprev:
                model.swap(it, itprev)

def on_item_down(self, widget, event=None):
    selection = self.custome_treeview.get_selection()
    model, it = selection.get_selected()
    if it:
        itnext = model.iter_next(it)
        if itnext:
            model.swap(it, itnext)

とまあコレでイケちゃうんですね、無駄に型に厳しい Gtk# でやるより楽。
WPF の ListView はデータの加減算だけでイケるけど GTK+ はチト面倒なのが本音。
それでも GtkTreeView から得られる情報のみで賄えるのが嬉しい。
データと表示が繋がっているってやはり素晴らしい、Windows SDK じゃありえない。

Table Layout

今日の SeeMe for Linux バックアップ。

自分の設定は保存するようにした、

~/.seeme/seeme4.ini

に作成しますので試したい奇特な人はお気をつけて。

seeme4_t5

seeme4_t5.tar.gz

とりあえず GtkTable でエディタ部分をレイアウトしてみたけどイマイチ。
あまりのんびりと作るのもあれなのでこのままいくと思うけど。
GtkTable って HTML のようにセルをまたいでレイアウトできるが…
こういうのには向かないみたい。

せっかくエディタ部を別個のクラスにしてみたはいいのだけれど
GtkListStore の値を参照する必要があるのでシグナル処理は本体というはめに。
GtkTreeSelection で選択状態を知る必要があるしどうにもならん。

んで編集できるようにまで作ったけどまだ保存はできない。
だってデフォルトのほうの処理をまだ作っていないもので。

ところで
inifile 読み書きクラスと読み込み専用クラスで同じメソッドを持ってもしょうがない。
ということで InifileBase クラスを作って継承するように変更したんだけど。
先頭にアンダースコア2つのメソッドだと継承先から直接利用できないんですね。

そんなの Python の常識だろ?と思う人もいるんでしょうけど私は実践しないと覚えない人なので。

しかし、検索していてよく見かけるんだが…
INI を読み書きする程度のクラスすら自分で作れないプログラマーって何が作れるんだろう?

PyGtk Python Protocol Support

今日の SeeMe for Linux バックアップ。
まだ編集も自分の設定を保存もできないのに公開してよいものか?

seeme_t4

seeme4_t4.tar.gz

そういえば今まで GtkListStore を for ループすると何が取れるか知らなかった。

14.2. The TreeModel Interface and Data Stores

の「14.2.7. Python Protocol Support」をよく見ると

gtk.TreeModelRow

コイツなんだね、ということは…

# Default Delete as No append
default_delete = False
if not en.Deleted:
    for row in self.default_liststore:
        uid = row[13]
        if uid == en.UNIQUEID:
            row[0] = False
            default_delete = True
            break
    """ 下記と同じ
    it = self.default_liststore.get_iter_first()
    while it:
        uid = self.default_liststore.get_value(it, 13)
        if uid == en.UNIQUEID:
            self.default_liststore.set_value(it, 0, False)
            default_delete = True
            break
        it = self.default_liststore.iter_next(it)"""

ぐは!今までなんと無駄な処理をしていたことか。
無理に GTK+ の仕様に合わせずとも PyGtk が用意してくれた方法を使ったほうが楽だ。
なんつーか恐るべし PyGtk だと。

Reduce the object named

今日の SeeMe for Linux バックアップ。
まだ GtkTreeView には辿り着けないが大まかな外枠だけは作れた。

seeme4_t2.tar.gz

seeme_t2

今改めて作っていると色々と便利なアイデアが思い浮かぶ。
Y901x では設定で使う GtkNotebook は全部個別に名前を付けたオブジェクトを作成していたが

# GtkNoteBook
self.note = gtk.Notebook()
tab_label = ["カスタムサーチ", "デフォルトサーチ", "標準設定", "バージョン"]
page = []
for i in range(4):
    tab = gtk.Label(tab_label[i])
    page.append(gtk.VBox())
    page[i].set_border_width(10)
    self.note.append_page(page[i], tab)
# page pack
label1 = gtk.Label("test")
page[0].pack_start(label1, False, False)

こんなふうに GtkVBox のポインタをリストすればパッキングはリストの添字で華麗にアクセス!
オブジェクト指向のオブジェクトって結局ポインタですから普通に List に入れられます。
しかも Python は List から取り出すのに型キャストや as 演算子は不要のようです。

タブのラベルは GtkLabel を作るしか無いけどそのためだけにソレに名前を付けるのも無駄だし。
名前付きオブジェクトをなるべく減らしたほうがコードの見通しが絶対にいいですから。

GUI 作成に VC# や Glade を使うと全部名前付きオブジェクトにするしか無いですから。
XAML や GtkUIManager を活用すればかなり減らせるけど少しのアイデアで綺麗にできる。
どうも Glade で作っていた頃の思い込みが消えていないようだ。

後なんとかしたいのはやはり現行版 SeeMe のメイン編集部分である。
あの TextBox や CheckBox をズラズラ並べた配置は作った本人は気に入っていない。
解りやすいとは思うけどもっとスマートにしたい、あれでは XAML もキタナイ。

それと何もアイテムが無い状態ではメイン編集部分を無効状態にしたほうがよさそう。
以上メモ、さて続きをやるか。

Comix

Comix – GTK Comic Book Viewer

こんなのを見つけた、思いっきり PyGtk 製の画像ビューアである。

私は動画プレイヤー同様で画像ビューアにもそんなには機能を求めていない。
なので Eye of Gnome で十分なんだが 9.04 から急に重くなってっしまったし。
PyGtk の勉強ついでに自分で軽いのを作ろう、と覚え書きページを作っていた。

見事に詰まった…ということで何か参考が欲しい所に見つけたということです。

でも検索すると…
せっかくの Python 製なのに参考にして何か作ってみようという人いないの?
UNIX 系の人はバリバリスクリプトを書いて利用しているイメージが昔はあったのに。

まあそれはよくて。

普通に「追加と削除」にあるのでパッケージ管理のためにインストールはそちらから。
URL を貼ったのは Python コードを参照のために落とす用。

HDD は Vista にしてしまったから VirtualBox 上の 8.10 を使って…
あれ?何もファイルが無い、そういえば 8.10 からはホストに変更したんだっけ。
せっかく Comix をインストールしたのに画像が何も無いとはこれいかに。

しかたがない、手っ取り早くエロサイト…はやめておいて。
この Blog から先月の画像を FTP で丸ごと落とせばいいや。

comix

縮小描写の画質がイマイチですので双一次補完以上にしませう。
GtkRadioAction でラヂオメニューとツールバーを同期させる
image.py でコレと同じようにスケーリングをしているので、名前で解るわな。

tile

こういうのは自前で補完の算出をするより GTK+ にまかせたほうが早い。
なんたってスクリプト言語ですので…まあイイんでないかい。

それはそうとソースコードだ。

GtkUIManager を使ってオリジナル画像や右寄せをしている、コレやりたかった。
方法の解析は…もう少し時間が掛かりそう。

画像は GtkLayout を使って大きさを調節して GtkImage に描写している。
こんな方法があったのか、それなら expose_event シグナルを利用しなくてもイケる。
それでいいのか?という疑問もあるけど。

ステータスバー表示は分割せずにまとめて str で描写。
うーん、私とは随分考え方が違う人のようだ。

予想していたコードとは随分違うけどこれはこれで参考になる。
というか 8.10 の Eye of Gnome はこんなに軽かったっかな?