不管哪個(gè)編程語言蹲缠,實(shí)現(xiàn)一個(gè)東西的方式都有很多種棺克,所以大家都會(huì)選擇最好的來使用。
剛看到一篇帖子上面寫著:
剛接觸 Python 一個(gè)月。最近在寫一個(gè)桌面應(yīng)用斤讥,GUI 用的 Tkinter纱皆。
寫的過程中有幾個(gè)地方不是很明白,請教一位 Python 比較牛逼的朋友。
他看到后就說派草,你怎么用 Tkinder 安蟛?近迁!Tkinter 坑多的數(shù)不清艺普,為什么不用 PyQt 或者 wxPython?然后建議我換鉴竭,之后巴拉巴拉說了一堆 Tkinter 的缺陷歧譬。我很不解就百度了一下,發(fā)現(xiàn)網(wǎng)上真的很多人說 Tkinter 不好搏存。
我認(rèn)為 Tkinter 作為 Python 的標(biāo)準(zhǔn) GUI 庫瑰步,應(yīng)該支持是最好的啊祭埂?為什么那么多人吐槽面氓,是真的不好嗎?
那么具體的不好體現(xiàn)在什么地方呢?
以前我用Tkinter寫完一個(gè)GUI程序泰演,代碼估計(jì)有一千行吧呻拌,這也是我第一次使用Tkinter,使用下來的感受是——累睦焕!主要體現(xiàn)在如下幾點(diǎn):
1.Tkinter包含常見GUI模塊(或者類藐握,或者框架啥的,比如Java里面的Swing)的主要功能垃喊,但是相當(dāng)一部分是沒有的猾普。這樣帶來的好處是Tkinter給人一種非常簡單的感覺,但是也弱化了其功能本谜。舉個(gè)栗子:Tkinter中輸入框較Entry初家,本想實(shí)現(xiàn)輸入框中內(nèi)容被改變時(shí),該內(nèi)容文字顏色變?yōu)榧t色的功能乌助,但是找了半天溜在,沒有,或者是藏得很深他托,讓人誤以為沒有 掖肋。
2.Tkinter的布局是通過代碼完成的,要是你的界面上有個(gè)幾十個(gè)控件赏参,寫起來也是很酸爽志笼。并且布局的參數(shù)沿盅,例如padx=3,這個(gè)3在Windows和Linux平臺(tái)上是不一樣的籽腕,換言之你在Windows上寫好的GUI放在Linux上可能就會(huì)亂成一鍋粥嗡呼。
3.也算不上缺點(diǎn)也不算是優(yōu)點(diǎn)南窗。Tkinter模塊本身是沒有下拉列表這個(gè)東西的,但是Tkinter包含了ttk郎楼,tik之類的主體万伤,這個(gè)里面有一個(gè)ttk.Combobox。但是這樣真的好呢呜袁?找個(gè)控件要翻遍整個(gè)API敌买,就不能集中一下?就不能再Tkinter模塊本身中包含一下阶界?
5.既然說到了ttk虹钮,那就講講這貨。Tkinter模塊膘融,及Tkinter.ttk模塊中芙粱,相同名字的控件使用方法,屬性列表氧映,控件方法春畔,事件是不一樣的,有相同岛都,但大多是不同的律姨。
6.多人都說Tkinter有主題,也可以編寫漂亮的界面臼疫,我就想知道用Tkinter的人有多少還會(huì)專門寫編寫主題代碼择份。反正我用Tkinter就是圖個(gè)方便,Python自帶的優(yōu)點(diǎn)還是有的烫堤。
7.Tkinter確實(shí)簡單易用塔逃,但是效率很低。雖說寫個(gè)帶有兩Label料仗,兩Entry湾盗,還有兩button的登錄界面確實(shí)用Tkinter幾行代碼就解決了,這一波算你Tkinter贏立轧。但是你確定你只是要寫這樣GUI格粪?最初我的也是這樣想的躏吊,但是程序越寫越復(fù)雜,功能越寫越完善帐萎,這時(shí)候就該懷疑人生了比伏。從文檔中找控件、方法疆导、事件赁项、屬性的時(shí)候就知道這個(gè)過程有多效率低下。
總結(jié)一番澈段,Tkinter想說愛你不容易(這話出自哪里來著悠菜?),想要長期在Python上做GUI開發(fā)的話败富,還是換方案吧悔醋,里面那么多坑,總有一款適合你兽叮。
注:我這有個(gè)學(xué)習(xí)Python基地芬骄,里面有很多學(xué)習(xí)資料,感興趣的+Q群:895817687