這可能是最好玩的python GUI入門實(shí)例(推薦)
簡單的說,GUI編程就是給程序加上圖形化界面.
python的腳本開發(fā)簡單,有時候只需幾行代碼就能實(shí)現(xiàn)豐富的功能,而且python本身是跨平臺的,所以深受程序員的喜愛.
如果給程序加一個圖形化界面,那么普通的用戶也就能用上python的腳本,極大提升工作效率,所以給python程序加上圖形化界面,把自己寫的腳本,提供給普通用戶,的確是一件激動人心的事!
如何給python腳本加圖形化界面?
作者首先考慮了通過瀏覽器運(yùn)行python的圖形化界面,為了理想的效果,python需要借助javascript實(shí)現(xiàn)一些功能,而且python需要額外安裝pyv8模塊,我折騰了一下,發(fā)現(xiàn)pyv8模塊安裝很麻煩,而且依賴的庫很多,編譯安裝也根據(jù)不同的操作系統(tǒng),存在各種坑,pyv8不適合普通用戶,于是就暫時擱置了pyv8模塊.
軟件界面
隨后我又比較了pyqt5與tkinter兩個模塊: pyqt5功能很強(qiáng),界面也漂亮,但語法比較復(fù)雜,pyqt5模塊需要單獨(dú)安裝,不適合新手入門;
tkinter是python3自帶的模塊,能滿足基本的功能需求,語法也簡單,基本上5分鐘就能上手,所以最終選擇了tkinter.
網(wǎng)上當(dāng)前的python GUI教程存在的問題:
1.功能太簡單,基本功能就是"花式"顯示"Hello World";
2.注釋不明了,復(fù)制粘貼別人寫的博客代碼,代碼殘缺
3.版本老舊,都是針對python2.7的程序,導(dǎo)入方式如 import Tkinter
,python3應(yīng)為 import tkinter
這次作者選擇了一個 "根據(jù)ip地址定位地理位置"的腳本,作為本次教程的素材,比較好玩,也比較容易實(shí)現(xiàn):
解釋的內(nèi)容都放到了注釋里,上代碼:
import tkinter import pygeoip class FindLocation(object): def __init__(self): self.gi = pygeoip.GeoIP("./GeoLiteCity.dat") # 創(chuàng)建主窗口,用于容納其它組件 self.root = tkinter.Tk() # 給主窗口設(shè)置標(biāo)題內(nèi)容 self.root.title("全球定位ip位置(離線版)") # 創(chuàng)建一個輸入框,并設(shè)置尺寸 self.ip_input = tkinter.Entry(self.root,width=30) # 創(chuàng)建一個回顯列表 self.display_info = tkinter.Listbox(self.root, width=50) # 創(chuàng)建一個查詢結(jié)果的按鈕 self.result_button = tkinter.Button(self.root, command = self.find_position, text = "查詢") # 完成布局 def gui_arrang(self): self.ip_input.pack() self.display_info.pack() self.result_button.pack() # 根據(jù)ip查找地理位置 def find_position(self): # 獲取輸入信息 self.ip_addr = self.ip_input.get() aim = self.gi.record_by_name(self.ip_addr) # 為了避免非法值,導(dǎo)致程序崩潰,有興趣可以用正則寫一下具體的規(guī)則,我為了便于新手理解,減少代碼量,就直接粗放的過濾了 try: # 獲取目標(biāo)城市 city = aim["city"] # 獲取目標(biāo)國家 country = aim["country_name"] # 獲取目標(biāo)地區(qū) region_code = aim["region_code"] # 獲取目標(biāo)經(jīng)度 longitude = aim["longitude"] # 獲取目標(biāo)緯度 latitude = aim["latitude"] except: pass # 創(chuàng)建臨時列表 the_ip_info = ["所在緯度:"+str(latitude),"所在經(jīng)度:"+str(longitude),"地域代號:"+str(region_code),"所在城市:"+str(city), "所在國家或地區(qū):"+str(country), "需要查詢的ip:"+str(self.ip_addr)] #清空回顯列表可見部分,類似clear命令 for item in range(10): self.display_info.insert(0,"") # 為回顯列表賦值 for item in the_ip_info: self.display_info.insert(0,item) # 這里的返回值,沒啥用,就是為了好看 return the_ip_info def main(): # 初始化對象 FL = FindLocation() # 進(jìn)行布局 FL.gui_arrang() # 主程序執(zhí)行 tkinter.mainloop() pass if __name__ == "__main__": main()
運(yùn)行效果(為了更好的演示效果,使用了gif圖,圖片尺寸較大,建議在wifi環(huán)境下觀看,土豪隨意~):
一張很有尺寸的演示圖!
由于離線查詢ip需要全球IP的分布數(shù)據(jù),所以我直接選擇了一個免費(fèi)離線查詢ip的數(shù)據(jù)包,為了讀取這個包的數(shù)據(jù)還需要安裝一個模塊: pip install pygeoip
,極少數(shù)人的當(dāng)年安裝python3的時候,選了不含tkinter的python3安裝包,為了學(xué)習(xí),還是要把這個模塊補(bǔ)上: pip install tkinter
如果想將示例程序轉(zhuǎn)為windows下的可執(zhí)行文件(.exe),參考這篇
http://chabaoo.cn/article/165766.htm
教程涉及到的資源我都通過百度網(wǎng)盤分享給大家,為了便于大家的下載,資源整合到了一張獨(dú)立的帖子里,鏈接如下:
http://www.jianshu.com/p/4f28e1ae08b1
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
使用用Pyspark和GraphX實(shí)現(xiàn)解析復(fù)雜網(wǎng)絡(luò)數(shù)據(jù)
GraphX是Spark提供的圖計(jì)算API,它提供了一套強(qiáng)大的工具,這篇文章將詳細(xì)為大家介紹如何在Python?/?pyspark環(huán)境中使用graphx進(jìn)行圖計(jì)算,感興趣的可以了解下2024-01-01pytorch繪制并顯示loss曲線和acc曲線,LeNet5識別圖像準(zhǔn)確率
今天小編就為大家分享一篇pytorch繪制并顯示loss曲線和acc曲線,LeNet5識別圖像準(zhǔn)確率,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01python-pyinstaller、打包后獲取路徑的實(shí)例
今天小編就為大家分享一篇python-pyinstaller、打包后獲取路徑的實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06Python?OpenCV實(shí)現(xiàn)3種濾鏡效果實(shí)例
opencv是一個很強(qiáng)大的庫,支持多個編程語言,下面這篇文章主要給大家介紹了關(guān)于Python?OpenCV實(shí)現(xiàn)3種濾鏡效果的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04詳解pandas.DataFrame中刪除包涵特定字符串所在的行
這篇文章主要介紹了pandas.DataFrame中刪除包涵特定字符串所在的行,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04python爬蟲反爬之圖片驗(yàn)證功能實(shí)現(xiàn)
這篇文章主要介紹了python爬蟲反爬之圖片驗(yàn)證功能實(shí)現(xiàn),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-03-03