這篇文章主要介紹了這可能是最好玩的python GUI入門實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
簡單的說,GUI編程就是給程序加上圖形化界面.
python的腳本開發簡單,有時候只需幾行代碼就能實現豐富的功能,而且python本身是跨平臺的,所以深受程序員的喜愛.
如果給程序加一個圖形化界面,那麼普通的用戶也就能用上python的腳本,極大提升工作效率,所以給python程序加上圖形化界面,把自己寫的腳本,提供給普通用戶,的確是一件激動人心的事!
如何給python腳本加圖形化界面?
作者首先考慮了通過瀏覽器運行python的圖形化界面,為了理想的效果,python需要藉助javascript實現一些功能,而且python需要額外安裝pyv8模塊,我折騰了一下,發現pyv8模塊安裝很麻煩,而且依賴的庫很多,編譯安裝也根據不同的操作系統,存在各種坑,pyv8不適合普通用戶,於是就暫時擱置了pyv8模塊.
隨後我又比較了pyqt5與tkinter兩個模塊: pyqt5功能很強,界面也漂亮,但語法比較複雜,pyqt5模塊需要單獨安裝,不適合新手入門;
tkinter是python3自帶的模塊,能滿足基本的功能需求,語法也簡單,基本上5分鐘就能上手,所以最終選擇了tkinter.
網上當前的python GUI教程存在的問題:
1.功能太簡單,基本功能就是"花式"顯示"Hello World";
2.註釋不明瞭,複製粘貼別人寫的博客代碼,代碼殘缺
3.版本老舊,都是針對python2.7的程序,導入方式如 import Tkinter ,python3應為 import tkinter
這次作者選擇了一個 "根據ip地址定位地理位置"的腳本,作為本次教程的素材,比較好玩,也比較容易實現:
解釋的內容都放到了註釋裡,上代碼:
import tkinter
import pygeoip
class FindLocation(object):
def __init__(self):
self.gi = pygeoip.GeoIP("./GeoLiteCity.dat")
# 創建主窗口,用於容納其它組件
self.root = tkinter.Tk()
# 給主窗口設置標題內容
self.root.title("全球定位ip位置(離線版)")
# 創建一個輸入框,並設置尺寸
self.ip_input = tkinter.Entry(self.root,width=30)
# 創建一個回顯列表
self.display_info = tkinter.Listbox(self.root, width=50)
# 創建一個查詢結果的按鈕
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()
# 根據ip查找地理位置
def find_position(self):
# 獲取輸入信息
self.ip_addr = self.ip_input.get()
aim = self.gi.record_by_name(self.ip_addr)
# 為了避免非法值,導致程序崩潰,有興趣可以用正則寫一下具體的規則,我為了便於新手理解,減少代碼量,就直接粗放的過濾了
try:
# 獲取目標城市
city = aim["city"]
# 獲取目標國家
country = aim["country_name"]
# 獲取目標地區
region_code = aim["region_code"]
# 獲取目標經度
longitude = aim["longitude"]
# 獲取目標緯度
latitude = aim["latitude"]
except:
pass
# 創建臨時列表
the_ip_info = ["所在緯度:"+str(latitude),"所在經度:"+str(longitude),"地域代號:"+str(region_code),"所在城市:"+str(city), "所在國家或地區:"+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()
# 進行佈局
FL.gui_arrang()
# 主程序執行
tkinter.mainloop()
pass
if __name__ == "__main__":
main()
運行效果(為了更好的演示效果,使用了gif圖,圖片尺寸較大,建議在wifi環境下觀看,土豪隨意~):
由於離線查詢ip需要全球IP的分佈數據,所以我直接選擇了一個免費離線查詢ip的數據包,為了讀取這個包的數據還需要安裝一個模塊: pip install pygeoip ,極少數人的當年安裝python3的時候,選了不含tkinter的python3安裝包,為了學習,還是要把這個模塊補上: pip install tkinter
有喜歡的小夥伴可以關注小編並幫小編轉發,小編會持續更新的。
閱讀更多 架構師公社 的文章