python gui入門的例子_Python GUI編程之Tkinter入門之道

相信剛學習使用Python進行GUI編程的時候,肯定都會聽過Tkinter,畢竟是standard Python interface to the Tk GUI toolkit.用來寫一些小程序還是很方便的。但如果是剛接觸GUI編程的話肯定是被官方文檔搞的有些懵,畢竟還沒弄清楚套路。之前使用過Tkinter,但是有段時間沒碰了,最近又要寫個小程序需要再撿起來,本想著搜索下別人的文章迅速熟悉以下,但是搜索水平有限,并沒有搜到合適的文章,往往都是怎么怎么弄一下,跑起來GUI形式的Hello World就完了,或者寫一堆又不不提套路,反而不如去看編排好看一點的文檔了。所以這里記錄一下,當作自己的學習筆記,也希望能幫助到需要的人。注: 以下所述運行環境都是Python2.7

先跑起來看看

4058205387.png

很顯然,像Tk()這種函數,都是從Tkinter導入的。Tk()運行會返回一個基本窗口組件,其實就是一個對象了。然后對這個對象進行一些操作就可以改變窗口的外觀,例如綁定其他組件,改變Title什么的。最后調用mainloop方法,顧名思義,是啟動主循環,展現出窗口。另外,Tkinter是事件驅動型的,例如遇到點擊之類的事件,會進行一些反應,也就是用戶看到的所謂的操作了。

下面一點點來說,首先來看看啥是組件以及如何綁定組件,看下面的代碼:#coding: utf-8

#Date: 2016.03

#Author: Huspy blog: https://www.quarkay.com

from Tkinter import *

root = Tk()

root.title('覓而獲')

w = Label(root, text="Hello, world!")

w.pack()

root.mainloop()

可見,中間實例化了一個Label對象,在Tkinter中稱之為Label組件或者標簽組件,然后實例化的時候有一些初始化參數,例如這個組建附著在那個組建上,像label組件顧名思義,肯定要有內容,所以也得送入相關參數,這里顯然參數是命名為了text。最后相當于是搞定了組件的初始化,確認綁定到附著的組件,當然了也可以 不綁定,只不過就不會顯示了,只會存在于內存中,只有綁定上去了才會顯示。實際上,這里的所謂綁定,又和Tkinter的排版方式有關,后面細說。

這段代碼運行效果如下圖:

1355323029.png

Tkinter使用套路小結

到這里基本上就已經清楚了,整個套路就是,先初始化一個基礎窗口組件,然后初始化其他組件比如輸入框,標簽Label,按鈕之類的,初始化好了之后在綁定在相應的窗口上,但是最終要顯示的組建肯定是一級一級的最后綁定到了基礎窗口組建上面,最后調用基礎窗口組件的mainloop方法啟動主循環,窗口就生成并且顯示了。Tkinter GUI 軟件的工作是基于事件驅動的,比如按鈕被點擊什么的,執行一些操作。最后要退出就點擊窗口的叉叉或者調用基礎窗口組件的quit()方法即可。

細說組件

在Tkinter里面有很多的組件可供選擇使用,用以完成不同的任務。這里只是說一下套路,所以挑兩個典型的用的最多的來說----Label組件和Button組件。

Label組件主要用來顯示文字或者圖片之類的,同時有著比較豐富的表現力,怎么樣放進去表現呢?顯然是在初始化的時候放進去并且設置表現方式。例如我要顯示藍色底的紅色文字,并且想要控制一下寬和高,可以這么初始化Label組件:t = Label(root, bg="blue", fg="white", text="www.mierhuo.com", width=40, height=2)

t.pack()

那么最終顯示的時候,會是這個樣子:

3163492672.png

再比如,我想要顯示圖片,可以這樣初始化:p = PhotoImage(file="./baifeng.gif")

w = Label(root, image=p)

w.pack()

這里的PhotoImage是庫里面的一個方法,用于讀取圖片并且封裝成庫其他組件、方法可以直接利用的通用型對象。這樣實例化之后顯示的時候如下圖:

1818225298.png

再比如Button組件,就一般軟件而言,顯然要有文字顯示,表明按鈕的作用,并且點擊之類的操作會出發一些程序動作,所以實例化的時候也是如此:# 變色功能按鈕

bt = Button(root, text="Blink", fg="green", command=Blink.changeColor)

bt.pack()

# 退出功能按鈕

bt = Button(root, text="Quit", fg="red", command=root.quit)

bt.pack()

最終顯示會是這個樣子:

3841815914.png

可見,按鈕的表現力也還可以,還可以控制文本的顏色。所以,到這里就很清楚了,每個組件都有自己的作用,有自己獨特的展現力,另外,初始化時有些資源需要先調用其他方法封裝一下比如圖片什么的才能加以使用。庫的使用者只需要根據需要,合理使用即可。

細說Tkinter GUI布局排版方式

前面有提到,組件實例化之后是要調用pack()去綁定在父組件上面,并且一級一級最終綁定在調用mainloop()的窗口基礎組件上面。這個所謂的綁定其實就是GUI布局,或者說通過這個方式進行界面的布局排版。

