{0:02d}

Y901x 0.3.5 公開。

Y901x はシークバーを弄くるのに gst.SEEK_FLAG_KEY_UNIT 指定で軽くしている。
けどたまに動かしたピチッとした位置で止めたい場合が多々ある。
面倒くさいので放置していたけどそろそろやろうかと。

def set_play_position(self, location):
    """
        Media Seeking
        SEEK_FLAG_KEY_UNIT -> LightWaight
    """
    if self.seekinfo.button == 1:
        seek = gst.SEEK_FLAG_KEY_UNIT
    else:
        seek = gst.SEEK_FLAG_ACCURATE
    event = gst.event_new_seek(
            1.0,
            gst.FORMAT_TIME,
            gst.SEEK_FLAG_FLUSH | seek,
            gst.SEEK_TYPE_SET,
            location,
            gst.SEEK_TYPE_NONE,
            0)
    self.player.send_event(event)

とシークバー上で押されたマウスボタンを記憶しておいて振り分けにしてみた。
GtkHScale はホイールクリックだと正確な位置に移動できるので合わせてみたんだが。
つーてもホイールクリックでシークはやりにくいので右ボタンでもオケにと。
こんなに簡単に振り分けできるならもっと早くやればよかった、我ながら。

それと一時間以上のファイルの場合は自動で
00:05/85:45 → 00:00:05/01:23:45
なんて切り替わるように表示したくなった。

こんな処理にしたけど、今見るともしかしてジャスト一時間だとアウト…
まぁ手持ちのは問題無いし次で直せばいいか。

def put_time_status(self, location):
    """
        self.player is PlayBin2
    """
    sec = location / 1000000000
    allsec = self.player.query_duration(gst.FORMAT_TIME)[0] / 1000000000
    if allsec > 3600:
        s = time.strftime("%H:%M:%S", time.gmtime(sec))
        t = time.strftime("%H:%M:%S", time.gmtime(allsec))
    else:
        s = time.strftime("%M:%S", time.gmtime(sec))
        t = time.strftime("%M:%S", time.gmtime(allsec))
    self.statusbar.label[0].set_text("{0}/{1}".format(s, t))
    """
    今までの処理
    secv = "%02d:%02d/%02d:%02d" % ((sec / 60), (sec % 60), (allsec / 60), (allsec % 60))
    self.statusbar.label[0].set_text(secv)"""

自分で計算しなくても time モジュールを使えばいいと今頃気がついた私って…

そういえば新しいフォーマッタで %02d みたくゼロ詰めするのはどうやるのだ?
どうせ V2 を使いつづけるのでほとんど気にしていなかった。

7.1. string ? Common string operations ? Python v2.7.1 documentation

# old
print "%02d:%02d" % (1, 2)
# new
print("{0:02d}:{1:02d}".format(1, 2))

スゲェ分かり辛いと思うんですけど…
せっかく C 言語とほぼ同じで覚えやすかったのに今後はこうなるんだよなぁ…