поместить интерфейс Glade в python

Я сделал графический интерфейс на поляне, который хочу поместить в программу на Python. Я адаптировал инструкции из учебника, который нашел в Интернете, и загрузил их в свой файл Glade (http://www.pygtk.org/articles/pygtk-glade-gui/Creating_a_GUI_using_PyGTK_and_Glade.htm). Когда у меня были проблемы, я попробовал что-то простое (одна кнопка), назвав это так же, как в этом уроке, и скопировал вставку их кода, и это все равно не сработало. Я также просмотрел (http://www.linuxjournal.com/article/6586?page=0,2), где функция вызывается немного по-другому ("self.wTree=gtk.glade.XML (gladefile, имя окна)" вместо без имени окна), и реализовал эквивалент с моим, и это не помогло. У меня определенно работает pygtk, раньше я делал что-то без Glade, и все работало нормально. Ошибка, которую я получаю:

/usr/share/themes/NOX/gtk-2.0/gtkrc:233: Murrine configuration option "gradients" 
 is no longer supported and will be ignored.

(helloWorld.py:9804): libglade-WARNING **: Expected <glade-interface>.  Got    
 <interface>.

(helloWorld.py:9804): libglade-WARNING **: did not finish in PARSER_FINISH state
Traceback (most recent call last):
File "helloWorld.py", line 31, in <module>
hwg = HellowWorldGTK()
File "helloWorld.py", line 22, in __init__
self.wTree = gtk.glade.XML(self.gladefile) 
RuntimeError: could not create GladeXML object

У меня хубунту 11.04. Конфигурация Murrine возникает при открытии любого приложения gtk, но я включил ее на случай, если она уместна. Вот код, который я взял из учебника (но не работает)

#!/usr/bin/env python

import sys
try:
    import pygtk
    pygtk.require("2.0")
except:
    pass
try:
    import gtk
    import gtk.glade
except:
    sys.exit(1)

class HellowWorldGTK:
"""This is an Hello World GTK application"""

def __init__(self):

    #Set the Glade file
    self.gladefile = "PyHelloWorld.glade"  
    self.wTree = gtk.glade.XML(self.gladefile) 

    #Get the Main Window, and connect the "destroy" event
    self.window = self.wTree.get_widget("MainWindow")
    self.window.show()
    if (self.window):
        self.window.connect("destroy", gtk.main_quit)


if __name__ == "__main__":
    hwg = HellowWorldGTK()
    gtk.main()

person Bianca    schedule 04.09.2011    source источник
comment
Это отвечает на ваш вопрос: stackoverflow. com/questions/2668618/   -  person dumbmatter    schedule 04.09.2011
comment
Взгляните на эту ссылку techaffairs.com.br/ в этом посте вы сможете получить пример кода, этот пост на португальском языке.   -  person    schedule 23.02.2012


Ответы (5)


Попробуйте с этим кодом:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pygtk
pygtk.require("2.0")
import gtk
import gtk.glade

class HellowWorldGTK:

    def __init__(self):
        self.gladefile = "helloworld.glade" 
        self.glade = gtk.Builder()
        self.glade.add_from_file(self.gladefile)
        self.glade.connect_signals(self)
        self.glade.get_object("MainWindow").show_all()

    def on_MainWindow_delete_event(self, widget, event):
        gtk.main_quit()

if __name__ == "__main__":
    try:
        a = HellowWorldGTK()
        gtk.main()
    except KeyboardInterrupt:
        pass

Помните: в Glade измените «Настройки» файла на «GTKBuilder» (а не на «libglade»).

person MasterSieben    schedule 10.09.2011
comment
Спасибо, это то, что я в итоге сделал (уже, но это будет полезно для справки других людей) :). - person Bianca; 11.09.2011

Ваш PyHelloWorld.glade неверен. Убедитесь, что вы создали его с правильным приложением Glade, есть приложения Glade2 и Glade3, которые можно установить и использовать. Если вы скачали файл, убедитесь, что он правильный. В сообщении об ошибке все сказано:

Expected <glade-interface>.  Got  <interface>

Таким образом, файл XML имеет тег интерфейса, но библиотека PyGTK ожидает тег интерфейса Glade.

person lzap    schedule 04.09.2011

Поскольку у меня всегда возникают проблемы с этим, вот код Python 2.7, который я использую для одного или другого:

для Libglade:

# needs libglade (not for gtk-builder)
import pygtk
pygtk.require("2.0")
import gtk
import gtk.glade

gladefile = "test-libglade.glade"
wTree = gtk.glade.XML(gladefile)
window = wTree.get_widget("MainWindow")
if (window):
  window.connect("destroy", gtk.main_quit)

window.show_all() # must have!
gtk.main()

Для GtkBuilder:

# needs gtk-builder (not for libglade)
import pygtk
pygtk.require("2.0")
import gtk

gladefile = "test-gtkbuilder.glade"
wTree = gtk.Builder()
wTree.add_from_file(gladefile)
window = wTree.get_object("MainWindow")
if (window):
  window.connect("destroy", gtk.main_quit)

window.show_all() # must have!
gtk.main()

В Glade вы можете просто добавить окно, назвать его MainWindow и сохранить две версии с соответствующими именами файлов, как указано выше, для каждого формата; и эти фрагменты должны работать с ними соответственно.

Надеюсь, это кому-нибудь поможет,
Ура!

person sdaau    schedule 10.11.2013

Это работает отлично.

#!/usr/bin/python
import pygtk
pygtk.require("2.0")
import gtk
import gtk.glade
class SubinsWindow:
 def __init__(self):
  self.gladefile = "game.glade"
  self.glade = gtk.Builder()
  self.glade.add_from_file(self.gladefile)
  self.glade.connect_signals(self)
  self.win=self.glade.get_object("window1") # Window Name in GLADE
  self.win.show_all()

if __name__ == "__main__":
 a = SubinsWindow()
 gtk.main()
person Ernestas Žaglinskas    schedule 20.12.2013