August 26th, 2006没力气了..

  本来打算再接着翻译一篇文章的, 不过这段时间实在是太累了, 没力气了…
 
  不过玩了一天, 正在写我的TreePack… 还不错, 自己一边翻着原来翻译的教程一边做:)
 

August 19th, 2006

   昨天晚上表弟睡不着觉, 在那翻来覆去了十几分钟后实在憋不住了, 起来对我说:”哥哥, 我实在是睡不着, 俺妈妈告诉我睡不着时什么也不想一会就睡着了, 可是我已经什么都不想好久了, 就是睡不着!”, 我闭着眼问那你说咋办呢, 答:”我睡不着的时候妈妈都是起来和我玩一会游戏就好了”, ft, 只好睁开眼说:”玩什么游戏啊, 来..”, 于是他高兴的起来把灯开开, 然后就玩了一些类似小时候玩过的游戏, 然后我还夸他:”你们玩的可真新潮, 这些俺小时候都没玩过…”.
   游戏不一会就没得玩了, 反正我是不怎么配合, 他说让我干什么就干什么, 一会把左手拿出来,一会把右手拿出来, 让他翻来覆去的检查. 于是沉寂了一会后, 开始了下面的对话.
  弟:”哥哥, 我给你出一个题啊”
  我:”行”
  弟:”你说一个人从飞机上跳了下来, 他最怕忘了带什么”
  我:”降落伞”
  弟:”咦, 对了! 你以前做过这一题吗?”
  我:”没有”
  弟:”哦, 那我再给你出一题, 你说什么鱼会飞?”  
  我:”飞鱼”
  弟:”对了!那人以前做过这一题吗?”
  我:”没有”
  弟:”那你是怎么想起来的”
  我:”猜的”
  弟:”哦, 那你吃过飞鱼吗?”
  我:”没有”
  弟:”哦, 那你见过飞鱼吗?”
  我:”没有”
  弟:”那你见过饭店里放在盘子里的飞鱼吗?”
  我:”没有”
  弟:”哦, 那你吃过热带鲫鱼吗”
  我:”没有”
  弟:”我吃过,可好吃了”
  我:”你在哪吃的呀”
  弟:”俺妈在菜市场里买的, 她做的, 可好吃了!”
  我:”哦”
  弟:”热带鲫鱼一点都没有刺, 全是大刺, 一点不卡人”
  我:”哦”
  弟:”那个, 我再给你出一题”
  …
  …
  如此, 到了半夜, 终于在我的应答声中, 他终于没了声, 一看, 已经趴着, 睡得熟了. 而我却又好久没睡.
 小孩子睡的真是快~

使用PyGtk和Glade构建应用程序
  原文 
 在使用PyGTK和Glade完成了我的第一个例子后, 我决定写一个更加复杂的例子, 但是我写不出一个好的题目来. (注: 我很乐意听到你对任何例子或帖子有任何建议), 于是我决定写一个简单的程序或许会从这里找出一些有用的主题来.
  我的想法是创建一个可以让我记录我喝过酒的种类以及我对它们的喜好程度. 我写想这个程序很久了, 因此我想把学习PyGTK和写它结合起来会是一个好主意.
  我把这个项目命名为PyWine. 本例程的全部代码和Glade文件可以从这里下载.
  
文件: PyWine.tar.tar
大小: 30KB
下载: 下载

   我们要做的第一件事情是在项目目录下创建一个名为PyWine的新Glade项目. 然后创建一个名为”mainWindow”的窗口, 并把它的标题设置成”PyWine”. 然后像在例程1里那样为它添加一个销毁的信息处理器.
   然后我添加了一个有4行的垂直盒子(Vertical Box), (从上到下): 一行放置菜单栏,一行放工具栏,一行放一个树状或列表视图, 最后一行旋转一个状态栏. 把树状视图命名为”wineView”.

使用PyGTK和Glade创建用户界面>中拿来的).

#!/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 pyWine:

"""This is the PyWine application"""



def __init__(self):



#Set the Glade file

self.gladefile = "pywine.glade"

self.wTree = gtk.glade.XML(self.gladefile, "mainWindow")



#Create our dictionay and connect it

dic = {"on_mainWindow_destroy" : gtk.main_quit

, "on_AddWine" : self.OnAddWine}

self.wTree.signal_autoconnect(dic)



def OnAddWine(self, widget):

