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

歲月流冰的技術(shù)博客--笨瑜

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

  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
  15 隨筆 :: 0 文章 :: 8 評(píng)論 :: 0 Trackbacks

在花了一些時(shí)間使用Tkinter創(chuàng)建用戶界面后發(fā)現(xiàn)它很簡(jiǎn)單, 但是在如何把界面和程序代碼連接起來上費(fèi)了些周折. 我決定試一試使用另外的工具包來創(chuàng)建界面. 經(jīng)過一段時(shí)間的搜尋后我決定使用PyGTKGlade.

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

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

pyGTK的網(wǎng)站上這樣描述PyGTK:

PyGTKGTK+庫(kù)提供了一個(gè)在Python程序中便于使用的封裝, 它用來負(fù)責(zé)一些繁雜的細(xì)節(jié)諸如:管理內(nèi)存和類型轉(zhuǎn)換. 當(dāng)把它與PyORBitgnome-python結(jié)合起來時(shí),它可以用來寫具有完備功能的Gnome應(yīng)用程序.

現(xiàn)在我們從這里開始. 我正在我剛安裝的Debian系統(tǒng)上寫這些. 如果你也使用Debian或是一個(gè)基于Debian的發(fā)行版, 那么取得PyGTKGlade就很簡(jiǎn)單:

apt-get install python-gtk2 python-glade2

現(xiàn)在讓我們創(chuàng)建我們第一個(gè)簡(jiǎn)單的界面, 這是你第一次啟動(dòng)Glade時(shí)的界面:



我們需要做的就是按下Glade面板的上的”Window” 按鈕來創(chuàng)建主窗口. 然后就可以編輯這個(gè)窗口的屬性了:



我們把這個(gè)窗口命名為MainWindow, 然后再把它的標(biāo)題設(shè)置成”Hello World!”

如果你已經(jīng)習(xí)慣使用集成的界面設(shè)計(jì)工具像VisualStudio, 可能在最初使用Glade的時(shí)候會(huì)有些感到奇怪. 特別是當(dāng)你實(shí)際上并不是把控件放到你想放到屏幕上的一些地方而是把它們打包”. 但更奇怪的是(至少是對(duì)我來講)大多數(shù)界面設(shè)計(jì)工具都是這樣做的,而另外的一些程序像Visual studio實(shí)際上才是奇怪的.

無論如何我們回到向?qū)蟻?/span>, 接下來要做的事是添加一個(gè)標(biāo)簽來告訴用戶去點(diǎn)擊按鈕(當(dāng)然我們可以把文字放到按鈕上,但是只有一個(gè)控件有多少樂趣啊?!). 由于GTK使用容器來打包器件, 我們要做的第一件事就是添加一個(gè)容器. 因?yàn)槲覀円褬?biāo)簽放到按鈕上,所以使用了一個(gè)有兩行的縱向盒子(Vertical Box). 你可以通過首先點(diǎn)擊它在Glade面板上圖標(biāo)然后再點(diǎn)擊一些主窗口把它添加上去. 這時(shí)候會(huì)有一個(gè)小對(duì)話框彈出來問你需要多少行, 現(xiàn)在我們需要2.

接下來就是通過點(diǎn)擊Glade面板上的標(biāo)簽按鈕然后再點(diǎn)擊剛才加上去的窗口的第一行把標(biāo)簽添加上去. 標(biāo)簽的名字就使用默認(rèn)的名字”label1”, 把它的文字(text)修改為”Please click on the button!”. 修改標(biāo)簽上的文字可以在屬性窗口里完成, 你可能還沒有注意到這個(gè)窗口, 它可以顯示并允許修改當(dāng)前選中的控件.

   再接下來就是再使用和添加標(biāo)簽相同的方法把按鈕添加到第二行去(當(dāng)然不能是第一行了). 我們把這個(gè)按鈕命名為btnHelloworld,把它上面的文字修改為”Click me!”.

    現(xiàn)在我們需要設(shè)置工程選項(xiàng)了. 我把這個(gè)工程命名為PyHelloWorld,并把它保存在”my projects/PyHelloWorld”文件夾中:




然后你就可以在PyHelloWorld目錄里看到有兩個(gè)文件被創(chuàng)建, 一個(gè)是擴(kuò)展名為.gladepglade的工程文件,另一個(gè)是擴(kuò)展名為.gladeglade界面XML文件.

現(xiàn)在我們需要?jiǎng)?chuàng)建一個(gè)python程序,它裝載這個(gè)glade文件然后顯示它. 正面我就在這個(gè)目錄里創(chuàng)建了一個(gè)名為PyHelloWorld.py的文件:




現(xiàn)在我們首先需要導(dǎo)入在這個(gè)工程里需要的所有庫(kù):

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

    接下來我們要做的就是創(chuàng)建主要的類. 我把它命名為HelloWorldGTK. 我們通過寫它的__init__函數(shù)來裝載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文件并使用它創(chuàng)建一個(gè)gtk.glade.XML對(duì)象. 正面是pyGTK2參考里對(duì)這個(gè)對(duì)象的描述:

 這個(gè)對(duì)象代表一個(gè)XML接口描述的實(shí)例. 當(dāng)一個(gè)此類對(duì)象被創(chuàng)建時(shí), 會(huì)讀XML文件,接口也會(huì)被創(chuàng)建出來. Gtk.glade.XML對(duì)象提供了一個(gè)可以通過在xml描述中賦給物件的名稱訪問這些物件的接口.
 
