想必對于各位學習python的小伙伴都有一顆做出好看的圖形用戶界面的心,因為程序最終是為人服務的,只有更好的服務更多人,才是一個好程序。而圖形用戶界面就是用來提升用戶體驗的。但是對于初學者而言,可能只聽過tkinter,pyqt等圖形用戶界面開發(fā)需要的庫,并不了解哪個好用,為什么好用,我要選擇哪一個。在早些時候小編曾經(jīng)參與了tkinter手冊的整理,當時也對tkinter表示這個東西很好用。但自從接觸到pyqt后,我變心了!
回顧——tkinter的優(yōu)與缺
tkinter的優(yōu)點主要是它簡單無依賴,作為python標準庫,它不需要依賴其他庫就能直接使用,但是它也有很顯著的缺點:功能少,效果單一,不適合工程化的開發(fā),開發(fā)的體驗也不是很好。
展望——更好用的pyqt
對于桌面開發(fā),天下武功那么多,PyQt 既是最正統(tǒng)的門派,同時又是一系列綜合技術(shù)的組合,它進可以同 C++ Qt 無縫整合,解決性能相關(guān)的東西;退又有基于chromium 的 QtWebEngine ,能在適合跑頁面的部分用 html/js 來寫頁面,并和 python 雙向調(diào)用,實現(xiàn)類似 cef/Electron 的效果,但是 Electron這類單一解決方案就只能用 web 技術(shù),想反過來同 native 界面混合開發(fā),基本就傻了,碰到性能問題又不能像 PyQt 那樣可以無縫切換 C++ Qt,所以龐然大物 Electron 只適合呆在自己的舒適區(qū)。
往左,QtWidgets 可以和傳統(tǒng) C# 的 WinForm pk,往右,Qt-Quick 可以同 WPF/XAML 看齊,因此你可以把 PyQt/Qt看成一系列界面解決方案的 “超集”,所以學習 PyQt 你學會的是綜合格斗術(shù),是名門正派的內(nèi)功心法,而不是某方向單一的方案,比如 “螳螂拳”。
PyQt 就是一扇門,它通往的是最專業(yè)的桌面解決方案的世界。
原罪——不好用
tkinter的原罪就是其不好用。怎么說呢,作為一個標準庫,python有提供tkinter的文檔,但這份文檔描述得并不清楚,一旦出現(xiàn)問題,你就只能去四處搜索,然后各種找不到,到處找論壇找大佬求助。可能能用tkinter開發(fā)出好用的程序的人,只有這個框架的作者們吧?
另外tkinter還有一些問題,比如控件不齊全的問題,對前端頁面有熟悉的小伙伴應該知道有個東西叫下拉選單,也就是select
這個功能算是比較常見的一個功能,結(jié)果tkinter并沒有內(nèi)置,只有在他的拓展庫ttk中才有,也就是說在學完tkinter后還需要學他的拓展庫,了解透徹后才能開發(fā)出一個比較好的應用。
還有飽為詬病的一點是其奇怪的參數(shù)傳遞機制,而且不是很清晰。
這是pyqt的例子
widget.setGeometry(100, 100, 640, 480)
實現(xiàn)同樣的功能,tkinter的代碼是這樣的:
root.geometry("%dx%d+%d+%d"%(width, height, x, y))
從代碼可讀性而言,tkinter完全比不上pyqt。
再看看這個例子:
禁用輸入框輸入和按鈕無法點擊,這是pyqt的例子
widget.setDisabled(True)
widget.setDisabled(False)
而這是tkinter的樣子:
widget.config(state = 'disabled')
widget.config(state = 'normal')
true和false是關(guān)鍵字,在IDE中由于代碼提示,在寫代碼的時候這些參數(shù)能做什么不能做什么都說的清清楚楚。而tkinter使用字符串傳參的形式,反而不容易了解。
正常人的思路是disabled禁止,enable開啟(恢復),沒想到吧,在這里要恢復需要使用的是normal!
學習——pyqt學習起來真的快
小編有一點點python基礎,只用了三十分鐘,就學會了簡單地用pyqt開發(fā)一個密碼生成器,之所以這么快,是因為pyqt雖然體系健全,看似復雜,但與html一樣,實際上常用的一些插件也就那些,快速掌握這些內(nèi)容就能開發(fā)一個簡單的gui應用程序。
但這不是說pyqt只能開發(fā)簡單程序,在復雜程序上他也能輕松勝任,原因在于他可以把圖形頁面與邏輯進行分離開發(fā),這點也是tkinter做不到的。
pyqt有一個qt設計師,可以直接用來設計界面,而且不需要你會編程語言,也就是說美工可以輕松勝任這個工作。
學習pyqt本站也有提供相應的課程
小編就是學習這個課程掌握的pyqt6!
小結(jié)——人生苦短,我用qt
在讀完這篇文章后,如果你還愿意使用tkinter,那么你肯定是真愛,而我?人生苦短,我選擇pyqt!