使用Pygtk和glade的GUI

时间:2011-10-30 13:09:58

标签: pygtk glade

我正在尝试在Windows上使用pygtk和glade构建GUI。我是python GUI大楼的菜鸟,所以请原谅我的noobness。我查看了这个 tutorial 并完全按照它说的做了。唯一的区别是我使用的是Windows 7 Home Premium x64。

我在教程中使用glade在一个窗口中放置了一个Label和一个按钮,然后我得到了一个libglade xml文件。然后我输入以下代码

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解释器进入该文件夹。显然程序运行但事情是我无法获得所有我得到的命令line是程序正在运行的。我甚至没有得到错误或其他什么。是因为我在Windows上的事实?我认为GTK是跨平台的,相同的代码应该在Windows和Linux上运行吗?

此处还有GLADE GUI设计器生成的.glade文件

<?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 个答案:

答案 0 :(得分:2)

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+"!")