Графический интерфейс с использованием Pygtk и glade

Я пытаюсь создать графический интерфейс, используя pygtk и glade в Windows. Я новичок в создании графического интерфейса пользователя на Python, так что, пожалуйста, извините за мою глупость. Я просмотрел это руководство и сделал именно то, что было сказано. Единственная разница заключалась в том, что я использую Windows 7 Home Premium x64.

Я поместил метку и кнопку в окно, используя glade, как в учебнике, а затем получил XML-файл libglade. Затем я набрал следующий код

import sys
import pygtk
import gtk
import gtk.glade

pygtk.require("2.0")

class HellowWorldGTK:

    def __init__(self):

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

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

        if (self.window):
            self.window.connect("destroy", gtk.main_quit)

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

Я помещаю оба файла в одну папку, а затем запускаю интерпретатор python из командной строки в папку. По-видимому, программа работает, но дело в том, что я не могу получить интерфейс, все, что я получаю в командной строке, заключается в том, что что Программа запущена. Я даже не получаю ошибки или что-то в этом роде. Это из-за того, что я нахожусь в Windows ?? Я думал, что GTK кроссплатформенный, и тот же код должен работать как в Windows, так и в Linux ??

Также вот файл .glade, созданный дизайнером GLADE GUI.

<?xml version="1.0" encoding="UTF-8"?>
<glade-interface>
  <!-- interface-requires gtk+ 2.24 -->
  <!-- interface-naming-policy project-wide -->
  <widget class="GtkWindow" id="Hello world!">
    <property name="can_focus">False</property>
    <property name="resizable">False</property>
    <child>
      <widget class="GtkVBox" id="vbox1">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <child>
          <widget class="GtkLabel" id="Click Here!">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="label" translatable="yes">label</property>
          </widget>
          <packing>
            <property name="expand">True</property>
            <property name="fill">True</property>
            <property name="position">0</property>
          </packing>
        </child>
        <child>
          <widget class="GtkButton" id="Please Click on the Button!">
            <property name="label" translatable="yes">button</property>
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="receives_default">True</property>
            <property name="use_action_appearance">False</property>
          </widget>
          <packing>
            <property name="expand">True</property>
            <property name="fill">True</property>
            <property name="position">1</property>
          </packing>
        </child>
      </widget>
    </child>
  </widget>
</glade-interface>

person hmms    schedule 30.10.2011    source источник


Ответы (1)


self.window.show()

Думаю, в конце __init__ надо это сделать.

ИЗМЕНИТЬ ПОСЛЕ КОММЕНТАРИИ ...

self.window = self.wTree.get_widget("MainWindow")

но нет окна с названием «MainWindow», я думаю, вы назвали свое окно «Hello world!», попробуйте загрузить его вместо этого (или переименуйте свое окно в glade).

Было бы неплохо проверить, действительно ли ваше окно находится в файле glade.

window_name="Hello World!"
self.window = self.wTree.get_widget(window_name)
if (self.window):
    self.window.connect("destroy", gtk.main_quit)
else:
    raise Exception("I couldn't find the window called "+window_name+"!")
person DaedalusFall    schedule 30.10.2011
comment
Мне пришлось установить для параметра Visble значение yes на вкладке общих свойств в дизайнере поляны. Программа теперь работает нормально. Большое спасибо :) - person hmms; 30.10.2011
comment
@hmms Если это ответило на ваш вопрос, вы должны отметить его как правильный, нажав галочку рядом с ответом. Это позволит всем узнать, что вопрос решен, а не менять заголовок. - person Kris Harper; 07.11.2011