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

任我行

一天一個腳印......
每日一句:
posts - 54, comments - 218, trackbacks - 1, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

Python完全新手教程(lesson11-lesson13)

Posted on 2005-10-11 16:41 任我行 閱讀(1035) 評論(0)  編輯 收藏 引用 所屬分類: Python
Lesson 11 走向模塊化的第二步

函數上面還能是什么呢?內嵌函數^_^,其實python是支持的。不過用起來會讓你吐血的,LGB名稱查找規則。。。(寒)。python是面向對象的,對于面向對象的支持挺好玩的。


class person:
    def __init__(self):
        self.name = 'taowen'
        self.id = 20022479
    def say_id(self):
        print "%s's id is %d" % (self.name, self.id)


me = person()
me.say_id()

比較復雜了吧。如果不熟悉面向對象的概念的,可能會覺得暈。我來解釋一下。所謂面向對象是把數據和操作數據的函數放到同一個類中去,然后用類來創建對象,操作的時候能夠比較方便(很不精確的說法,任何一個OO高手都可以把我罵得屁都不是)。


類是class關鍵來定義的。class person:就是說定義一個類,名字叫person。

對象
對象是用類來產生的。所以me就是對象,產生的辦法就是像調用函數一樣,person(),而且()中是能夠放參數的,什么時候要參數,看下面的“初始化函數“

初始化函數
類可以有自己的初始化函數,每次類被創建的時候(調用person()這樣的語句的時候),都會調用它。這個在C++中的名稱是構造函數。__init__是必須的名字,你不能用其他名字來當初始化函數。但是你可以沒有初始化函數。

類的數據
類的數據是所有類產生的對象共享的數據。這里沒有用到類的數據,要寫的話是這樣:


class person:
    school = 'bit'
    def __init__(self):
        self.name = 'taowen'
        self.id = 20022479
    def say_id(self):
        print "%s's id is %d" % (self.name, self.id)


me = person()
me.say_id()
print me.school

對象的數據
對象的數據是用
self.變量名 = 。。。
來生成的。這里self.name就是對象的數據。對象的數據和類的數據不同,因為對象之間的數據是互不共享的,而類的數據是被所有由類生成的對象共享的。

對象的函數(類的函數)
兩個沒有區別,是類的就是對象的。其實就是類的(我說的是底層實現,不過不用管,如果關心怎么實現的,等我寫Hacking OO吧,還沒影呢)。say_id就是對象的函數,你能夠調用它。每個對象的函數都需要一個self參數,表示[color]這個對象。

為什么使用面向對象編程
除去讓人覺得你比較專業外,當然由切實的好處。比較淺顯的是你能夠表達一定的層次關系,類與類之間能夠有包含和繼承的關系(當然你現在還不會。。。)。而且對象能夠把數據和操作數據的函數放在一起,能夠比較清晰。雖然有所謂的數據隱藏的概念,但是在python中其實就是一個不要直接調用對象中的數據的約定,而要用一個函數作為中轉。其實不懂面向對象很正常,其實有的時候就是要在用的中間感悟的。什么時候把用函數編程用牛了,用出個道道來了,說不定你已經感覺到了什么是面向對象編程。另外:所謂什么OO,都是一些認為規定,不用語法支持,只要心中有這個想法(什么想法?自己悟啊),就能夠寫出OO的代碼,不管你用的是什么語言,什么語法。

Lesson 12 python to exe

about py2exe

本文講述如何將一個python源代碼編譯成一個exe.....我會的只是最初步最基本的.....實際上那個py2exe似乎有著更強大的功能

1:下載安裝py2exe.....from http://twh@bitunion.org
2:假設你寫好了一個python程序....guess_number.py.......存在了c:\Python23\下面
3:再寫一個setup.py....也存在c:\Python23\下面......內容如下

# setup.py
from distutils.core import setup
import py2exe

setup(name="guess_number",
      scripts=["guess_number.py"],
)

其中name和scripts是需要你到時候具體修改的....

4:找到windows的dos模式(命令提示符).....或者自己做個快捷方式也可以....
C:\Python23>
C:\Python23>python setup.py py2exe
構造就開始了....
幾秒鐘以后....
在你的C:\Python23就會出現兩個文件夾build和dist,前面那個里面似乎是源程序(這個我不太清楚)....dist里面的就是編譯好的.exe了.....ok....

