GUI с использованием Pygtk и поляны - PullRequest
0 голосов
/ 30 октября 2011

Я пытаюсь построить графический интерфейс, используя pygtk и glade в Windows. Я новичок в создании Python GUI, так что прошу прощения за мою нубность. Я посмотрел этот учебник и сделал именно так, как он сказал. Единственная разница была в том, что я на 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>

1 Ответ

2 голосов
/ 30 октября 2011
self.window.show()

В конце __init__ должен сделать это, я думаю.

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

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

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

Может быть хорошей идеей проверить, что ваше окнотакже находится в файле 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+"!")
...