"""Called when the use wants to add a wine"""



print "OnAddWine"



if __name__ == "__main__":

wine = pyWine()

gtk.main()
  在这里多了一点额外的东西. 一个是on_AddWine信号的处理器. 如果你运行这个程序你会注意到当你点击Add Wine按钮或是从菜单栏中选择Add | Wine时会打印出”OnAddWine”. 代码中的新加的另外一个是我们把主窗口的名字传给gtk.glade.XML, 这会让我们只加载这个窗口和它的子窗口.
   下一步是创建一个用来存储酒信息的类:
class Wine:

"""This class represents all the wine information"""



def __init__(self, wine="", winery="", grape="", year=""):



self.wine = wine

self.winery = winery

self.grape = grape

self.year = year
   很简单, 下一步我们需要创建一个给wineDlg使用的类, 我们称它为wineDialog: 
class wineDialog:

"""This class is used to show wineDlg"""



def __init__(self, wine="", winery="", grape="", year=""):



#setup the glade file

self.gladefile = "pywine.glade"

#setup the wine that we will return

self.wine = Wine(wine,winery,grape,year)

 

   下一步我们需要为wineDialog添加一个函数, 它来从glade文件中装载wineDialg物件并显示. 我们还想要返回这个对话框的执行结果, 这会是一个gtk_RESPONSE, 你可以从PyGTK的网站上得到更多的信息.
   这个就是run 函数:
def run(self):

"""This function will show the wineDlg"""



#load the dialog from the glade file

self.wTree = gtk.glade.XML(self.gladefile, "wineDlg")

#Get the actual dialog widget

self.dlg = self.wTree.get_widget("wineDlg")

#Get all of the Entry Widgets and set their text

self.enWine = self.wTree.get_widget("enWine")

self.enWine.set_text(self.wine.wine)

self.enWinery = self.wTree.get_widget("enWinery")

self.enWinery.set_text(self.wine.winery)

self.enGrape = self.wTree.get_widget("enGrape")

self.enGrape.set_text(self.wine.grape)

self.enYear = self.wTree.get_widget("enYear")

self.enYear.set_text(self.wine.year)



#run the dialog and store the response

self.result = self.dlg.run()

#get the value of the entry fields

self.wine.wine = self.enWine.get_text()

self.wine.winery = self.enWinery.get_text()

self.wine.grape = self.enGrape.get_text()

self.wine.year = self.enYear.get_text()



#we are done with the dialog, destroy it

self.dlg.destroy()



#return the result and the wine

return self.result,self.wine
   你会注意到我们装载对话框的方法用的是和装载主窗口一样的方法. 我们调用gtk_glade_XML()并把我们想要装载物件的名称传给它. 这将会自动的显示这个对话框(和装载主窗口的行为相同), 但这样不够好, 我们想让run函数等待用户退出了这个对话框才返回. 要这么做我们需要从物件树里得到这个这个对话框物件(self.dlg = self.wTree.get_widget(“wineDlg”)),然后调用GTKDialogs 的run函数. 下面是PyGTK文档对这个函数的描述:

 Run()方法会在一个无穷的主循环里阻塞到它收到一个”response”信号或是销毁. 如果这个对话框是被销毁了, run ()方法会返回一个gtk_RESPONSE_NONE; 否则它返回一个在response信号中的响应id. 在进入这个无穷的主循环之前run ()方法会为你调用对话框的gtk_Widget_show()函数. 注意你仍然需要自己负责显示对话框的子窗口.
   在run()方法运行期间, delete事件的默认行为是被禁止的, 如果对话框收到一个delete的事件, 它并不会像窗口通常那样进行销毁, 这时run()方法会返回一个gtk_RESPONSE_DELETE_EVENT. 而且在run ()方法运行的时候对话框是模态的. 你可以通过调用responese()函数产生一个response信号来强制run ()方法在任何时候退出. 在run()方法运行的时候销毁对话框是很糟糕的主意, 因为你后面的代码无法知道对话框是不是已经销毁了.
   在run()方法返回后, 你需要负责对话框的隐藏和销毁.

    Ok按钮会返回gtk_RESPONSE_OK, Cancel按钮会返回gtk_RESPONSE_CANCEL, 大部分情况下我们仅关心对话框返回的wine信息是不是由用户点Ok按钮产生的.
   你还可以看到我们从对话框里得到GTKEntry物件来取/设置它们的文字. 总得来说这个函数还是相当简单的.