btw....等國兩天有了實際應用再來翻譯這些東西

Specifying additional files
Some applications need additional files at runtime, this maybe configuration files, fonts, bitmaps, whatever.

py2exe can copy these files into subdirectories of dist\myscript if they are specified in the setup script with the data_files option. data_files should contain a sequence of (target-dir, files) tuples, where files is a sequence of files to be copied.

Here's an example:
# setup.py
from distutils.core import setup
import glob
import py2exe

setup(name="myscript",
      scripts=["myscript.py"],
      data_files=[("bitmaps",
                   ["bm/large.gif", "bm/small.gif"]),
                  ("fonts",
                   glob.glob("fonts\\*.fnt"))],
)

This would create a subdirectory bitmaps in dist\myscript, containing the two bitmaps, and a subdirectory fonts, containing all the *.fnt files.

相關資料出處....
http://starship.python.net/crew/theller/py2exe/

Lesson 13 寫一個簡單的界面很容易

圖形界面是非常有吸引力的東西。但是制作出來似乎不是那么容易,這個觀點對于用C來笨拙寫windows的窗口程序來說,是比較正確的。微軟公司出品的windows是一個圖形界面的操作系統,這個和dos或者linux這些不一樣,他們一開始出來是針對字符界面的,然后再在上面加上一些庫來提供圖形的功能。windows則不同,它是包含在自己的最原始的功能之中,而這些圖形功能的提供是在user32.dll這樣的system目錄下的dll文件中以函數導出的形式提供的,但是要使用這些東西必須使用c語言的函數接口,而且編寫麻煩。有一個很大的wndproc中要填入所有的事件處理代碼,非常丑陋。而作為腳本語言,所應該有的簡潔性,python對這個進行了封裝。但是事情不是如你所想象。中間過程非常復雜,而且python用的也不是自己的庫,還是tcl的一個tk的庫再封裝了一次。雖然經過層層封裝,裹得非常嚴實,但是除了影響其在比較高性能的圖形場合下的應用之外,并沒有帶來太大的麻煩。你能夠用很少的代碼,來完成其他語言+庫要很大行代碼才能表達的圖形樣式,雖然非常簡陋,不過足夠使用。而且python除了自己原包裝帶的這個tkinter庫之外,還有其他的第三方的選擇,比較豐富,而且也有能夠勝任各種應用的選擇。甚至,還有opengl和directx的庫的封裝庫,能夠用來編寫2d和3d的游戲,這個非常的誘人哦。但是我不會,

圖形界面的奧秘其實并不深奧。我相信很多人學習windows編程都是從寫一個窗口開始的,而且都是從嘗試理解那個消息和事件驅動的模型入手的。大體的過程是這樣的,窗口就是用象素畫出來的。你可以把一個窗口想象成一個窗口,也可以把窗口看成一堆象素的集合。就像有人說看女色不過是皮肉色相一樣。而且窗口中的按鈕,編輯礦,各種圖標,無論是什么看起來像一個”物體“的東西,其實本質上都是有應用程序或者是庫或者是操作系統調用顯卡的驅動,通過顯卡的功能在屏幕上繪畫一些點出來。而所謂的”物體“有很多稱法,在windows中一般成為控件(control)。

