0

gtk で構築されたウィンドウに関して解決できない小さな問題があります。

私のプログラムには、コンテンツを含む別の gtk.window を表示する 2 つの関数があります (1 つはボタン付き - テキストを表示します)、もう 1 つはキー押下イベント - matplotlib の図を表示します)。プログラムの最初の実行では、2 つのウィンドウが要求した内容で適切に表示されますが、別のウィンドウを閉じて再度表示しようとすると (どちらの場合も) 空のウィンドウが表示され、わかりません。どうして!

提案があれば、喜んでお読みいたします (プログラムの小さなバージョンを作成してテストし、後で投稿に追加します)。

ありがとう!

編集:これは私がテストしたサンプルです。同じ問題が発生すると思います.gladeファイルは大したことはありません(1つのウィンドウと2つのボタン)が、ボタンの1つをクリックすると、最初にウィンドウが正常になり、閉じて再度開くと、実際のプログラムと同じ問題が発生します。

import gtk
import gtk.glade

class Testwin:
    # Initialisation of window and connection of signals
    def __init__(self):
        self.Main = gtk.Builder()
        self.Main.add_from_file('Testwin.glade')

        self.Mainwindow = self.Main.get_object("Main_window")
        self.Main.connect_signals(self)

        self.extWindow1 = self.Main.get_object("External_window1")
        self.extWindow2 = self.Main.get_object("External_window2")


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

    def display_window1(self, widget):
        self.extWindow1.show_all()        

    def display_window2(self, widget):
        self.extWindow2.show_all()        


if __name__ == "__main__":
    Testwin()
    gtk.main()

(誰かがテストしたい場合に備えて、.gladeファイルも入れました)

<?xml version="1.0" encoding="UTF-8"?>
<interface>
  <requires lib="gtk+" version="2.24"/>
  <!-- interface-naming-policy project-wide -->
  <object class="GtkWindow" id="External_window1">
    <property name="can_focus">False</property>
    <child>
      <placeholder/>
    </child>
  </object>
  <object class="GtkWindow" id="External_window2">
    <property name="can_focus">False</property>
    <child>
      <placeholder/>
    </child>
  </object>
  <object class="GtkWindow" id="Main_window">
    <property name="visible">True</property>
    <property name="can_focus">False</property>
    <signal name="destroy" handler="on_window_destroy" swapped="no"/>
    <child>
      <object class="GtkHButtonBox" id="hbuttonbox1">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <child>
          <object class="GtkButton" id="button1">
            <property name="label" translatable="yes">button</property>
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="receives_default">True</property>
            <signal name="clicked" handler="display_window2" swapped="no"/>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">False</property>
            <property name="position">0</property>
          </packing>
        </child>
        <child>
          <object class="GtkButton" id="button2">
            <property name="label" translatable="yes">button</property>
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="receives_default">True</property>
            <signal name="clicked" handler="display_window1" swapped="no"/>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">False</property>
            <property name="position">1</property>
          </packing>
        </child>
      </object>
    </child>
  </object>
</interface>
4

0 に答える 0