App下載

為什么我不推薦你使用tkinter?pyqt——為python GUI開發(fā)注入生產(chǎn)力

w3cschool小編 2023-01-31 17:44:02 瀏覽數(shù) (8897)
反饋

想必對于各位學(xué)習(xí)python的小伙伴都有一顆做出好看的圖形用戶界面的心,因?yàn)槌绦蜃罱K是為人服務(wù)的,只有更好的服務(wù)更多人,才是一個好程序。而圖形用戶界面就是用來提升用戶體驗(yàn)的。但是對于初學(xué)者而言,可能只聽過tkinter,pyqt等圖形用戶界面開發(fā)需要的庫,并不了解哪個好用,為什么好用,我要選擇哪一個。在早些時候小編曾經(jīng)參與了tkinter手冊的整理,當(dāng)時也對tkinter表示這個東西很好用。但自從接觸到pyqt后,我變心了!

回顧——tkinter的優(yōu)與缺

tkinter的優(yōu)點(diǎn)主要是它簡單無依賴,作為python標(biāo)準(zhǔn)庫,它不需要依賴其他庫就能直接使用,但是它也有很顯著的缺點(diǎn):功能少,效果單一,不適合工程化的開發(fā),開發(fā)的體驗(yàn)也不是很好。

展望——更好用的pyqt

對于桌面開發(fā),天下武功那么多,PyQt 既是最正統(tǒng)的門派,同時又是一系列綜合技術(shù)的組合,它進(jìn)可以同 C++ Qt 無縫整合,解決性能相關(guān)的東西;退又有基于chromium 的 QtWebEngine ,能在適合跑頁面的部分用 html/js 來寫頁面,并和 python 雙向調(diào)用,實(shí)現(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看成一系列界面解決方案的 “超集”,所以學(xué)習(xí) PyQt 你學(xué)會的是綜合格斗術(shù),是名門正派的內(nèi)功心法,而不是某方向單一的方案,比如 “螳螂拳”。                

PyQt 就是一扇門,它通往的是最專業(yè)的桌面解決方案的世界。

原罪——不好用

tkinter的原罪就是其不好用。怎么說呢,作為一個標(biāo)準(zhǔn)庫,python有提供tkinter的文檔,但這份文檔描述得并不清楚,一旦出現(xiàn)問題,你就只能去四處搜索,然后各種找不到,到處找論壇找大佬求助??赡苣苡胻kinter開發(fā)出好用的程序的人,只有這個框架的作者們吧?

另外tkinter還有一些問題,比如控件不齊全的問題,對前端頁面有熟悉的小伙伴應(yīng)該知道有個東西叫下拉選單,也就是select

簡單的下拉列表,該用例來自html教程

這個功能算是比較常見的一個功能,結(jié)果tkinter并沒有內(nèi)置,只有在他的拓展庫ttk中才有,也就是說在學(xué)完tkinter后還需要學(xué)他的拓展庫,了解透徹后才能開發(fā)出一個比較好的應(yīng)用。

還有飽為詬病的一點(diǎn)是其奇怪的參數(shù)傳遞機(jī)制,而且不是很清晰。

這是pyqt的例子

widget.setGeometry(100, 100, 640, 480)

實(shí)現(xiàn)同樣的功能,tkinter的代碼是這樣的:

root.geometry("%dx%d+%d+%d"%(width, height, x, y))

從代碼可讀性而言,tkinter完全比不上pyqt。

再看看這個例子:

禁用輸入框輸入和按鈕無法點(diǎn)擊,這是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開啟(恢復(fù)),沒想到吧,在這里要恢復(fù)需要使用的是normal!

學(xué)習(xí)——pyqt學(xué)習(xí)起來真的快

小編有一點(diǎn)點(diǎn)python基礎(chǔ),只用了三十分鐘,就學(xué)會了簡單地用pyqt開發(fā)一個密碼生成器,之所以這么快,是因?yàn)閜yqt雖然體系健全,看似復(fù)雜,但與html一樣,實(shí)際上常用的一些插件也就那些,快速掌握這些內(nèi)容就能開發(fā)一個簡單的gui應(yīng)用程序。

但這不是說pyqt只能開發(fā)簡單程序,在復(fù)雜程序上他也能輕松勝任,原因在于他可以把圖形頁面與邏輯進(jìn)行分離開發(fā),這點(diǎn)也是tkinter做不到的。

 pyqt有一個qt設(shè)計(jì)師,可以直接用來設(shè)計(jì)界面,而且不需要你會編程語言,也就是說美工可以輕松勝任這個工作。

學(xué)習(xí)pyqt本站也有提供相應(yīng)的課程

Python GUI編程 PyQt6入門到實(shí)戰(zhàn)

Python GUI編程 PyQt6入門到實(shí)戰(zhàn)

小編就是學(xué)習(xí)這個課程掌握的pyqt6!

小結(jié)——人生苦短,我用qt

在讀完這篇文章后,如果你還愿意使用tkinter,那么你肯定是真愛,而我?人生苦短,我選擇pyqt!

0 人點(diǎn)贊