而對于圖形界面的操控一般是通過鼠標和鍵盤來完成的。鼠標在屏幕上有一個自己的形象,那就是一個箭頭(當然你也可以調整這個圖形為其他好玩的東西,it is your freedom)。而鍵盤呢則一般表示為一個虛線的框,表示這個是鍵盤的”焦點“所在的地方。或者是編輯框中閃動的豎杠。這兩點中有一個共同點,就是都有一個位置來確定要操作的對象。你點下鼠標的時候,你操作的就是鼠標的箭頭尖端指向的那個空間,而鍵盤按下也是在其焦點所在的控件那兒放聲。發生的是什么呢?發生的過程從硬件層面到軟件層面之后,最終是被操作系統接收。操作系統能夠知道你是點擊的是鼠標還是鍵盤,在什么一個地方點下的,而且按下的是左鍵還是右鍵。操作系統還知道當前窗口各處擺放的位置。綜合各路的信息,操作系統就能夠知道把這個”事件“作為”消息“發送給哪個窗口來處理。從中應該能夠明白什么叫事件,而消息呢則是一個C中的結構體,其中有幾個field中間放了有關這個事件的信息,然后就像一封信一樣從操作系統投遞到了窗口所在的應用程序。然后應用程序有一個事先注冊的”窗口過程“,其實就是一個函數,用來接收這封“信”。其實就是接收到傳過來的參數。然后再進行一些判斷,作出一定的響應。這個就是所謂的事件驅動。在沒有冗長的代碼,和展示所有細節的情況下,如果你真的以前對這個過程一無所知,肯定會覺得非常茫然。這個一筆帶過的敘述其實只是讓你有一個感性的認識。其實在python中使用窗口根本不用管諸葛么多。基本上只是把自己要的窗口和控件,給一些位置的參數,一些文字的提示內容的參數就能把窗口擺好,顯示出來。然后再通過代碼告訴python,當“這個按鈕按下的時候執行這個函數”,然后就能讓窗口有響應。最后記得給一個退出窗口的辦法就一切OK了。其中能省的復雜度基本上都被庫給隱藏掉了。付出的代價是慢一些,但是我就不相信你能感覺出來,除非你用的電腦連vcd都看不流暢。所以大可放心的享受這種便利。

OK,下面來正式的看看怎么在python中創建一個窗口,然后顯示出來。


from Tkinter import *
root = Tk()
root.mainloop()

就3行就能夠把主窗口顯示出來了。root是一個變量名稱,其代表了這個主窗口。以后創建控件的時候指定控件創建在什么窗口之中,就要用這個root來表示了。而Tk()是一個Tkinter庫之中的函數(其實是類的構造函數,構造了一個對象)。而mainloop則是主窗口的成員函數,也就是表示讓這個root工作起來,開始接收鼠標的和鍵盤的操作。你現在就能夠通過鼠標縮放以及關閉這個窗口了。注意到窗口的標題是tk,我們可以進行一些修改

root= Tk(className='bitunion')

然后窗口的標題就變成了bitunion了。下面要作的是把這個窗口的內容填充一下,讓其有一些東西。先加入一個標簽,所謂標簽就是一行字。

from Tkinter import *
root = Tk(className='bitunion')
label = Label(root)
label['text'] = 'be on your own'
label.pack()
root.mainloop()

我們很驚訝的發現窗口變小了,但是其中多了一行字。變小了是因為窗口中已經放了東西了,python的Tkinter非常智能,能夠根據內容自動縮放,而不用和傳統的windows程序一樣,手工的指定絕對坐標了。對于label,它還是一個變量而已。不過這個變量代表了一個標簽,也就是那一行字。而這個label的創建是用Label,而Label的參數是root表明了這個控件是root主窗口的成員控件,或者說是子窗口。label['text']表示設置這個標簽的text屬性為'be on your own',也就是文字內容了。label.pack和root.mainloop一樣費解,但是內涵一樣深刻。你現在可以簡單理解為把label顯示出來的功能,因為你把pack去掉,那你就看不到東西了。其實pack是和控件的布局排版有關西的。

再添加一個按鈕就能夠有更加豐富的內容了,方法是很類似的。看著吧:

from Tkinter import *
root = Tk(className='bitunion')
label = Label(root)
label['text'] = 'be on your own'
label.pack()
button = Button(root)
button['text'] = 'change it'
button.pack()
root.mainloop()

只不過把button替換了label而Button替換了Label。注意一下Button和Label這些都是Tkinter這些庫提供的,而button和Button這樣大小寫之間的差別僅僅是巧合,你能夠隨便的給變量取名字,但是Button和Label這些則是需要記住的東西,寫代碼的時候要經常用到的名字。但是點擊按鈕你會比較失望,因為并沒有什么反應。不過也是當然的事情,你并沒有告訴計算機對于這樣一個按鈕的點擊操作需要作出一個什么樣的反應來反饋給用戶。而這個指定作出什么反應的工作只需要一個行,但是作出具體什么樣反應的描述則需要新建一個函數來進行處理。

from Tkinter import *
def on_click():
    label['text'] = 'no way out'
root = Tk(className='bitunion')
label = Label(root)
label['text'] = 'be on your own'
label.pack()
button = Button(root)
button['text'] = 'change it'
button['command'] = on_click
button.pack()
root.mainloop()

