GtkDialog 上の GtkEntry で Enter して OK に

GtkDialog 上の GtkEntry で Enter したら OK ということにしたい。
あれ?なんかウイジェットのデフォルト機能ではできないっぽいんですけど。
実は方法があるかもしれないけど自分で作って上手く言った例を貼っておく。
単に GtkEntry の activate シグナルを処理しているだけですけど。

その前に説明が必要だろうけど Y901x にリネーム機能を付ける。
Windows 版 Y901 と同じ方法です、ダイアログを出して名前変更して Enter。
という流れにしたいんだが方法が見つからなかったのでやってみたということで。

よく考えると GTK+ アプリはダイアログの値変更を即摘要という感じなのが多い。
Linux 屋はそういう方向を好むのかな?乗り換え組には結構違和感がある。

右クリックメニューもマウスボタンダウンで出るし、でも慣れると素早い操作ができて楽。
逆に慣れてしまって Windows を使う時に間違えてしかたがない。

つーことで、自分が使っているアトリビュートな変数名とかはそのまんまだけどこんな。
Python は関数内に関数が入れられるから一つの関数に収められて便利だよね。

def rename(self):
    if self.p_filename == "":
        return
    name = self.p_filename
    label = gtk.Label()
    label.set_text(self.p_filename)
    entry = gtk.Entry()
    entry.set_text(self.p_filename)
    d = gtk.Dialog( "リネーム",
                    self.w,
                    gtk.DIALOG_MODAL,# | gtk.DIALOG_DESTROY_WITH_PARENT,
                    (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,
                    gtk.STOCK_OK, gtk.RESPONSE_ACCEPT) )
    d.vbox.pack_start(label, False)
    d.vbox.pack_start(entry, False)
    d.show_all()
    # GtkEntry にて Enter キーで OK ボタンを押す処理
    def dlg_ok(self):
        d.response(gtk.RESPONSE_ACCEPT)
    entry.connect("activate", dlg_ok)
    # 再生中ならポーズ、リピート中だと次に行ってしまう
    is_play = False
    if self.player.get_state(1)[1] == gst.STATE_PLAYING:
        is_play = True
        self.player.set_state(gst.STATE_PAUSED)
    # 開始
    if d.run() == gtk.RESPONSE_ACCEPT:
        text = entry.get_text()
        if text == self.p_filename:
            self.messagebox("変更されていません")
        else:
            if  text in os.listdir(self.p_path):
                self.messagebox("同一ファイル名が見つかりました")
            else:
                newname = self.p_path + "/" + text
                self.clear()
                while gtk.events_pending():
                    gtk.main_iteration()
                os.rename(self.p_path + "/" + self.p_filename, newname)
                while gtk.events_pending():
                    gtk.main_iteration()
                self.set_uri("file://" + newname)
    d.destroy()
    if is_play:
        self.player.set_state(gst.STATE_PLAYING)

koion

○いおんってこんな話か…微妙だ。
出てくる名前がジミヘンとかベック…まあ作る人見る人もソッチ系じゃないのでベタになるか。
せめてランディ・ローズあたりの名が出りゃ面白…という私はおっさんだが Dee は名曲だぞ。

YouTube – dee- randy rhoads (studio out-takes)

って話が違いすぎるので置いておいて。
とりあえず今日作れたとこまでをココにバックアップ、明日には出せるかな?
なんたってシーゲイトの HDD をまだ使っていますんで、今の所なんともないなぁ、、、、、
Wordpress は tar.gz で Upload すると何故か tar の前の拡張子が消滅するので zip にて。

y901x-buckup1.zip