• <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>

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

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

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

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

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

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

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

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

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

            apt-get install python-gtk2 python-glade2

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



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



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

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

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

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

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

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




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

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




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

            #!/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)建一個gtk.glade.XML對象. 正面是pyGTK2參考里對這個對象的描述:

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

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

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

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

            if __name__ == "__main__":

                           hwg = HellowWorldGTK()

                           gtk.main()

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




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

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



            Glade的工作到此就結(jié)束了. 現(xiàn)在我們需要把這個事件和在代碼中一些東西關(guān)聯(lián)起來. 很幸運的是這個可以很簡單的用 gtk.glade.XML.signal_autoconnect函數(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)

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

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

            def btnHelloWorld_clicked(self, widget):

                           print "Hello World!"

             真是太簡單了! 現(xiàn)在當(dāng)你運行它的時候, 點擊一下”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)該可以運行了,趕快試試我們前面例子里的程序吧:)

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

            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            国産精品久久久久久久| 国内精品久久久久| 色偷偷偷久久伊人大杳蕉| 久久永久免费人妻精品下载| 久久99久久99小草精品免视看| 日本精品久久久久中文字幕| 久久影院亚洲一区| 色综合久久久久无码专区| 91亚洲国产成人久久精品| 亚洲国产一成久久精品国产成人综合| 亚洲欧洲日产国码无码久久99 | 三上悠亚久久精品| 久久精品国产99国产精品澳门| 久久一区二区三区免费| 久久久久国产精品熟女影院| 久久午夜综合久久| 成人国内精品久久久久一区| 亚洲欧洲久久久精品| 91精品国产高清久久久久久io| 日本精品久久久久久久久免费| 久久天堂AV综合合色蜜桃网| 久久嫩草影院免费看夜色| 91精品国产9l久久久久| 久久精品国产2020| 久久久国产精华液| 久久99精品国产| 亚洲av伊人久久综合密臀性色| 久久无码一区二区三区少妇| 日本福利片国产午夜久久| 午夜精品久久久久久99热| 性欧美大战久久久久久久 | 人妻精品久久久久中文字幕一冢本| 99久久精品免费观看国产| 久久久久亚洲Av无码专| 亚洲综合伊人久久大杳蕉| 久久天天躁狠狠躁夜夜不卡 | 狠狠色丁香久久婷婷综合五月| 久久久久久久久久久| 午夜精品久久久久久影视777| 久久精品国产欧美日韩| 91精品国产91久久久久久青草|