青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

歲月流冰的技術博客--笨瑜

No prepare is prepare to lose~~~~~~

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  15 隨筆 :: 0 文章 :: 8 評論 :: 0 Trackbacks

在花了一些時間使用Tkinter創建用戶界面后發現它很簡單, 但是在如何把界面和程序代碼連接起來上費了些周折. 我決定試一試使用另外的工具包來創建界面. 經過一段時間的搜尋后我決定使用PyGTKGlade.

       使我下決心使用這兩個技術的原因是:. 它們是跨平臺的 . Glade能夠我把代碼和界面分離開來的愿望.

如果你之前從沒聽說過Glade, 它就是一個在GTK+GNOME下的用戶界面生成器. 它生成描述用戶界面的xml文件.

pyGTK的網站上這樣描述PyGTK:

PyGTKGTK+庫提供了一個在Python程序中便于使用的封裝, 它用來負責一些繁雜的細節諸如:管理內存和類型轉換. 當把它與PyORBitgnome-python結合起來時,它可以用來寫具有完備功能的Gnome應用程序.

現在我們從這里開始. 我正在我剛安裝的Debian系統上寫這些. 如果你也使用Debian或是一個基于Debian的發行版, 那么取得PyGTKGlade就很簡單:

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目錄里看到有兩個文件被創建, 一個是擴展名為.gladepglade的工程文件,另一個是擴展名為.gladeglade界面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窗口, 現在除了在你關閉窗口時正常退出外它什么也不能做:




接下來就要把這個按鈕的點擊事件和一個函數關聯起來. 我們需要再次使用Glade編輯界面來實現這個功能.

首先在主窗口中選中這個按鈕對象然后再在屬性窗口中選擇信號標簽頁. 在這里我們需要通過點擊信息瀏覽按鈕(…)然后選擇”Clicked”來添加一個信號.這就默認創建了一個名字為”on_btnHelloWorld_clicked”的處理器”. 我們可以修改這個處理器的名字但是現在使用默認的名字就可以了.



Glade的工作到此就結束了. 現在我們需要把這個事件和在代碼中一些東西關聯起來. 很幸運的是這個可以很簡單的用 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!”.

這就是本節課的內容, 但是現在我真的喜歡上了使用PyGTKGlade工作. 下面是完整的程序代碼:

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

忽然想到在windows下搭建起PyGTK程序也挺麻煩, 自己先試著一步步的走一遍, 以方便后人,

在本文中我們使用Python2.5的版本.

首先需要下載Python2.5版本, 它可以在這里下載到(http://www.python.org/download/). 下載完成后安裝.

然后需要下載并安裝PyObjects, PyGTK, pycario(這些都要for python2.5的版本),可以分別在http://ftp.gnome.org/pub/GNOME/binaries/win32/pygobject/2.12/

http://ftp.gnome.org/pub/GNOME/binaries/win32/pygtk/2.10/

http://ftp.gnome.org/pub/GNOME/binaries/win32/pycairo/1.2/ 里下載到, 下載并安裝. 然后需要gladeGtk-2.0runtime, 可以在http://gladewin32.sourceforge.net 找到, 下載它的dev安裝包,我使用的是它的2.10版本根據情況可以下載新版本. 下載完畢安裝.

好了, 到了這里您的PyGtk程序應該可以運行了,趕快試試我們前面例子里的程序吧:)

看看我的程序在windows下的截圖:)





/Files/jasson/demo.zip



參考文章:

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


