Python」タグアーカイブ

今週の動向

ということで現在 Linux 用動画プレイヤーを作っているわけですが、、、、、
やっぱりインストールしないと自分でさえ使いませんねぇ。

Debian パッケージを作ろうとしているがもうわけがわかんない!

Debian パッケージの作り方

にある裏技で scribes という Python で作られたテキストエディタの中身を参考にでも…
もっとわけがわからなくなった!あぁ Linux 一年生の私には敷居が高すぎる。

で、よく考えたらディストリのリポジトリに入れてもらおうとか考えているわけではない。
てゆーか海外進出すら考えてもいない、SourceForge.jp くらいは考えなくもないが。
私がやりたいのは「Linux で GUI アプリは気軽に作れる」な参考の一つを作りたいだけだ。

ので自前スクリプトから導入でかまわないかなと。
メニューへの追加処理をホーム以下にすればそれで問題は無さそうだし。

しかしコンパイルするわけじゃないし /usr/bin に突っ込めばいいというわけじゃ…
Python と Glade で作ったアプリケーションはファイルをどう配置すればいいのだ?
そういうわけで月曜からチビチビ試してみた。

/usr/lib に y901x なんてディレクトリを作りとりあえず全部放り込む。

/usr/bin に y901x というシェルスクリプトを新規作成し

#! /bin/sh
cd /usr/share/y901x
exec python y901main.py

で実行可能にしておく、これでなんとか端末から起動できるようになった。
別の位置に glade ファイルを置く方法とかは…これで動くから別にイイんだが。

/usr/share/pixmaps にアイコンを放り込む、まだ作っていない。

/home/sasakima-nao/.local/share/applications
以下に y901.desktop というファイルを作成してメニューにする。

[Desktop Entry]
Encoding=UTF-8
Version=1.0
Type=Application
Terminal=false
Icon[ja_JP]=madatukutteinai
Name[ja_JP]=Y901x
Exec=y901x
Comment[ja_JP]=わいきゅうまるいちえっくす
Name=Y901x
Comment=y901x
Icon=madatukutteinai

メニューエディタで作ったらこうなったから同じように書けばイケるだろう。
アンインストールはそれらを全削除、でなんとかなりそうだ。

よし、これをシェルスクリプトで書くぞ!
あぁなさけない、書き方が解らない…
Web じゃ解らん、本屋さんへ Go。
立ち読み、あぁ又配列とか文字列とかゼロから勉強か…
とココで気がつく、Python スクリプトで書けばいいじゃん。
はよ気がつけ俺…
結局ハニカム2巻を買って帰る。
あぁりっちゃんがかわいい。
って何をいい歳こいて漫画…
ということで明日あたりから更新…するかも。

そのまま

結局そのままいった。

GDK イベントの取得とリサイズ

チラツキは後でなんとかすればいいや!
地味に小ネタを入れておいたからゆるしてくれ。
って待っている人なんかいないと思うけど。

てゆーか給付金を早く配ってくれよ政治家さん。

テレビニュースの捏造っぷりは最近やりたい放題だよね。
「給付金は無駄」だと言っている奴なんかいるはずがないのによくもまあ。
誘導尋問のインタビューとご都合主義の編集とスタッフのさくらはもうウンザリだ。

その捏造をネタに国会をやる民主党は更に…俺がこんなことを書いてもしゃーないが。
そろそろ朝はおはスタしか見る番組がない現実をなんとかしてくれよ。

リサイズは難しい

begin_resize_drag はこの動作には使えなかった…
マウスボタンを離すまで motion_notify_event シグナルが発行されない。
ウインドのリサイズが完了するまで普通の動きになる、あぁ駄目だ。

つーかリサイザにボタンを使うと motion_notify_event シグナルが発行されない。
GtkDrawingArea でも使うとするか。

パッキングの展張を全部「いいえ」にして Windows のように自前計算と考えた。
GtkContainer の check_resize シグナルで width_request プロパティを弄くれば…
それでは当然小さくリサイズすることができなくなってしまう、あぁ駄目だ。
どうでもいいが「展張」なんて日本語は無いヤン!

パッキングのプロパティを動的に変更できれば楽なんだけど…
「フィル」にしたウイジェットの幅が取得できないのでどっちにしても。
size_request() は最小値だし get_size_request() は -1 だし。

def gtk_on_drawingarea2_motion_notify_event(self, widget, event):
    if self.resize_list:
        x = event.x_root - self.resize_x
        if self.resize_list + x > 0:
            # この上に Treeview が乗っている
            self["scrolledwindow1"].set_property("width_request", self.resize_list + x)
            self["y901window"].resize(int(self.cx + x), int(self.cy))
    
def gtk_on_drawingarea2_button_press_event(self, widget, event):
    self.resize_list = self["scrolledwindow1"].get_property("width_request")
    self.resize_x = event.x_root
    self.cx, self.cy = self["y901window"].get_size()
                            
def gtk_on_drawingarea2_button_release_event(self, widget, event):
    self.resize_list = 0

でなんとか希望どおりの動きになったけどチラツキまくる。
ハンドラを抜けるまで描写ロックなんてできないのかな?

GTK 側が意図していない動作をむりやり行うのは苦労するわ。

いつまでたっても更新ができないのでとりあえずこのままいこう。
とも思うけど今のままでは二倍表示とかを実装時に詰まりそうなんですけど…

現状報告

うおぉぉぉ難しい!
リストの右端ボタンを掴んだらリストをリサイズする
を gtk でやるのはこんなに悩むものなのか、あぁココだけで三日も。

Windows SDK では計算で簡単にやれたのになぁ、まあ全然仕組みが違うわけだし。

とりあえずリサイザボタンの Gdk イベントで「ボタン押下」を有効にする。
んで GtkWidget 以下の button-press-event シグナルハンドラを作成。
ハンドラのパラメータは event の None を取り除く。
これでやっと Gdk のイベント受信が可能になるってことまで解った。

def gtk_on_button1_button_press_event(self, widget, event):
    # ここになんか書く
    self["y901window"].begin_resize_drag( gtk.gdk.WINDOW_EDGE_EAST,
                            event.button,
                            int(event.x_root),
                            int(event.y_root),
                            event.time)

でリサイズさせる前にリストだけサイズが変わるようにプロパティセット。
で、なんとかなりそうだ、コレに辿り着くまで何度初期化したやら。

self["vbox_main"].get_property("width_request")

しても -1 が戻ってくるだけだし get_size() なんて無いと怒られるし。
うおぉっ進まない!以上止まっているので現状報告。

seekbar

やっとシークバーの使い方を理解したけどこんな時間だぁ!
三日も掛かったぞ!覚書ページに書き出しは明日!
万が一のためにコッチにバックアップ、以上。

y901x20090107.tar.gz