树状视图和列表存储(List Stores)

   现在我们有了用户想要往列表中添加的酒, 我们需要把它添加进gtk_TreeView中.
   GTKTreeViews的主要特性就是它们按照模型指定的任何方式来显示它们的数据. 数据模型可以用gtk_ListStore, gtk_TreeStore, gtk_TreeModelSort,或是gtk_GenericTreeModel. 在本例子中我们将使用 gkt_ListStore.
树状视图与模型的关系有些复杂,但是一旦你可以使用它你就会理解为什么它们是这样的. 很简单的讲模型表现数据,而树状视图则是一个简单的显示数据的方法. 所以对于同一份数据(模型)你可以有多个完全不同的视图. 下面是GTK+参考手册中的内容:

  在GTK+中要创建一个树或列表可以使用结合使用GtkTreeModel接口和GtkTreeView物件. 这个物件使用模型/视图/控制器模式设计, 它由以下四个主要部分组成:

树状视图物件(GtkTreeView)
列视图 (GtkTreeViewcolumn)
单元渲染器(GtkCellRenderer等等)
模型接口(GtkTreeModel)

  视图是由前面的三组对象组成, 最后一个是模型. MVC设计模式的一个主要收益是可以使用单个模型创建多个视图. 例如:由文件系统映射的模型(可能由一个文件管理器创建), 可以创建多种视图来显示文件系统的各个部分, 但仅需要在内存中保存一份拷贝

   我们要做的第一件是在自动把词典和物件树连接上后往pyWine类的__init__函数中添加一些代码:

#Here are some variables that can be reused later

self.cWine = 0

self.cWinery = 1

self.cGrape = 2

self.cYear = 3



self.sWine = "Wine"

self.sWinery = "Winery"

self.sGrape = "Grape"

self.sYear = "Year"



#Get the treeView from the widget Tree

self.wineView = self.wTree.get_widget("wineView")

#Add all of the List Columns to the wineView

self.AddWineListColumn(self.sWine, self.cWine)

self.AddWineListColumn(self.sWinery, self.cWinery)

self.AddWineListColumn(self.sGrape, self.cGrape)

self.AddWineListColumn(self.sYear, self.cYear)
    这个代码是相当直观的, 首先我们创建一些类似定义的变量(这样我们在后面就可以很轻松的改变它们)然后我们从物件树中得到gtk_TreeView. 在这之后我们通过调用一个新的函数来往列表中添加我们需要的列. AddWineListColumn是一个很快的小函数,但它能防止我们每次重复写创建列的代码.
def AddWineListColumn(self, title, columnId):
“””This function adds a column to the list view.
First it create the gtk.TreeViewColumn and then set
some needed properties”””

column = gtk.TreeViewColumn(title, gtk.CellRendererText()
, text=columnId)
column.set_resizable(True)
column.set_sort_column_id(columnId)
self.wineView.append_column(column)

  这个代码有一点点复杂, 首先我们创建一个使用gtk_CellRendererText作为它的gtk_CellRenderer的新gtk_TreeViewColumn. 这里是一些从GTK+参考手册里的较全的信息:
   一旦GtkTreeView物件有了一个模型, 它需要知道如何显示这个模型. 它通过列和单元渲染器来完成这项工作.
单元渲染器是用来使用某种方法在树状模型中绘图这些数据. 在GTK+2.x中有很多单元渲染器, 包括: GtkCellRenderText, GtkCellRendererPixbuf 和GtkCellRendererToggle. 写一个自定义的渲染器也相对简单.
   GtkTreeView使用GtkTreeViewColumn对象来组织在树状视图中纵的列. 它需要知道列的名字用来以标签的形式显示给用户, 使用单元渲染器的类型和对于一个给定的行它需要得到的数据块.
   因此简单的讲我们在创建一个包含特定标题的列, 并指明它将会使用gtk_CellRendererText(来显示简单的文字),然后再告诉它它与模型中的哪一项关联在一起.然后我们把它设置成可以改变大小而且用户可以通过点击列的头来对它进行排序. 在这之后我们把这一列加到视图中.
   好了, 我们完成了模型的创建. 我们要再回到pyWine类的__init__函数里继续:
#Create the listStore Model to use with the wineView

self.wineList = gtk.ListStore(str, str, str, str)

#Attatch the model to the treeView

