有關(guān)Python系統(tǒng)文件進(jìn)行介紹指導(dǎo)
對(duì)***次接觸到Python系統(tǒng)文件的用戶和學(xué)者來說,了解Python系統(tǒng)文件的概念是非常重要的,那么就先說一下什么是Python系統(tǒng)文件,所謂Python系統(tǒng)文件:當(dāng)你用Python語言編寫程序的時(shí)候,你無需考慮諸如如何管理你的程序使用的內(nèi)存一類的底層細(xì)節(jié)。
我們很驚訝的發(fā)現(xiàn)窗口變小了,但是其中多了一行字。變小了是因?yàn)榇翱谥幸呀?jīng)放了東西了,python的Tkinter非常智能,能夠根據(jù)內(nèi)容自動(dòng)縮放。而不用和傳統(tǒng)的windows程序一樣,手工的指定絕對(duì)坐標(biāo)了。對(duì)于label,它還是一個(gè)變量而已。不過這個(gè)變量代表了一個(gè)標(biāo)簽,也就是那一行字。
而這個(gè)label的創(chuàng)建是用Label,而Label的參數(shù)是root表明了這個(gè)控件是root主窗口的成員控件,或者說是子窗口。label['text']表示設(shè)置這個(gè)標(biāo)簽的text屬性為'be on your own',也就是文字內(nèi)容了。#t#
label.pack和root.mainloop一樣費(fèi)解,但是內(nèi)涵一樣深刻。你現(xiàn)在可以簡(jiǎn)單理解為把label顯示出來的功能,因?yàn)槟惆裵ack去掉,那你就看不到東西了。其實(shí)pack是和控件的布局排版有關(guān)西的。
只是把label的文本重新設(shè)置一下。這個(gè)完成了一個(gè)事件消息的處理,如果用C來寫,需要比這個(gè)長(zhǎng)更加不好懂的寫法。另外你是否會(huì)對(duì)on_click中出現(xiàn)label這個(gè)變量比較奇怪呢?明明在on_click前面沒有定義label這個(gè)變量啊。如果我在C中這么寫程序,編譯器一定會(huì)告訴我出錯(cuò)的。而Python系統(tǒng)文件是怎么知道label這個(gè)變量存在,然后沒有報(bào)錯(cuò)的呢?
其實(shí)Python系統(tǒng)文件在你寫的時(shí)候根本就不用知道其是否存在,只是要在運(yùn)行的時(shí)候找得到label就可以了。而運(yùn)行的前后關(guān)系,是通過時(shí)間來關(guān)聯(lián)的而不是代碼上前后行的關(guān)系。這里由于label = Label(root)先于on_click執(zhí)行,所以當(dāng)on_click執(zhí)行的時(shí)候,label就是一個(gè)已經(jīng)定義的變量。如果沒有定義呢?那就報(bào)告出錯(cuò)嘍。
- 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()
這個(gè)就比較復(fù)雜了。里面有一個(gè)StringVar。這個(gè)代表一個(gè)字符串,但是跟一般字符串不一樣。一般的這樣'dfsdf'的字符串是不可變的,你只能把變量指定為不同的字符串,但是字符串本身的內(nèi)容是不可改變的。而StringVar則是可變的字符串。
所以用Python系統(tǒng)文件來設(shè)置和取得其內(nèi)容。主要是entry(單行輸入框)要求一個(gè)這樣的屬性來設(shè)置和接收其輸入框的內(nèi)容。一開始可能不習(xí)慣,但是用多了之后會(huì)覺得很方便的,因?yàn)橹灰眠@個(gè)變量text,就能一直得到當(dāng)前輸入框的內(nèi)容。
當(dāng)你能夠完整的把這個(gè)例子看懂的時(shí)候,你已經(jīng)入門了。但是離自己寫一個(gè)有窗口的應(yīng)用程序還有一定距離。主要是缺少更加豐富的控件和事件響應(yīng)的處理能力,以及合理排版布局的能力。這個(gè)下次再說。