gtk.glade.XML對(duì)象也可以用來關(guān)聯(lián)在XML描述中已命名的信號(hào)和信號(hào)處理器. Glade庫(kù)(libglade)也提供了一個(gè)可以在程序的符號(hào)表中查找信號(hào)處理器名稱并自動(dòng)的把盡可能多的信號(hào)處理器關(guān)聯(lián)起來的接口.

因此當(dāng)創(chuàng)建完gtk.glade.XML對(duì)象后我們就需要?jiǎng)?chuàng)建并裝載主界面.

接下來就是實(shí)例化主窗口并把它的銷毀事件與get.main_quit()函數(shù)關(guān)聯(lián)起來.這樣就會(huì)在關(guān)閉主窗口時(shí)退出這個(gè)程序. 否則的話在主窗口關(guān)閉后程序還會(huì)繼續(xù)運(yùn)行(這顯然不是我們所希望的).

這些就是HelloWorldGTK類完成的工作. 接下來我們就需要?jiǎng)?chuàng)建一個(gè)這個(gè)類的實(shí)例然后開始GTK的主循環(huán):

if __name__ == "__main__":

               hwg = HellowWorldGTK()

               gtk.main()

   下面就是程序的結(jié)果, 現(xiàn)在來說還算是相當(dāng)簡(jiǎn)單. 如果你運(yùn)行這個(gè)文件,你會(huì)看到這個(gè)小的GTK窗口, 現(xiàn)在除了在你關(guān)閉窗口時(shí)正常退出外它什么也不能做:




接下來就要把這個(gè)按鈕的點(diǎn)擊事件和一個(gè)函數(shù)關(guān)聯(lián)起來. 我們需要再次使用Glade編輯界面來實(shí)現(xiàn)這個(gè)功能.

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



Glade的工作到此就結(jié)束了. 現(xiàn)在我們需要把這個(gè)事件和在代碼中一些東西關(guān)聯(lián)起來. 很幸運(yùn)的是這個(gè)可以很簡(jiǎn)單的用 gtk.glade.XML.signal_autoconnect函數(shù)來實(shí)現(xiàn).

#Create our dictionay and connect it

dic = { "on_btnHelloWorld_clicked" : self.btnHelloWorld_clicked,

               "on_MainWindow_destroy" : gtk.main_quit }

self.wTree.signal_autoconnect(dic)

簡(jiǎn)單的講, 這個(gè)詞典是由事件名和所要關(guān)聯(lián)的函數(shù)構(gòu)成的. 你可以看到我們把按鈕的點(diǎn)擊事件和一個(gè)函數(shù)關(guān)聯(lián)起來,然后再把”on_MainWindow_destory”事件和gtk.mainquit()函數(shù)關(guān)聯(lián)起來. 這個(gè)是我們?cè)瓉碓陉P(guān)閉掉窗口時(shí)程序代碼的一個(gè)替換, 如果你還想使用原來的詞典, 你應(yīng)當(dāng)在glade中為主窗口添加一個(gè)destory事件.

下一件事就是為類HeloowWolrdGTK創(chuàng)建btnHelloWorld_clicked函數(shù):

def btnHelloWorld_clicked(self, widget):

               print "Hello World!"

 真是太簡(jiǎn)單了! 現(xiàn)在當(dāng)你運(yùn)行它的時(shí)候, 點(diǎn)擊一下”Click Me!”按鈕你可以看到在命令行中輸出了”Hello World!”.

這就是本節(jié)課的內(nèi)容, 但是現(xiàn)在我真的喜歡上了使用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版本根據(jù)情況可以下載新版本. 下載完畢安裝.

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

看看我的程序在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 歲月流冰 閱讀(2842) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Linux

