tft每日頭條

 > 生活

 > python如何打開tkinter

python如何打開tkinter

生活 更新时间:2024-07-07 10:18:06

自學python’編程,做點筆記,分享體會。

一、學編程為什麼要搞GUI?

不搞GUI,編程就是花拳繡腿。不從搞項目的角度去考慮編程思路永遠都是耍流氓。你是報班學習,你會發現你花了大把銀子,學了很多基礎知識,甚至是提高班,掌握了很多庫,但真正想搞項目的時候仍然一籌莫展。想過沒有,你寫個爬蟲,難道會讓用戶在控制台下運行?沒點交互,你好意思跟用戶交付?當然大廠除外,那都是流水線作業,你隻需管你那顆螺絲釘。

二、Python搞GUI為什麼要選Tkinter?

常用的庫無非就是tkinter, wxPython, pyQt,很多人都覺得tkinter醜陋,好多大牛都推崇pyQt。個人覺得,pyQt頁面布局一時爽,當你修改界面,代碼又要重新轉換,涉及複雜的數據交互絕對讓人崩潰。反而,tkinter 是 Python 的标準 GUI 接口,程序員控制起來随時可以做到心中有數,一樣也可以做出外觀上乘的界面,比如ttkbootstrap庫。

python如何打開tkinter(PythontkinterGUI的幾種寫法及比較)1

三、幾種寫法1.邏輯寫法

就是按程序執行的先後順序從前到後寫代碼。

from tkinter import * root = Tk() root.title('萬師兄') root.geometry('200x100 100 100') Button(root, text='确定').pack() Button(root, text='取消').pack() root.mainloop()

python如何打開tkinter(PythontkinterGUI的幾種寫法及比較)2

就三步就可以創建一個GUI了,1創建Tk對象,2添加控件,3給個mainloop循環。這種寫法的好處就是前後邏輯比較好理解,比較适合初學者掌握庫的使用邏輯,不利之處就是不好複用。

2.類的寫法

Python裡,一切都是對象,因此,可以用類将窗口封裝起來,便于擴展、重構等。

from tkinter import * class Myapp(Frame): def __init__(self, master): super().__init__() self.master = master self.pack() self.createWidget() def createWidget(self): Button(self, text='确定').pack() Button(self, text='取消').pack() if __name__ == '__main__': root = Tk() root.title('萬師兄') root.geometry('200x100 100 100') app = Myapp(master=root) app.mainloop()

這是一個大神的寫法,其中還是有幾個問題。1是主窗口if主程序中創建,需要進行必要的主窗口,還需要傳遞一個master參數,表明Myapp類的依附對象,比較麻煩,容易犯錯。另外,如果程序涉及多個窗口時,這種寫法就不好管理了,除了創建新的窗口類之外,還得在if主程序中創建新的窗口,略顯重複臃腫。需要注意,Myapp類繼承的是Frame類,初始化裡面必須要自己pack()一下。很多很牛的python課程裡都可能隻講單窗口的案例,

3.完全封裝

将一個窗口所有内容全部封裝到一個類中。

from tkinter import * class Myapp(Tk): def __init__(self): super().__init__() self.title('萬師兄') self.geometry('200x100 100 100') self.createWidget() def createWidget(self): Button(self, text='确定').pack() Button(self, text='取消').pack() if __name__ == '__main__': app = Myapp() app.mainloop()

這樣,無論你有多少窗口,結構都十分清晰,主程序簡簡單單,頓時神清氣爽。

這些問題都是小問題,可能很多根本不會引人注意,但你思考得越深,境界越高。


我自學python,緻力于掌握和研究爬蟲、機器視覺和人工智能三個方向,歡迎指正交流。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved