Открыть подокно в GTK3

Когда Canonical-Quickly настраивает новый проект, в диалоговом окне «О программе» есть следующая строка:

    self.AboutDialog = AboutNewAppDialog

Я отредактировал пункт меню в Glade и добавил следующий код в код Python для главного окна:

    self.menuabout = self.builder.get_object("menuabout")

а также

   def on_menuabout_activate(self, menuitem, data=None):
        print("About activated")
        self.response = self.AboutDialog.run()
        self.AboutDialog.hide()

Но это вызывает ошибку:

   self.response = self.AboutDialog.run()
   TypeError: run() takes exactly 1 argument (0 given)

Я также работаю с этим руководством, в котором используется аналогичный синтаксис: http://gnipsel.com/glade/glade02b.html

Когда я помещаю Gtk.Dialog в скобки, программа вылетает:

   self.response = self.AboutDialog.run(Gtk.Dialog)

Моя вторая попытка:

  #!/usr/bin/env python
  from gi.repository import Gtk
  class Handler:
        def on_mainwindow_destroy(self, menuitem):
              print("destroy window")
              Gtk.main_quit()

        def on_menuquit_activate(self, menuitem):
              print("quit from menu")
              Gtk.main_quit()

        def on_menuabout_activate(self, menuitem, data=None):
              print("menu about activated")
              response = aboutdialog.run()
              aboutdialog.hide()

  builder = Gtk.Builder()
  builder.add_from_file("psn.glade")
  builder.connect_signals(Handler())

  window = builder.get_object("mainwindow")
  window.show_all()

  Gtk.main()

Ошибка:

«Отслеживание (последний последний вызов): файл «psn_main.py», строка 21, в ответе on_menuabout_activate = aboutdialog.run() NameError: имя «aboutdialog» не определено»


person tobias47n9e    schedule 30.03.2014    source источник


Ответы (1)


Я заставил его работать, используя следующий код. Функция активируется пунктом меню, который вызывает «on_menuabout_activate». Он выводит отладочное сообщение на консоль. Затем он получает диалоговое окно aboutdialog из файлаglade и запускает его:

  def on_menuabout_activate(self, menuitem, data=None):
        print("menu about activated")
        aboutdialog = builder.get_object("aboutdialog")
        aboutdialog.run()
person tobias47n9e    schedule 31.03.2014