1

マシンのユーザーインターフェイス用のタッチスクリーンコンピューターのGUIにpygtkを使用しています。ユーザーは、マシンの実際の構成をいつでも保存できます。彼が「設定を保存」ボタンを押すと、私が実装した仮想キーボードが画面に表示され、設定名を入力できるようになりました。私の問題は、「設定を保存」ボタンを押した直後にこのキーボードが表示されないことです。画面上の任意の場所で次のクリックが表示されるまで待つ必要があります。

クラスは次のkeyboardとおりです。

class keyboard():

def __init__(self):     

    window = gtk.Window(gtk.WINDOW_TOPLEVEL) 
    window.set_position(1)
    window.set_keep_above(True)
    window.connect("destroy", lambda w: window.destroy())
    window.set_transient_for(self.gui.window) #self.gui.window is the main window
    window.set_destroy_with_parent(True)
    window.set_skip_taskbar_hint(True)
    window.set_skip_pager_hint(True)
    window.connect("delete_event",window.hide_on_delete)
    window.deiconify()
    window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_SPLASHSCREEN)
    window.set_size_request(KBD_WIN_WIDTH,KBD_WIN_HEIGHT)
    window.set_resizable(False)

    table = gtk.Table(rows=5, columns=12, homogeneous=True)
    frame = gtk.Frame()
    frame.add(table)
    window.add(frame)
    """
    ... code to fill the table with buttons
    """
    self.window = window

そして、ボタン「設定を保存」をクリックした後に呼び出されるコールバック関数は次のとおりです。

def save_cfg_clicked(self,widget):
    keyboard_ = keyboard(self)
    keyboard_.window.set_keep_above(True)
    keyboard_.window.set_modal(True)
    keyboard_.window.show_all()

window.show_allで関数を呼び出すなど、いくつか試しましgobject.idle_addたが、役に立ちませんでした。

私は xfce デスクトップを使用していることに注意してください。プログラムが Gnome で実行されている場合、この問題は発生しません。

4

1 に答える 1

1

行を削除する場合:

window.set_transient_for(self.gui.window)

問題は消えます。

于 2013-09-25T13:50:21.450 に答える