日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python GUI

發(fā)布時(shí)間:2025/3/17 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python GUI 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

簡單的說,GUI編程就是給程序加上圖形化界面.

python的腳本開發(fā)簡單,有時(shí)候只需幾行代碼就能實(shí)現(xiàn)豐富的功能,而且python本身是跨平臺(tái)的,所以深受程序員的喜愛.

如果給程序加一個(gè)圖形化界面,那么普通的用戶也就能用上python的腳本,極大提升工作效率,所以給python程序加上圖形化界面,把自己寫的腳本,提供給普通用戶,的確是一件激動(dòng)人心的事!


如何給python腳本加圖形化界面?

作者首先考慮了通過瀏覽器運(yùn)行python的圖形化界面,為了理想的效果,python需要借助javascript實(shí)現(xiàn)一些功能,而且python需要額外安裝pyv8模塊,我折騰了一下,發(fā)現(xiàn)pyv8模塊安裝很麻煩,而且依賴的庫很多,編譯安裝也根據(jù)不同的操作系統(tǒng),存在各種坑,pyv8不適合普通用戶,于是就暫時(shí)擱置了pyv8模塊.

軟件界面

隨后我又比較了pyqt5與tkinter兩個(gè)模塊:

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

這次作者選擇了一個(gè) "根據(jù)ip地址定位地理位置"的腳本,作為本次教程的素材,比較好玩,也比較容易實(shí)現(xiàn):

解釋的內(nèi)容都放到了注釋里,上代碼:

import tkinter import pygeoipclass 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)建一個(gè)輸入框,并設(shè)置尺寸self.ip_input = tkinter.Entry(self.root,width=30)# 創(chuàng)建一個(gè)回顯列表self.display_info = tkinter.Listbox(self.root, width=50)# 創(chuàng)建一個(gè)查詢結(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)建臨時(shí)列表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_infodef main():# 初始化對象FL = FindLocation()# 進(jìn)行布局FL.gui_arrang()# 主程序執(zhí)行tkinter.mainloop()passif __name__ == "__main__":main()

運(yùn)行效果(為了更好的演示效果,使用了gif圖,圖片尺寸較大,建議在wifi環(huán)境下觀看,土豪隨意~):

一張很有尺寸的演示圖!

由于離線查詢ip需要全球IP的分布數(shù)據(jù),所以我直接選擇了一個(gè)免費(fèi)離線查詢ip的數(shù)據(jù)包,為了讀取這個(gè)包的數(shù)據(jù)還需要安裝一個(gè)模塊:pip install pygeoip,極少數(shù)人的當(dāng)年安裝python3的時(shí)候,選了不含tkinter的python3安裝包,為了學(xué)習(xí),還是要把這個(gè)模塊補(bǔ)上:pip install tkinter

--- 9月27日更新----

如果想將示例程序轉(zhuǎn)為windows下的可執(zhí)行文件(.exe),參考這篇http://www.jianshu.com/p/64cb9108a7c6

教程涉及到的資源我都通過百度網(wǎng)盤分享給大家,為了便于大家的下載,資源整合到了一張獨(dú)立的帖子里,鏈接如下:

http://www.jianshu.com/p/4f28e1ae08b1

來源鏈接:https://www.jianshu.com/p/8abcf73adba3

總結(jié)

以上是生活随笔為你收集整理的Python GUI的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。