支援類型

      在〈支援類型〉中尚無留言

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()#進入視窗流程

python_windows_1

那一種比較好

tkinter : 簡單易學, 畫面醜陋無比, 功能少
wxPython : 畫面精美, 功能強, 由wxWidget支援. 完全不用錢, 也沒有任何限制. 但畢竟他們沒賺錢,  什麼時候會死也不知道.不過他們也撐了好幾十年就是了.
PyQt : 由Qt支援, 畫面更美,  功能更強, 但因為需遵守GPL或LGPL規定. GPL的規範是商業行為就要付錢的,  若不付錢, 就需Open Source. LGPL是規範若只有引用, 就算商業行為也不用付錢, 也不用Open Source, 但若有修改原碼, 就必需Open Source.

每一種視窗設計都有其好處跟壞處. 但我們又沒有那麼多美國時間跟全能的腦袋去精通每一種.所以本人選擇wxPython. 其原因除了精美, 功能強之外, 本人還有開發ubuntu wxWidget的經驗

所以底下的所有說明, 都以wxPython為主

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *