0

关于用 gtk 构建的窗口,我有一个无法解决的小问题:

在我的程序中,我有两个函数显示一个单独的 gtk.window,其中包含内容(一个带有按钮 - 显示文本 - 另一个带有按键事件 - 显示 matplotlib 图 -)。在程序第一次运行时,两个窗口正确显示了我要求的内容,但是当我关闭单独的窗口并尝试再次显示它时,我得到一个空窗口(在这两种情况下),我无法弄清楚为什么!

如果您有一些建议,我将很高兴阅读它们(我将编写我的程序的一个小版本来测试它并稍后将其添加到帖子中)。

谢谢!

编辑:这是我测试的示例,我认为会出现同样的问题,glade 文件没什么大不了的(一个窗口和两个按钮),但是当我单击其中一个按钮时,第一次窗口是正常的,当我关闭并重新打开,我遇到了与实际程序中相同的问题。

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