0

私がpygtkで理解していないことがあります:

複数のサーバーで遠隔地のネットワーク構成を操作するために、slqlite データベースとやり取りするための GUI を作成しようとしています。

したがって、次の 3 つのファイルを作成します。

Mygui.py にはすべての pygtk 命令が含まれています。
Mydata.py にはすべての sqlite 操作が含まれ
、最後に Mygui と sqlite 間の相互作用を実行する Myapp.py が含まれます。

しかし、コールバック関数とその定義を実装する方法がわかりません:

Myapp.py のこれらの行で:

 class Myapp():
   def __init__():
      self.data = Mydata()
      self.gui = Mygui()

...

Mygui.py で次のような行を使用します。

 class Mygui():
   def __init__():

... self.Base_menu = gtk.Menu() self.contenu_item = gtk.MenuItem('contenu base") self.Base_menu.append( self.contenu_item ) ... # その他

       self.contenu_item("activate", contenu_callback )

「contenu_callback」はMyapp.pyにあるはずだと思います(おそらくfalse)。データベースをディスプレイに接続していますが、方法がわかりませんか?


(5分後に編集)

答えてくれてありがとう、でも私が正しく理解しているかどうかはわかりません:
あなたの最後の行から私が理解しているのは、モジュール「MyGui.py」で、"import Myapp.py()"を呼び出すことができるように追加する必要があるということ "Myapp.activate_callback" ( "other.module" in this case being Myapp )です。

したがって、グローバルには、「import Mydata」と「import Mygui」を含む「Myapp.py」と、「import pygtk」と「import Myapp」を含むモジュール「Mygui.py」があります。

"MyGui" をインポートする "Myapp.py" と "Myapp" をインポートする "MyGui" の間の循環関係に、私はあまり満足していません。

これは、アプリケーション処理から GUI 手続きを分離するために本当にすべきことですか?

4

2 に答える 2

0

それは、分離についてどの程度厳密にしたいかによって異なります。少し緩い方がいい場合は、myapp 自体を Mygui インスタンスに渡し、Mygui が Myapp のメソッドを呼び出すことができます。

class Myapp():
   def __init__():
      self.data = Mydata()
      self.gui = Mygui(self)

または、Mygui で一連のイベントを定義し、Myapp にそれらのイベントのハンドラーを登録させることができます。

class Myapp():
   def __init__():
      self.data = Mydata()
      self.gui = Mygui()
      self.gui.connect("record-saved", self.record_saved_handler)

後者はより分離されていますが、より多くの儀式が含まれます.

于 2012-06-30T06:59:44.410 に答える
0

コールバックは任意の呼び出し可能なものにすることができるので、どこに配置するかはあなた次第です。

def activate_callback(widget, data=None):
    pass 
some_widget.connect("activate", activate_callback)


class SomeClass(object):
    def activate_callback(widget, data=None):
        pass
my_class = SomeClass()
some_widget.connect("activate", my_class.activate_callback)


import some.other.module
some_widget.connect("activate", some.other.module.activate_callback)
于 2012-06-28T13:56:37.693 に答える