2

サブウィンドウを開くpygtkを使用してアプリケーションを作成しようとしていますが、このウィンドウの作成/表示および破棄/非表示のプロセスで問題が発生しています。テストとして、1つのボタンでメインウィンドウを開き、クリックすると3つのボタンでサブウィンドウを開く簡単なアプリケーションを作成しました。グレイドを使用してインターフェースを設計しました。私のコードは次のとおりです。

main.py

import gobject
import pygtk
import gtk.gtkgl
import gtk.glade
from interface import *

if __name__ == "__main__":
    gtk.gdk.threads_init()
    settings = gtk.settings_get_default()
    settings.props.gtk_button_images = True
    intf = interface()
    gtk.main()

およびinterface.py

import pygtk
import gtk.gtkgl
import gtk.glade

class interface(object):

    def __init__(self):

        self.builder = gtk.Builder()
        self.builder.add_from_file("web-interface.glade")

        self.main_window = self.builder.get_object("main_window")
        self.camera_window = self.builder.get_object("cam_window")
        self.main_window.show()

        self.builder.connect_signals(self)

    def on_main_window_destroy(self, widget):
        gtk.main_quit()

    def on_camera_clicked(self, widget):
        self.camera_window.show()

    def on_bt1_clicked(self, widget):
        self.camera_window.hide()

    def on_cam_window_destroy(self, widget):
        self.camera_window.hide()
        return

ここで、「bt1」はそれを非表示にするcamera_windowのボタンであり、「camera」はサブウィンドウを開くメインウィンドウのボタンです。

ここで、「camera」でサブウィンドウを開き、「bt1」で閉じようとすると、問題なく動作します。しかし、「X」ボタンでサブウィンドウを閉じようとすると、次にウィンドウを開くときに、ウィンドウを非表示にするだけにdestroyイベントを変更したにもかかわらず、灰色の空のウィンドウが表示されます。私は何が間違っているのですか?

前もって感謝します!

4

1 に答える 1

8

delete-eventの代わりに信号に接続しますdestroy。信号はdestroyブロックできません。

また、ハンドラーreturn Trueから確認してください。delete-eventこれは、イベントを処理したことを意味し、それ以降の処理はブロックされます。そうしないと、デフォルトのハンドラーがあなたのハンドラーの後に呼び出されるため、ウィンドウは非表示になり、とにかく破棄されます。

于 2012-08-14T16:06:21.237 に答える