在Tkinter中,有三種布局方式,分別是:Grid、Pack、Place。其中Pack前面已經出現了很多次了,就pack而言,從前面的小例子就可以看到,似乎就是從上到下依次堆疊,當然,這是因為沒有指定任何參數,默認是如此,其實pack的時候可以指定很多參數,比如對齊方式、填充方式、排布方向之類的。例如前面的例子如果pack的時候修改一下參數:t = Label(root, bg="blue", fg="white", text="www.mierhuo.com", width=40, height=2)

t.pack(fill='x')

這里順便演示一下place的效果:bt_blink = Button(root, text="Blink", fg="green", command=Blink.changeColor)

bt_blink.place(relx=0.7, rely=0.7)

最終代碼如下:#coding: utf-8

#Date: 2016.03

#Author: Huspy blog: https://www.quarkay.com

from Tkinter import *

root = Tk()

root.title('覓而獲')

t = Label(root, bg="blue", fg="white", text="www.mierhuo.com", width=40, height=2)

t.pack(fill='x')

p = PhotoImage(file="./baifeng.gif")

w = Label(root, image=p)

w.pack()

class Blink():

flag = 1

@staticmethod

def changeColor():

if Blink.flag:

t.config(fg='red', bg='green')

Blink.flag = 0

else:

t.config(fg="white", bg="blue")

Blink.flag = 1

bt_blink = Button(root, text="Blink", fg="green", command=Blink.changeColor)

bt_blink.place(relx=0.7, rely=0.7)

bt_quit = Button(root, text="Quit", fg="red", command=root.quit)

bt_quit.pack()

root.mainloop()

最終效果如下:

2493770365.png

小結

相信到了這一步,Python Tkinter的各種套路都很清楚了,剩下的就是看文檔熟悉各種組件、布局的使用方法,然后練習練習就能上手了。然而,Tkinter的文檔似乎比較難找啊,對于合適的文檔,我剛開始也是找了很久沒找到,這里分享一下:effbot.org/tkinterbook/tkinter-index.htm#class-reference

另外,之前用Python寫過一個辣雞嗅探器,代碼寫的很辣雞,不過界面也是用Tkinter做的,有興趣的同學可以參考一下:

界面如下:

1695856389.png

(其實大半年以前就打算寫此文了,結果就開了個頭然后一直沒動,博客也一直沒更新,真是明日復明日,明日何其多。以后一定要改掉這個壞習慣,每天堅持學習,堅持寫博客記錄,與君共勉!)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/534955.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/534955.shtml
英文地址,請注明出處:http://en.pswp.cn/news/534955.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

@async 默認線程池_SpringBoot 線程池的使用

Java大聯盟幫助萬千Java學習者持續成長關注作者|Musclehengblog.csdn.net/Muscleheng/article/details/81409672前言最近在做訂單模塊,用戶購買服務類產品之后,需要進行預約,預約成功之后分別給商家和用戶發送提醒短信。考慮發短信…

mysql 橫向擴展 中間件_mysql-proxy數據庫中間件架構 | 架構師之路

一、mysql-proxy簡介mysql-proxy是mysql官方提供的mysql中間件服務,上游可接入若干個mysql-client,后端可連接若干個mysql-server。它使用mysql協議,任何使用mysql-client的上游無需修改任何代碼,即可遷移至mysql-proxy上。mysql-…

python selenium對象怎么序列化_python selenium爬取斗魚

