2

サブクラス化したウィンドウを閉じる必要がある状況に陥りましたGtk.Window。window.destroyイベントを接続して、最初にGtk.main_quitテストのためにウィンドウを閉じていましたが、モジュールをメインプログラムにロードしたとき、もちろん、メインプログラムを閉じずにその方法でそれを行うことはできませんでした。関数を書いたとき、私は愚かにもwindow.destroy()メソッドを呼び出しましたが、それは私にとって愚かで、最大再帰エラーになりました。そこで、「delete-event」を接続してwindow.destroy()から、(私が学んだように)destroyイベントがdelete-eventを呼び出すため、まだ繰り返されているを呼び出すことにしました。そこで、destroyイベントを関数に接続し、次の呼び出しを試みました。

window.emit('delete-event')

これは機能しましたが、別のパラメーターが必要なときにエラーが発生しました。調べてみると、gtk2から次のようなものである必要があることがわかりました。

window.emit("delete-event", gtk.gdk.Event(gtk.gdk.DELETE))

下で見つけることができるように私はGdk下で見つけることができません。私はこれが好きではありません。Gdkをインポートして見つかりましたが、に相当するものはありません。私はした:GtkgdkgtkGdk.Eventgtk.gdk.DELETE variable

l = dir(Gdk)
for i in l:
    if 'DELETE' in i:
        print(i)

そして、Gdkで定義されたDELETE変数を思いつきませんでした。

GtkからGdkにアクセスするにはどうすればよいですか?そうでない場合、これらのgtk.gdk ...がGdkの下に存在しない場合、どのように変換しますか?

最終的に、私はちょうどしました:

del window

私がする必要があることをするために、しかし私はまだ学習目的のために上記のGtk3で信号を発する方法を知りたいです。

ありがとう、

ナルニア国物語

4

1 に答える 1

1

GTK 3にはありません。gtk.gdkそのすべての機能、または同等の機能は、を使用して使用できる必要がありますfrom gi.repository import Gdk。以前のgtk.gdk階層は実際には便宜上のものでしたが、GDKは完全に独立したパッケージであり、GTKの一部ではないため、意味がありませんでした。階層と変数名はC、JavascriptなどのAPIとまったく同じであるため、新しい編成の方が理にかなっています。

この場合、gtk.gdk.DELETEはとして利用可能Gdk.EventType.DELETEであるため、次のことができるはずです。

window.emit('delete-event', Gdk.Event(Gdk.EventType.DELETE))

ただし、自分でイベントシグナルを送信することは想定されていないため、次のようにすることをお勧めします。

window.event(Gdk.Event(Gdk.EventType.DELETE))

またはさらに良いことに、モジュール内のイベントにまったく接続しないでください。その後window.destroy()、再帰エラーなしで使用できます。メインプログラムのdestroyシグナルに接続すると、を呼び出すことができますGtk.main_quit

于 2013-01-03T09:39:40.610 に答える