button['command'] = on_click表示對于button(按鈕)的點擊屬性用on_click這個函數來處理。而on_click函數也很簡潔,只是把label的文本重新設置一下。這個完成了一個事件消息的處理,如果用C來寫,需要比這個長更加不好懂的寫法。另外你是否會對on_click中出現label這個變量比較奇怪呢?明明在on_click前面沒有定義label這個變量啊。如果我在C中這么寫程序,編譯器一定會告訴我出錯的。而python是怎么知道label這個變量存在,然后沒有報錯的呢?其實python在你寫的時候根本就不用知道其是否存在,只是要在運行的時候找得到label就可以了。而運行的前后關系,是通過時間來關聯的而不是代碼上前后行的關系。這里由于label = Label(root)先于on_click執行,所以當on_click執行的時候,label就是一個已經定義的變量。如果沒有定義呢?那就報告出錯嘍。

最后一個例子:

from Tkinter import *
def on_click():
    label['text'] = text.get()

root = Tk(className='bitunion')
label = Label(root)
label['text'] = 'be on your own'
label.pack()
text = StringVar()
text.set('change to what?')
entry = Entry(root)
entry['textvariable'] = text
entry.pack()
button = Button(root)
button['text'] = 'change it'
button['command'] = on_click
button.pack()
root.mainloop()

這個就比較復雜了。里面有一個StringVar。這個代表一個字符串,但是跟一般字符串不一樣。一般的這樣'dfsdf'的字符串是不可變的,你只能把變量指定為不同的字符串,但是字符串本身的內容是不可改變的。而StringVar則是可變的字符串。所以了set和get來設置和取得其內容。主要是entry(單行輸入框)要求一個這樣的屬性來設置和接收其輸入框的內容。一開始可能不習慣,但是用多了之后會覺得很方便的,因為只要用這個變量text,就能一直得到當前輸入框的內容。當你能夠完整的把這個例子看懂的時候,你已經入門了。但是離自己寫一個有窗口的應用程序還有一定距離。主要是缺少更加豐富的控件和事件響應的處理能力,以及合理排版布局的能力。這個下次再說。