self.wineView.set_model(self.wineList)
   大体上我们仅仅创建了一个gtk_ListStore并告诉它它有四个子项, 并且它们都是字符串. 然后我们把这个模型与视图绑定起来, 这就是所有我们需要为初始化gtk_TreeView做的.

把所有合并到一起  

 我们要做的最后一件事是完成pyWine类中的OnAddWine函数(从菜单或工具栏按钮调用). 这个函数很简单:

OnAddWine(self, widget):
“””Called when the use wants to add a wine“””
#Create the dialog, show it, and store the results
wineDlg = wineDialog();
result,newWine = wineDlg.run()

if (result == gtk.RESPONSE_OK):
“””The user clicked Ok, so let’s add this
wine to the wine list
“””
self.wineList.append(newWine.getList())

   这里我们创建了一个wineDialog的实例, 然后运行它并把用户输入的酒的信息保存.然后我们检查result是不是gtk_RESPONSE_OK(用户点击了Ok按钮), 如果是我们就把酒的信息添加到gtk_ListStore中, 它会自动的在gtk_TreeView中显示出来因此它们是连接在一起的.
   在wine类中我使用简单的getList函数以使阅读代码变得简单一些:

def getList(self):

"""This function returns a list made up of the

wine information.  It is used to add a wine to the

wineList easily"""

return [self.wine, self.winery, self.grape, self.year]

这里下载,你也可心浏览下面的完整程序:

#!/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 pyWine:

"""This is an Hello World GTK application"""



def __init__(self):



#Set the Glade file

self.gladefile = "pywine.glade"

self.wTree = gtk.glade.XML(self.gladefile, "mainWindow")



#Create our dictionay and connect it

dic = {"on_mainWindow_destroy" : gtk.main_quit

, "on_AddWine" : self.OnAddWine}

self.wTree.signal_autoconnect(dic)



#Here are some variables that can be reused later

self.cWine = 0

self.cWinery = 1

self.cGrape = 2

self.cYear = 3



self.sWine = "Wine"

self.sWinery = "Winery"

self.sGrape = "Grape"

self.sYear = "Year"



#Get the treeView from the widget Tree

self.wineView = self.wTree.get_widget("wineView")

#Add all of the List Columns to the wineView

self.AddWineListColumn(self.sWine, self.cWine)

self.AddWineListColumn(self.sWinery, self.cWinery)

self.AddWineListColumn(self.sGrape, self.cGrape)

self.AddWineListColumn(self.sYear, self.cYear)



#Create the listStore Model to use with the wineView

self.wineList = gtk.ListStore(str, str, str, str)

#Attache the model to the treeView

self.wineView.set_model(self.wineList)



def AddWineListColumn(self, title, columnId):

"""This function adds a column to the list view.

First it create the gtk.TreeViewColumn and then set

some needed properties"""



column = gtk.TreeViewColumn(title, gtk.CellRendererText()

, text=columnId)

column.set_resizable(True)

column.set_sort_column_id(columnId)

self.wineView.append_column(column)



def OnAddWine(self, widget):

"""Called when the use wants to add a wine"""

#Cteate the dialog, show it, and store the results

wineDlg = wineDialog();

result,newWine = wineDlg.run()



if (result == gtk.RESPONSE_OK):

"""The user clicked Ok, so let's add this

wine to the wine list"""

self.wineList.append(newWine.getList())



class wineDialog:

"""This class is used to show wineDlg"""



def __init__(self, wine="", winery="", grape="", year=""):



#setup the glade file

self.gladefile = "pywine.glade"

#setup the wine that we will return

self.wine = Wine(wine,winery,grape,year)



def run(self):

"""This function will show the wineDlg"""



#load the dialog from the glade file

self.wTree = gtk.glade.XML(self.gladefile, "wineDlg")

#Get the actual dialog widget

self.dlg = self.wTree.get_widget("wineDlg")

#Get all of the Entry Widgets and set their text

self.enWine = self.wTree.get_widget("enWine")

self.enWine.set_text(self.wine.wine)

self.enWinery = self.wTree.get_widget("enWinery")

self.enWinery.set_text(self.wine.winery)

self.enGrape = self.wTree.get_widget("enGrape")

self.enGrape.set_text(self.wine.grape)

self.enYear = self.wTree.get_widget("enYear")

self.enYear.set_text(self.wine.year)