posted on 2008-12-17 19:31 歲月流冰 閱讀(2851) 評論(0)  編輯 收藏 引用 所屬分類: Linux

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一区二区三区欧美在线观看| 久久综合狠狠| 久久久噜久噜久久综合| 樱桃视频在线观看一区| 久热国产精品| 一区二区精品国产| 欧美亚洲自偷自偷| 怡红院精品视频| 牛夜精品久久久久久久99黑人| 亚洲精品在线观看免费| 欧美一区二区在线看| 在线观看日韩国产| 欧美日韩国产一区| 欧美一级日韩一级| 亚洲丰满在线| 先锋影音网一区二区| 亚洲韩国日本中文字幕| 国产精品国产a级| 久久久久九九九九| 在线亚洲美日韩| 美女诱惑黄网站一区| 亚洲一区二区三区四区五区黄| 国产一区二区三区在线观看免费视频| 欧美成人乱码一区二区三区| 亚洲一区日韩在线| 亚洲国产精品福利| 久久精品国产亚洲一区二区三区| 亚洲日本va午夜在线电影 | 欧美日本乱大交xxxxx| 午夜精品国产| 亚洲免费观看高清完整版在线观看熊| 久久精品女人的天堂av| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 亚洲精品乱码久久久久久蜜桃91| 国产欧美精品xxxx另类| 欧美人与性动交cc0o| 久久久7777| 亚洲资源在线观看| 日韩一二三区视频| 欧美第一黄色网| 久久久久久黄| 午夜精品久久| 亚洲视频视频在线| 亚洲国产欧美在线| 国语精品中文字幕| 国产免费成人| 国产精品久久二区| 欧美日韩中文精品| 欧美精品二区| 欧美福利专区| 美女国内精品自产拍在线播放| 欧美在线亚洲一区| 性感少妇一区| 亚洲免费一在线| 亚洲午夜视频在线| 一本久久知道综合久久| 亚洲精品乱码久久久久久蜜桃91| 欧美黄色一区二区| 欧美α欧美αv大片| 久久综合九色综合欧美狠狠| 久久岛国电影| 欧美一区在线直播| 欧美一区二区三区精品| 亚洲欧美另类久久久精品2019| 亚洲图片在线观看| 亚洲社区在线观看| 亚洲一区在线视频| 亚洲欧美综合精品久久成人 | 亚洲免费中文| 亚洲欧美日韩综合| 午夜久久美女| 欧美亚洲日本网站| 欧美在线国产精品| 久久精品视频免费观看| 久久久久久久久伊人| 久久久久久久97| 久久一区精品| 欧美激情亚洲一区| 欧美日韩久久精品| 国产精品国产三级欧美二区 | 欧美精品999| 欧美日韩国产电影| 国产精品狼人久久影院观看方式| 国产精品网站在线播放| 国产综合18久久久久久| 亚洲国产婷婷综合在线精品| 99pao成人国产永久免费视频| 中日韩男男gay无套| 亚洲欧美乱综合| 久久久久久夜精品精品免费| 欧美福利小视频| 亚洲美女电影在线| 亚洲欧美精品| 久久中文欧美| 欧美日韩精品一区二区三区四区| 国产精品xxxav免费视频| 国产欧美一区二区精品婷婷| 伊人夜夜躁av伊人久久| 在线视频中文亚洲| 久久se精品一区精品二区| 免费看成人av| 在线亚洲激情| 久久野战av| 国产精品久久婷婷六月丁香| 黄色精品免费| 麻豆乱码国产一区二区三区| 亚洲免费观看| 性刺激综合网| 欧美国产亚洲精品久久久8v| 欧美日韩在线视频一区二区| 国产亚洲欧美一区二区| 91久久嫩草影院一区二区| 亚洲一区观看| 蜜臀99久久精品久久久久久软件| 日韩视频永久免费观看| 欧美在线视频一区二区三区| 欧美精品一区二区三区在线看午夜| 国产欧美不卡| 亚洲人www| 久久嫩草精品久久久久| 一二三四社区欧美黄| 美女诱惑一区| 国产亚洲综合在线| 亚洲综合色自拍一区| 欧美国产视频在线| 午夜欧美大片免费观看| 欧美日韩亚洲一区二区三区四区| 国产综合自拍| 欧美一区二区大片| 99视频超级精品| 欧美黄色网络| **性色生活片久久毛片| 久久精品亚洲精品国产欧美kt∨| 亚洲第一福利社区| 久久福利影视| 国产精品一二三四区| 99精品国产在热久久| 久久影视三级福利片| 亚洲国产精品热久久| 亚洲永久在线观看| 欧美日韩高清在线一区| 亚洲福利视频二区| 欧美中日韩免费视频| 亚洲精品中文字幕女同| 老色鬼精品视频在线观看播放| 国产一区二区三区精品久久久| 一区二区三区免费观看| 蜜桃av噜噜一区| 香蕉精品999视频一区二区 | 午夜一级久久| 国产精品porn| 亚洲一区二区久久| 亚洲第一精品夜夜躁人人躁| 久久不射网站| 国产精品一区毛片| 亚洲一区免费网站| 久久久久久**毛片大全| 亚洲欧洲精品天堂一级| 久久精品动漫| 国产酒店精品激情| 亚洲视频国产视频| 9久草视频在线视频精品| 亚洲精品男同| 亚洲电影免费观看高清完整版在线 | 免费不卡中文字幕视频| 亚洲一区二区免费看| 久久裸体艺术| 国产精品国产三级国产aⅴ浪潮| 亚洲国产日韩在线一区模特| 麻豆精品视频| 久久激情网站| 国产又爽又黄的激情精品视频| 新狼窝色av性久久久久久| 午夜精品视频网站| 国产精品亚洲第一区在线暖暖韩国| 亚洲第一页自拍| 午夜在线精品偷拍| 一区二区三区欧美日韩| 欧美色精品在线视频| 一区二区三区产品免费精品久久75 | 亚洲日本黄色| 91久久香蕉国产日韩欧美9色| 欧美高清在线播放| 欧美 日韩 国产在线| 亚洲国产成人av在线| 亚洲国产欧美一区二区三区同亚洲| 久热re这里精品视频在线6| 激情丁香综合| 亚洲电影免费在线观看| 欧美激情第3页| 一区二区三区产品免费精品久久75| 99国产精品久久久久久久| 亚洲精品小视频在线观看| 国产视频一区在线观看| 欧美一区二区三区喷汁尤物| 亚洲天堂av在线免费| 国产精品白丝黑袜喷水久久久| 亚洲欧美国产不卡| 亚洲欧美激情一区| 国产亚洲激情视频在线|