只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   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>
            亚欧美中日韩视频| 中文一区在线| 久久夜色撩人精品| 午夜免费久久久久| 国产视频亚洲精品| 久久这里只精品最新地址| 久久夜色精品国产欧美乱| 亚洲黄色成人| 日韩天堂av| 亚洲校园激情| 国产一区二区三区精品久久久| 久久精品一二三区| 免费日韩av片| 国产午夜亚洲精品理论片色戒| 久久精品国产免费| 一区二区三区产品免费精品久久75 | 亚洲清纯自拍| 亚洲作爱视频| 狠狠色狠狠色综合日日小说| 欧美成人精品1314www| 欧美日韩成人一区| 欧美一区视频在线| 男女激情久久| 午夜精品久久久久久| 久久另类ts人妖一区二区| 免费观看在线综合色| 在线视频日韩| 久久九九有精品国产23| 日韩一级精品| 欧美中文字幕在线播放| 99视频日韩| 久久久久综合| 午夜一区二区三区在线观看| 欧美福利电影在线观看| 欧美一区1区三区3区公司| 欧美成人精品高清在线播放| 久久精品人人| 国产精品www.| 久久久一区二区| 国产色爱av资源综合区| 亚洲精品日韩久久| 在线观看欧美黄色| 午夜日韩电影| 中国av一区| 欧美成人黄色小视频| 久久久久久久尹人综合网亚洲 | 午夜日韩视频| 欧美日韩精品二区| 欧美成人精品| 一区二区三区在线视频播放 | 欧美激情免费观看| 国内久久视频| 亚洲黄色免费| 欧美国产一区二区三区激情无套| 国产精品网站视频| 一区二区三区福利| 亚洲午夜精品福利| 欧美日本三级| 亚洲精品自在久久| 夜夜嗨av色综合久久久综合网| 另类激情亚洲| 欧美成人一二三| 亚洲国产欧美不卡在线观看| 欧美尤物一区| 久久免费的精品国产v∧| 国产日韩在线看片| 羞羞色国产精品| 欧美h视频在线| 国内精品久久久久久久影视麻豆 | 99re热这里只有精品免费视频| 欧美第十八页| 欧美大香线蕉线伊人久久国产精品| 国产亚洲欧美一区二区三区| 亚洲一卡久久| 香港久久久电影| 国产日韩欧美二区| 欧美亚洲午夜视频在线观看| 久久九九久久九九| 伊人天天综合| 欧美激情一区二区久久久| 日韩视频免费看| 亚洲欧美日韩综合| 国产一区二区激情| 六十路精品视频| 亚洲精一区二区三区| 亚洲欧美视频一区二区三区| 国产日韩欧美精品在线| 久久久久一区| 亚洲精品麻豆| 欧美午夜电影完整版| 亚洲欧美国产制服动漫| 久久综合色婷婷| 日韩视频―中文字幕| 国产精品毛片| 久久最新视频| 亚洲天堂av在线免费| 一区二区三区四区蜜桃| 亚洲女爱视频在线| 在线精品国产欧美| 欧美日韩在线观看一区二区三区 | 欧美va亚洲va日韩∨a综合色| 最新中文字幕一区二区三区| 国产精品超碰97尤物18| 午夜电影亚洲| 亚洲精品日本| 麻豆精品在线观看| 亚洲女性喷水在线观看一区| 极品少妇一区二区三区| 欧美日韩三级电影在线| 久久久久国产精品麻豆ai换脸| 91久久夜色精品国产九色| 亚洲永久精品大片| 最新国产の精品合集bt伙计| 夜夜嗨av一区二区三区| 欧美v国产在线一区二区三区| 亚洲性线免费观看视频成熟| 亚洲高清不卡一区| 国产模特精品视频久久久久| 欧美精品一区二区三区高清aⅴ| 欧美中在线观看| 亚洲字幕一区二区| 久久丁香综合五月国产三级网站| 亚洲黄色精品| 裸体一区二区| 久久国产福利| 欧美一区91| 亚洲欧美日韩精品久久久| 亚洲精品乱码久久久久久按摩观| 国产一区99| 国产精品一区二区久久国产| 欧美日韩精品系列| 欧美激情久久久久| 欧美成ee人免费视频| 久久成人免费日本黄色| 午夜精品久久久99热福利| 麻豆av福利av久久av| 99精品欧美| 日韩网站在线观看| 亚洲日本成人在线观看| 欧美国产综合视频| 黄色在线一区| 亚洲人成免费| 亚洲日本乱码在线观看| 模特精品在线| 一区二区国产精品| 亚洲精品视频二区| 欧美激情一区二区三区成人| 老牛国产精品一区的观看方式| 亚洲综合色在线| 亚洲一区二区欧美| 在线一区二区视频| 亚洲午夜av| 午夜精品视频| 久久成人18免费网站| 欧美在线视频日韩| 久久久久久午夜| 美日韩精品视频| 亚洲国产精品视频| 亚洲理论电影网| 亚洲一区二区综合| 久久精品视频在线免费观看| 久久精品日产第一区二区| 巨乳诱惑日韩免费av| 欧美高清视频一区| 欧美午夜视频一区二区| 国产日韩欧美一区二区| 1024精品一区二区三区| 亚洲一区二区精品视频| 亚洲一区二区三区三| 久久精品91久久久久久再现| 久久久噜噜噜久久人人看| 欧美激情麻豆| 亚洲特级毛片| 久久久久综合网| 欧美日韩亚洲综合在线| 国产一区二区中文| 亚洲精品综合精品自拍| 欧美一级二区| 欧美+亚洲+精品+三区| 日韩视频不卡| 久久精品人人做人人综合| 欧美女同视频| 激情综合久久| 亚洲免费视频观看| 美女999久久久精品视频| av成人福利| 模特精品在线| 国产午夜精品久久久久久久| 日韩视频―中文字幕| 久久精品99久久香蕉国产色戒 | 欧美华人在线视频| av成人手机在线| 狂野欧美一区| 国产精品私拍pans大尺度在线 | 在线亚洲一区| 免费观看成人鲁鲁鲁鲁鲁视频| 在线亚洲自拍| 欧美精品国产一区| 亚洲国产一二三| 久久亚洲国产成人|