#run the dialog and store the response

self.result = self.dlg.run()

#get the value of the entry fields

self.wine.wine = self.enWine.get_text()

self.wine.winery = self.enWinery.get_text()

self.wine.grape = self.enGrape.get_text()

self.wine.year = self.enYear.get_text()



#we are done with the dialog, destory it

self.dlg.destroy()



#return the result and the wine

return self.result,self.wine





class Wine:

"""This class represents all the wine information"""



def __init__(self, wine="", winery="", grape="", year=""):



self.wine = wine

self.winery = winery

self.grape = grape

self.year = year



def getList(self):

"""This function returns a list made up of the

wine information.  It is used to add a wine to the

wineList easily"""

return [self.wine, self.winery, self.grape, self.year]



if __name__ == "__main__":

wine = pyWine()

gtk.main()

   原文: (奇怪, 我把类型选为翻译, 咋看上去啥也没有哪!!)

   在花了一些时间使用Tkinter创建用户界面后发现它很简单, 但是在如何把界面和程序代码连接起来上费了些周折. 我决定试一试使用另外的工具包来创建界面. 经过一段时间的搜寻后我决定使用PyGTK和Glade.

  使我下决心使用这两个技术的原因是:一. 它们是跨平台的 二. Glade能够我把代码和界面分离开来的愿望.

  如果你之前从没听说过Glade, 它就是一个在GTK+和GNOME下的用户界面生成器. 它生成描述用户界面的xml文件.

   pyGTK的网站上这样描述PyGTK:

PyGTK为GTK+库提供了一个在Python程序中便于使用的封装, 它用来负责一些繁杂的细节诸如:管理内存和类型转换. 当把它与PyORBit和gnome-python结合起来时,它可以用来写具有完备功能的Gnome应用程序.

  现在我们从这里开始. 我正在我刚安装的Debian系统上写这些. 如果你也使用Debian或是一个基于Debian的发行版, 那么取得PyGTK和Glade就很简单:

apt-get install python-gtk2 python-glade2

 

   现在让我们创建我们第一个简单的界面, 这是你第一次启动Glade时的界面: 

 

我们需要做的就是按下Glade面板的上的”Window” 按钮来创建主窗口. 然后就可以编辑这个窗口的属性了:

 

   我们把这个窗口命名为MainWindow, 然后再把它的标题设置成”Hello World!”
   如果你已经习惯使用集成的界面设计工具像VisualStudio, 可能在最初使用Glade的时候会有些感到奇怪. 特别是当你实际上并不是把控件放到你想放到屏幕上的一些地方而是把它们”打包”. 但更奇怪的是(至少是对我来讲)大多数界面设计工具都是这样做的,而另外的一些程序像Visual studio实际上才是奇怪的.
   无论如何我们回到向导上来, 接下来要做的事是添加一个标签来告诉用户去点击按钮(当然我们可以把文字放到按钮上,但是只有一个控件有多少乐趣啊?!). 由于GTK使用容器来打包器件, 我们要做的第一件事就是添加一个容器. 因为我们要把标签放到按钮上,所以使用了一个有两行的纵向盒子(Vertical Box). 你可以通过首先点击它在Glade面板上图标然后再点击一些主窗口把它添加上去. 这时候会有一个小对话框弹出来问你需要多少行, 现在我们需要2行.
   接下来就是通过点击Glade面板上的标签按钮然后再点击刚才加上去的窗口的第一行把标签添加上去. 标签的名字就使用默认的名字”label1”, 把它的文字(text)修改为”Please click on the button!”. 修改标签上的文字可以在属性窗口里完成, 你可能还没有注意到这个窗口, 它可以显示并允许修改当前选中的控件.
   再接下来就是再使用和添加标签相同的方法把按钮添加到第二行去(当然不能是第一行了). 我们把这个按钮命名为btnHelloworld,把它上面的文字修改为”Click me!”.
    现在我们需要设置工程选项了. 我把这个工程命名为PyHelloWorld,并把它保存在”my projects/PyHelloWorld”文件夹中:

 

   然后你就可以在PyHelloWorld目录里看到有两个文件被创建, 一个是扩展名为.gladep的glade的工程文件,另一个是扩展名为.glade的glade界面XML文件.
   现在我们需要创建一个python程序,它装载这个glade文件然后显示它. 正面我就在这个目录里创建了一个名为PyHelloWorld.py的文件:

 

    现在我们首先需要导入在这个工程里需要的所有库:

#!/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)

    接下来我们要做的就是创建主要的类. 我把它命名为HelloWorldGTK. 我们通过写它的__init__函数来装载glade文件:

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

if (self.window):

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

   上面的代码里, 我们做的第一件事(定义类以后)是指定我们要使用的glade文件并使用它创建一个gtk.glade.XML对象. 正面是pyGTK2参考里对这个对象的描述:

 这个对象代表一个XML接口描述的实例. 当一个此类对象被创建时, 会读XML文件,接口也会被创建出来. Gtk.glade.XML对象提供了一个可以通过在xml描述中赋给物件的名称访问这些物件的接口.
  此gtk.glade.XML对象也可以用来关联在XML描述中已命名的信号和信号处理器. Glade库(libglade)也提供了一个可以在程序的符号表中查找信号处理器名称并自动的把尽可能多的信号处理器关联起来的接口.

   因此当创建完gtk.glade.XML对象后我们就需要创建并装载主界面.
  接下来就是实例化主窗口并把它的销毁事件与get.main_quit()函数关联起来.这样就会在关闭主窗口时退出这个程序. 否则的话在主窗口关闭后程序还会继续运行(这显然不是我们所希望的).
  这些就是HelloWorldGTK类完成的工作. 接下来我们就需要创建一个这个类的实例然后开始GTK的主循环:

if __name__ == "__main__":

hwg = HellowWorldGTK()

gtk.main()

   下面就是程序的结果, 现在来说还算是相当简单. 如果你运行这个文件,你会看到这个小的GTK窗口, 现在除了在你关闭窗口时正常退出外它什么也不能做:

 

to be continue….(太晚了,回家先)

 
接上篇:)
   接下来就要把这个按钮的点击事件和一个函数关联起来. 我们需要再次使用Glade编辑界面来实现这个功能.
   首先在主窗口中选中这个按钮对象然后再在属性窗口中选择”信号”标签页. 在这里我们需要通过点击信息浏览按钮(…)然后选择”Clicked”来添加一个信号.这就默认创建了一个名字为”on_btnHelloWorld_clicked”的处理器”. 我们可以修改这个处理器的名字但是现在使用默认的名字就可以了.

gtk.glade.XML.signal_autoconnect函数来实现.

#Create our dictionay and connect it

dic = { "on_btnHelloWorld_clicked" : self.btnHelloWorld_clicked,

"on_MainWindow_destroy" : gtk.main_quit }

self.wTree.signal_autoconnect(dic)

 简单的讲, 这个词典是由事件名和所要关联的函数构成的. 你可以看到我们把按钮的点击事件和一个函数关联起来,然后再把”on_MainWindow_destory”事件和gtk.mainquit()函数关联起来. 这个是我们原来在关闭掉窗口时程序代码的一个替换, 如果你还想使用原来的词典, 你应当在glade中为主窗口添加一个destory事件.
   下一件事就是为类HeloowWolrdGTK创建btnHelloWorld_clicked函数:

def btnHelloWorld_clicked(self, widget):

print "Hello World!"

 真是太简单了! 现在当你运行它的时候, 点击一下”Click Me!”按钮你可以看到在命令行中输出了”Hello World!”.
这就是本节课的内容, 但是现在我真的喜欢上了使用PyGTK和Glade工作. 下面是完整的程序代码:

#!/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)



#Create our dictionay and connect it

dic = { "on_btnHelloWorld_clicked" : self.btnHelloWorld_clicked,

"on_MainWindow_destroy" : gtk.main_quit }

self.wTree.signal_autoconnect(dic)



def btnHelloWorld_clicked(self, widget):

print "Hello World!"





if __name__ == "__main__":

hwg = HellowWorldGTK()

gtk.main()

有用的链接:

http://www.linuxjournal.com/article/6586
http://www.async.com.br/~kiko/pygtk-web/articles/bitpodder/BitPodder.htm
http://www.linuxjournal.com/article/7421
http://www.pygtk.org/articles.html
http://www.pygtk.org/tutorial.html

August 4th, 2006CU blog太难用了

   很不方便, 不提供代码着色, 编辑的时候也不爽, 图片我也搞不好, 弄的真难看:(….

© 2007 pangwa's Blog | iKon Wordpress Theme by Windows Vista Administration | Powered by Wordpress