Python視窗支援種類
不就寫個視窗嗎, 還有什麼種類要需要支援的?
視窗, 是一種極其複雜的東西. 以C++為例, 你可以憑一已之力, 在不include任何 “視窗library” 之下, 寫出一個視窗程式, 但想也知道, 只會是個有四條線的矩型, 頂多右上方加個 “_”, “x”的圖案. 如果要求你再寫個當滑鼠移到線的上面, 可以變個icon, 然後可以拖曳縮小放大矩型, 你老命早就歸西了.
光上面幾個要求, 少則上千行程式碼, 更何況還有選單, 元件, 事件…..雜七雜八, 成千上萬種要求等著去實現.
要發展一套世人能接受的視窗library, 動則數百人花上三四年的光景, 才能有一些許的成果. End user總是認為, 點一下滑鼠就應該怎樣, 然後還會很專業的指指點點, 悲哀啊
視窗Library
Java有自已的視窗SDK, 比較流行的如Swing. C# 也有自已的視窗SDK, 稱為.netFramewrok.
Python沒有自已的視窗Library or SDK. 所以必需借助市面上流行的library, 最常見的如下
tkinter(唸法 : T-K-inter), wxPython(wxWidget), PyQt(QT for Python), GTK
騙肖ㄟ, 什麼tk, wxWidget, Qt的, 連聽都沒聽過, 對吧!! 其實這些視窗函數庫, 早就在Linux之下行之多年, 且如雷貫耳的. 只是台灣很少人摸過Linux.
上述最普遍且功能最強的, 就屬Qt了. 但在Linux上, 如ubuntu的視窗桌面, 則以GTK為主
ps.
1. Library : 以函數為單位的套件. 通常是由c/c++寫成
2. SDK : 以class包裝出來的套件, 全名為 Software Development kit
3. .netFramework : Microsoft 的SDK, 不過裏面也包含很多Library
第一支Python視窗程式
本篇先以tkinter為主, 因為這是Python內建支援的library. 待日後有空, 再補入wxPython的說明. 先來個興奮的事
from tkinter import * import tkinter.messagebox as messagebox class Application(Frame): def __init__(self, master=None): Frame.__init__(self, master) self.pack() self.createWidgets() def createWidgets(self): self.nameInput = Entry(self) self.nameInput.pack() self.alertButton = Button(self, text='Hello', command=self.hello) self.alertButton.pack() def hello(self): name = self.nameInput.get() or 'world' messagebox.showinfo('Message', 'Hello, %s' % name) app = Application() app.master.title('Hello World')#視窗title app.mainloop()#進入視窗流程
那一種比較好
tkinter : 簡單易學, 畫面醜陋無比, 功能少
wxPython : 畫面精美, 功能強, 由wxWidget支援. 完全不用錢, 也沒有任何限制. 但畢竟他們沒賺錢, 什麼時候會死也不知道.不過他們也撐了好幾十年就是了.
PyQt : 由Qt支援, 畫面更美, 功能更強, 但因為需遵守GPL或LGPL規定. GPL的規範是商業行為就要付錢的, 若不付錢, 就需Open Source. LGPL是規範若只有引用, 就算商業行為也不用付錢, 也不用Open Source, 但若有修改原碼, 就必需Open Source.
每一種視窗設計都有其好處跟壞處. 但我們又沒有那麼多美國時間跟全能的腦袋去精通每一種.所以本人選擇wxPython. 其原因除了精美, 功能強之外, 本人還有開發ubuntu wxWidget的經驗
所以底下的所有說明, 都以wxPython為主