The End~~~~~~~~
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲免费观看高清完整版在线观看| 亚洲国产黄色| 欧美在线视屏| 欧美一区三区三区高中清蜜桃| 亚洲免费一级电影| 欧美一级网站| 老司机精品视频网站| 欧美风情在线观看| 欧美视频在线观看一区二区| 国产精品国产一区二区| 国产欧美日韩在线视频| 1769国产精品| 亚洲一二三级电影| 久久精品五月| 91久久久在线| 99国产精品久久| 欧美在线在线| 欧美三区美女| 亚洲成色最大综合在线| 一道本一区二区| 久久久亚洲精品一区二区三区| 亚洲精美视频| 欧美一区永久视频免费观看| 欧美高清在线观看| 国产一区二区三区免费在线观看| 亚洲每日更新| 久久香蕉国产线看观看av| 亚洲欧洲综合| 久久人91精品久久久久久不卡| 欧美日韩亚洲高清一区二区| 激情综合五月天| 香蕉久久精品日日躁夜夜躁| 亚洲激情偷拍| 久久精品91久久香蕉加勒比| 欧美日韩亚洲一区二区三区在线 | 亚洲一区二区精品在线| 久久久999| 国产精品欧美久久久久无广告| 亚洲国产精品一区制服丝袜| 欧美一区二区精美| 日韩一级二级三级| 欧美激情视频在线免费观看 欧美视频免费一 | 国产精品欧美久久| 日韩视频在线一区| 久久精品91久久久久久再现| 亚洲国产三级网| 亚洲制服欧美中文字幕中文字幕| 欧美成人在线免费视频| 国产一在线精品一区在线观看| 亚洲午夜精品久久久久久app| 亚洲国产高清一区二区三区| 久久国产日韩欧美| 国产亚洲欧美色| 久久成人免费视频| 亚洲自拍偷拍色片视频| 欧美视频手机在线| 中日韩美女免费视频网址在线观看| 欧美国产日韩视频| 欧美v亚洲v综合ⅴ国产v| 国产综合色产| 久久久五月婷婷| 久久午夜精品| 亚洲精品美女在线观看播放| 亚洲国产精品国自产拍av秋霞 | 香蕉久久夜色精品| 国产伦理一区| 久久久亚洲影院你懂的| 欧美在线免费视屏| 亚洲欧美日韩电影| 国产日韩欧美视频| 麻豆免费精品视频| 免费视频最近日韩| av成人天堂| 亚洲视频第一页| 国产一区日韩欧美| 亚洲国产片色| 国产精品久久看| 久久久久久久久蜜桃| 麻豆久久精品| 亚洲欧美日韩电影| 久久久久国产精品人| 亚洲国产欧美国产综合一区| 亚洲精品在线免费| 国产午夜亚洲精品不卡| 免费欧美高清视频| 亚洲综合日韩| 亚洲高清毛片| 夜夜嗨av一区二区三区四季av | 久久精品亚洲热| 亚洲伦理精品| 亚洲自拍偷拍网址| 亚洲人成网站在线播| 中国亚洲黄色| 在线日韩中文| 亚洲一区综合| 亚洲精品资源| 欧美影院一区| 亚洲一区二区少妇| 免费在线看成人av| 午夜精品久久久久久| 久久综合狠狠综合久久激情| 亚洲一品av免费观看| 麻豆国产va免费精品高清在线| 久久成人免费电影| 欧美大胆a视频| 一级日韩一区在线观看| 亚洲综合欧美日韩| 一区二区高清在线观看| 久久精品国产在热久久| 亚洲欧美国产三级| 欧美国产视频一区二区| 久久精品国产亚洲a| 欧美人与性禽动交情品| **网站欧美大片在线观看| 夜夜嗨av一区二区三区四区| 在线观看亚洲视频| 亚洲欧美激情视频| 一区二区三区日韩欧美精品| 久久综合久久美利坚合众国| 国产精品jizz在线观看美国| 欧美国产精品久久| 国产一二三精品| 亚洲免费小视频| 亚洲欧美日韩综合一区| 欧美视频网址| 9i看片成人免费高清| 亚洲精品一区二区三区福利| 欧美一区二区观看视频| 亚洲欧美中文另类| 欧美性色综合| 亚洲午夜久久久久久尤物 | 久久免费午夜影院| 久久精品国产亚洲一区二区三区 | 欧美va亚洲va国产综合| 国产亚洲欧美日韩日本| 午夜久久美女| 欧美中文在线观看| 国产欧美日韩一区二区三区在线观看 | 麻豆freexxxx性91精品| 海角社区69精品视频| 久久精品视频免费| 欧美高清视频一区二区| 亚洲人成在线观看一区二区| 欧美v日韩v国产v| 亚洲日本成人女熟在线观看| 亚洲伦伦在线| 欧美日韩网址| 午夜久久美女| 欧美激情第一页xxx| 亚洲乱码国产乱码精品精天堂| 欧美激情一区二区三区四区| 99香蕉国产精品偷在线观看| 午夜精品久久久久久久99水蜜桃| 国产欧美va欧美va香蕉在| 久久国产一区二区三区| 蜜桃av一区| 亚洲国产日韩一级| 欧美乱大交xxxxx| 香蕉久久一区二区不卡无毒影院 | 久久久久久久网站| 影音先锋一区| 欧美片网站免费| 亚洲影院免费| 欧美成人免费视频| 99亚洲一区二区| 国产日韩欧美电影在线观看| 久久av免费一区| 亚洲人成绝费网站色www| 亚洲性视频网站| 国内精品嫩模av私拍在线观看| 久久免费视频一区| 一区二区三区成人精品| 久久亚洲精品欧美| 亚洲一级二级| 亚洲激情黄色| 国产精品腿扒开做爽爽爽挤奶网站| 久久久精品国产一区二区三区 | 久久精品道一区二区三区| 最近中文字幕日韩精品| 香港久久久电影| 亚洲卡通欧美制服中文| 国产一本一道久久香蕉| 欧美日韩伦理在线免费| 久久一区免费| 欧美一区二区久久久| 99精品福利视频| 亚洲第一主播视频| 久久久国产精品亚洲一区| 一区二区三区不卡视频在线观看| 狠狠色狠狠色综合日日tαg| 欧美亚日韩国产aⅴ精品中极品| 久久综合五月天婷婷伊人| 香蕉久久国产| 亚洲欧美日韩高清| 亚洲资源在线观看| 国产精品99久久不卡二区| 91久久久亚洲精品| 亚洲第一在线综合网站| 浪潮色综合久久天堂| 久久精品国产免费看久久精品|