不加延遲報錯selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {“method”:”xpath”,”selector”:”.//span[class”DyListCover-hot”]”}(Session info: chrome80.0.3987.122)最開始以為是版本問題,不…

神經網絡的全連接層_深度神經網絡全連接層

一、概念全連接層一般在網絡的最后部分做分類輸出,全連接層的有m個輸入和n個輸出,每一個輸出都和所有的輸入相連,相連的權重w都是不一樣的,同時每一個輸出還有一個bias。二、前向全連接假設輸入是4,輸出是4&#xff0c…

vs 選定內容沒有屬性頁_從智能單品,到全屋智能:2019中國智能家居發展白皮書【附82頁PPT】...

2019年,智能家居行業在技術、市場和行業的變革中迎接新的挑戰和機遇。一方面,AI、IoT、邊緣計算全面賦能智能家居;另一方面,中國的房地產行業正在從上半場的“增量開發”,切換到下半場的“存量經營”、“樓盤精裝化”政…

python決策樹的應用_機器學習-決策樹實戰應用

1.下載2.安裝:雙擊3.創建桌面快捷方式安裝目錄\bin文件夾\:找到gvedit.exe文件右鍵 發送到桌面快捷方式,如下圖:4.配置環境變量將graphviz安裝目錄下的bin文件夾添加到Path環境變量中:5.驗證是否安裝并配置成功進入win…

【SSM面向CRUD編程專欄 3】關于黑馬程序員最全SSM框架教程視頻,P37集老師跳過的模塊創建以及tomcat下載安裝配置和運行等諸多問題

寫在前面:? 本人是在學習B站黑馬程序員SSM框架教程視頻的時候在P37集遇到了問題,如果不解決還沒辦法往下接著聽,老師跳過的模塊創建以及tomcat下載安裝配置和運行等諸多問題,全在這篇博客中得到了解決 😢解決上…

python人臉識別源碼_Python 抖音機器人,讓你找到漂亮小姐姐

本項目作者沉迷于抖音無法自拔,常常花好幾個小時在抖音漂亮小姐姐身上。本著高效、直接地找到漂亮小姐姐的核心思想,我用 Python ADB 做了一個 Python 抖音機器人 Douyin-Bot。特性自動翻頁顏值檢測人臉識別自動點贊自動關注隨機防 Ban自動評論原理打開…

thinkphp josn mysql_ThinkPHP:JSON字段類型的使用(ORM)

ThinkPHP5.1版本正式發布已經有一段時間了,我會陸續給大家介紹其中的新特性。今天要給大家介紹的是一個可能很多用戶還不了解的一個特性:JSON字段數據支持。不過首先注意一點,本篇內容中描述的JSON字段數據的支持是從V5.1.4版本引入的。由于包…

獲取http地址如何從上面抓取圖片_用 Python 自動抓取妹子圖

目錄前言Media Pipeline啟用Media Pipeline使用 ImgPipeline抓取妹子圖瞎比比與送書后話前言我們在抓取數據的過程中,除了要抓取文本數據之外,當然也會有抓取圖片的需求。那我們的 scrapy 能爬取圖片嗎?答案是,當然的。說來慚愧&a…

MySQL摘要_mysql摘要

2011-04-15(1)mysqld關閉命令:mysqladmin -u root shutdown。注意:windows命令以enter結束不是;,mysql命令行才是(2)mysql終端接入,修改mysql.user表內容,添加授權用戶。insert into mysql.user(Host,User,Password,ss…

錯誤代碼0x800f0950怎么解決_解決win10安裝net framework 3.5失敗(錯誤代碼 0x800F0950)...

視頻教程:Win10教程 安裝net framework 3.5失敗(錯誤代碼 0x800F0950)_嗶哩嗶哩 (゜-゜)つロ 干杯~-bilibili?www.bilibili.com一:出現問題:報錯代碼二:解決步驟1.通過命令提示符明確自己系統版本Windows鍵X ,打開(命…

java mysql dump_Java 調用Mysql dump 備份數據庫

SimpleDateFormat sdf new SimpleDateFormat("yyyyMMddHHmmss");try {String name sdf.format(new Date());String filePath System.getProperty("user.dir") "//" name ".sql";// 系統執行器Runtime rt Runtime.getRuntime();…

python 日志不會按照日期分割_django實現日志按日期分割

settings文件中配置: LOGGING { version:1, disable_existing_logger:False, formatters:{ verbose:{ format:%(asctime)s \"%(pathname)s:%(module)s:%(funcName)s:%(lineno)d\" [%(levelname)s]-%(message)s }, }, # 處理器 handlers:{ # 輸…

mysql事務隔離最高_Mysql事務隔離級別

mysql官方文檔顯示:InnoDB中每個隔離級別的詳細描述如下: READ UNCOMMITTEDSELECT語句以非鎖定方式被執行,但是一個可能更早期版本的記錄會被用到。因此,使用這個隔離級別,比如,讀是不連貫的。著也被稱為“…

exe打包工具哪個最好_一鍵分發工具哪個最好用?這款30萬人都在用,很優秀!...

現代化媒體對于傳播越來越重要,16年到如今,視頻內容產業實在有話題度,其高效的粉絲互動機制、低資金投入高額回報等等亮點,強烈吸引著數以百萬計的創造者,為了達到極其出色的閱讀量,這些人往往會運用到所有…

mysql備份服務器中的_使用 Shell 備份遠程服務器上的 MySQL 數據庫到本機

適用場景:遠程服務器上的 MySQL 不允許遠程訪問,此時我們需要先登錄服務器,備份數據庫后,將備份文件拉取到本機。源碼 mysqlDumpRemote2Local.sh#!/bin/bash################################################# TODO: 登錄遠程服務…

date轉timestamp格式_技術分享 | MySQL:timestamp 時區轉換導致 CPU %sy 高的問題

作者:高鵬文章末尾有他著作的《深入理解 MySQL 主從原理 32 講》,深入透徹理解 MySQL 主從,GTID 相關技術知識。本文為學習記錄,可能有誤請諒解。本文建議PC端觀看,效果更佳。這個問題是一個朋友遇到的風云&#xff0c…

mysql架構組成_第 2 章 MySQL 架構組成

麻雀雖小,五臟俱全。MySQL 雖然以簡單著稱,但其內部結構并不簡單。本章從MySQL物理組成、邏輯組成,以及相關工具幾個角度來介紹 MySQL 的整體架構組成,希望能夠讓讀者對 MySQL 有一個更全面深入的了解。2.1 MySQL物理文…