我正在尝试在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>
答案 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+"!")