Python」タグアーカイブ

またしても INI

次の覚書は意表を付いて inifile8 の Python 化をやる。

コレをやらなきゃ SeeMe を Python で作り直しができないしぃ。
問題は Windows 版をどうするかなんだが、IronPython では .NET で変わらないし。
v4 は C++ で作るしかなさそう、.NET はもう企業のほうしか見ていない。

それに毎回 has_option でキーの確認をするのがバカバカしくなったのでまあ。
以前 C# で書いたのを Python で書き直しなんてことをしているんだが…
面倒なので巨大画像。

cs2py

コードの圧倒的な短さに自分で吹いた!
やっていることはまったく同じなのに。
辞書のリストの辞書のリストを作っているだけなんだが。

しかしコレを解説となると Python の基本を説明になってしまうような…
初心者本でも勧めてヨシとするか(ぉい!

リサイズ処理はなんとかなった

動画のオリジナルサイズを得る

でリサイズはなんとかなったぞと。
コレでイケたのか、なんて遠回りをしたものだ。
でも勉強にはなったのでヨシとしよう。

次はリサイズするためのメニュー作りだ。

PyGTK + Gladeのアプリケーションにおけるハンドラ関数について(後半) – 試験運用中なLinux備忘録

ユーザーデータがやはり Glade からは使えないみたい。
menuitem 毎にハンドラ作成ではコードが美しく無いんだが…
綺麗に書かなきゃ Python じゃないし。
○uby 屋は他人が読みにくいコードを書くのを好(以下略

しかもラジオボタンのグループにすると何故かグループ全部シグナル吐くし…
まだイマイチ理解していないだけだと思うけど、後は明日だ。

他人のプレイヤー

morphin – Google Code

なんて Python 製プレイヤーを見つけた。
でもインストールしないと起動できないみたい…

まあ思いっきり作りかけのようだけど参考にさせてもらおう。
同じ処理にならないように考えながら。
リサイズ処理は未実装だなぁと思ったけど…他の所にこんなのが。

rc = widget.get_allocation()

で GdkRectangle が取れる!この方法があったか。
rc.width で FILL でも幅が解る、これでリサイズはなんとかなりそうだ。
なんだよ、GetWindowRect() 相当が Gtk+ にもあったんだ。

self.player.get_property(“stream-info-value-array”)

で GstStreamInfo のリストが取れるようだ。
stream-info だけでは gobject.GPointer が返ってくるだけだもん。
のでどうにもできなかった、使うなと書いてあるし。
しかしコレをどう展開すればいいのかな?いまココ。

しかし…

meopera

たいしてカスタマイズしていない Opera だが毎日無茶な使い方をしている。

指定サイズでドンズマリ!

昨日とりあえずボリューム調節関連だけアップロードして追記しようと考えた。
とにかく後はリサイズだわ、それさえ済めばアルファ版として成立すると思う。

とりあえずこんなのを定義して

self.video = {  "width": 0,
                "height": 0,
                "videocrop": None}

ほとんど海外某所のコピペだがこーんなのを定義しておいて

# サイズ取り出しの処理
# 何かシンクロさせるものを作らないといけないので videocrop でも
# ちなみにコレの left とかのプロパティを弄くればクリッピングできる
bin = gst.Bin('video-sink')
self.video["videocrop"] = gst.element_factory_make('videocrop')
bin.add(self.video["videocrop"])
pad = self.video["videocrop"].get_pad("sink")
bin.add_pad(gst.GhostPad("sink", pad))
videosink = gst.element_factory_make('autovideosink')
bin.add(videosink)
gst.element_link_many(self.video["videocrop"], videosink)
self.player.set_property("video-sink", bin)
pad.connect("notify::caps", self.gst_on_notify_caps)

コネクトするハンドラをば

def gst_on_notify_caps(self, pad, pcaps):
    caps = pad.get_negotiated_caps()
    if caps != None:
        if "video" in caps.to_string():
            x = caps[0]["width"]
            y = caps[0]["height"]
            self.new_size(x, y)

元サイズはコレでなんとか取れるようになった。
(もっといい方法は無いのかなぁ?)
後は指定倍率にリサイズする関数を作ればいい。

def new_size(self, x, y):
    if x == self.video["width"] and y == self.video["height"]:
        return
    self.video["width"] = x
    self.video["height"] = y
    # で…あれ??????

今のレイアウトではいったいどうやったらこのサイズにできる?
うわあぁ丸ごとソース変更になりそうな悪寒。

インストーラ

うおぉぉぉ!全然進まなかった。
結局インストーラはシェルスクリプトで書いているんだが。
とりあえずなんとかなったのをココにバックアップ。

#! /bin/sh

# -r オプションで削除
if test $# = 1; then
    if test $1 = -r; then
        rm -r /usr/share/y901x
        rm /usr/bin/y901x
        rm /usr/share/applications/y901.desktop
        rm /usr/share/pixmaps/y901x.xpm
    fi
else
    # 拡張子があるものだけ /usr/share にコピー
    if ! test -d /usr/share/y901x; then
        mkdir /usr/share/y901x
    fi
    cp -f *.* /usr/share/y901x/

    # /usr/bin に作成
    touch /usr/bin/y901x
    chmod 755 /usr/bin/y901x
    cat << _EOS_ > /usr/bin/y901x
#! /bin/sh
exec python /usr/share/y901x/y901main.py \$@
_EOS_

    # .desktop 作成、MimeType は Totem コピペ
    touch /usr/share/applications/y901.desktop
    cat << _EOSB_ > /usr/share/applications/y901.desktop
[Desktop Entry]
Encoding=UTF-8
Version=1.0
Type=Application
Terminal=false
Icon[ja_JP]=y901x
Name[ja_JP]=Y901x
Exec=y901x %U
Comment[ja_JP]=わいきゅうまるいちえっくす
Name=Y901x
Comment=y901x
Icon=y901x
StartupNotify=true
Categories=GNOME;GTK;AudioVideo;Video;Player;X-Ximian-Main;X-Red-Hat-Base;
MimeType=application/ogg;application/ram;(以下略
_EOSB_

    # アイコンのコピー
    cp -f y901x.xpm /usr/share/pixmaps/
fi

ヒアドキュメントとやらに詰まりまくった。
MimeType を入れただけでは「別のアプリで開く」でしか登録ができないなぁ。
Nautilus の右メニューに入れるにはどうすれば…まだ勉強が足らない。

それよりやはりカレントディレクトリをスクリプトで変更はやはりまずい。
そうすると glade ファイルの読み込みはどうすればいいんかいなぁ?

try:
    self.widgets = gtk.glade.XML("/usr/share/hoge/a.glade", "b")
except:
    self.widgets = gtk.glade.XML("a.glade", "b")

しか思いつかないし見つからないんだが…まだ勉強が足らない。

てか $@ でコマンドラインオプションを送るとリストで届くんだね。
コマンドラインオプションを付けると解析はどうすれば…まだ勉強が足らない。

アイコンデザインが…いつものことだ。

やりたいこと以外で詰まって全然進展しない!
まぁプログラミングってそういうもんですけどね。
Tips サイトは多いのに何も有効なアプリを公開していない人が多い理由はコレだよ。

追記

手抜きっぽいインストーラ

でなんとかなったぞい!
Nautilus への右メニューへは一度「別のアプリで開く」を行えば登録される。
ということでこの件は終わらせよう、先へ進めない。

UpdateManager のソースがマジで参考になったんだが、コレって Python 製なんだね。
何故こういうトコを強調して日本での Python 普及を唱える人が出ないのやら。
Mono の覚書のほうがアクセスが多いのがオイラは超気に入らないんだよ!