? ? 今天我要和大家分享兩個非常有趣的Python實戰項目:一個是北京市2001-2017年水資源數據的可視化分析,另一個是圖書館書籍管理應用程序的開發。這兩個項目都使用了Python的主流庫,比如Pandas、Matplotlib和Tkinter,非常適合初學者學習和實踐。資源綁定附上完整資料供讀者參考學習!
我將從代碼實現、功能講解到實際應用,手把手帶大家了解這兩個項目的開發過程。無論是想提升數據分析能力,還是想學習圖形用戶界面設計,這篇文章都能幫到你!
項目一:北京市水資源數據可視化
1. 項目背景
北京市作為中國的首都,水資源的合理利用和管理一直是一個重要課題。通過分析2001-2017年的水資源數據,我們可以直觀地了解水資源總量、人均水資源量、用水結構等信息,為水資源管理提供數據支持。
2. 數據預處理
首先,我們需要讀取數據文件。這里使用了Python的open
函數,將CSV文件中的數據逐行讀取并存儲為一個列表。每行數據用逗號分隔,方便后續提取和處理。
Python
#將文件全部內容讀取出來放入列表中,每個元素為一行字符串,用逗號隔開
with open('2001-2017年北京市水資源情況信息.csv','r',encoding='GBK') as file:water_data_list=[line.strip().split(',') for line in file]
3. 可視化分析
我們使用Matplotlib庫繪制了四個子圖,分別展示不同維度的水資源數據。
子圖1:全年水資源折線圖
折線圖非常適合展示趨勢。我們提取了年份和三種水資源數據(總量、地表水、地下水),繪制了三條折線,分別用紅色、綠色和藍色表示。
Python
import matplotlib.pyplot as plt
import numpy as np
import matplotlibmatplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False#將文件全部內容讀取出來放入列表中,每個元素為一行字符串,用逗號隔開
with open('2001-2017年北京市水資源情況信息.csv','r',encoding='GBK') as file:water_data_list=[line.strip().split(',') for line in file]
#設置畫布尺寸為12x12英寸,分辨率dpi為100像素
plt.figure(figsize=(12,12),dpi=100)
#畫布總標題即圖片總標題為"姓名+QQ號"
plt.suptitle('啊阿貍不會拉桿 2826848766',fontsize=35,fontweight='bold')#子圖1,繪制"全年水資源折線圖"
subplot1=plt.subplot(2,2,1)#子圖1的標題"全年水資源折線圖"
subplot1.set_title('全年水資源折線圖')#從列表中提取數據"年份"為x的取值
x=[int(x) for x in water_data_list[0][1:18]]#分別從列表中提取"全年水資源總量","地表水資源","地下水資源",并轉換成數字,原來是字符串
y1=[float(y1) for y1 in water_data_list[1][1:18]]
y2=[float(y2) for y2 in water_data_list[2][1:18]]
y3=[float(y3) for y3 in water_data_list[3][1:18]]#分別開始繪制折線圖的三條線,線型,顏色,標簽與圖例對應
subplot1.plot(x,y1,linestyle='-',color='r',label='全年水資源總量')
subplot1.plot(x,y2,linestyle='--',color='g',label='地表水資源量')
subplot1.plot(x,y3,linestyle=':',color='b',label='地下水資源量')#添加橫縱坐標的記號和標簽,橫軸年份(2001-2017),隔兩年顯示,斜體顯示,縱軸(0-40),相隔5
plt.xticks(np.linspace(2001,2017,9,endpoint=True),rotation=45)
plt.xlabel('年份')
plt.yticks(np.linspace(0,40,9,endpoint=True))
plt.ylabel('億立方米')#圖例放在左上
subplot1.legend(loc='upper left')
plt.show()
子圖2:人均水資源量散點圖
散點圖可以直觀地展示人均水資源量的分布情況。我們提取了人均水資源量數據,并用藍色圓點表示。
Python
import matplotlib.pyplot as plt
import numpy as np
import matplotlibmatplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False#將文件全部內容讀取出來放入列表中,每個元素為一行字符串,用逗號隔開
with open('2001-2017年北京市水資源情況信息.csv','r',encoding='GBK') as file:water_data_list=[line.strip().split(',') for line in file]
#設置畫布尺寸為12x12英寸,分辨率dpi為100像素
plt.figure(figsize=(12,12),dpi=100)
#畫布總標題即圖片總標題為"姓名+QQ號"
plt.suptitle('啊阿貍不會拉桿 2826848766',fontsize=35,fontweight='bold')#子圖1,繪制"全年水資源折線圖"
subplot1=plt.subplot(2,2,1)#子圖1的標題"全年水資源折線圖"
subplot1.set_title('全年水資源折線圖')#從列表中提取數據"年份"為x的取值
x=[int(x) for x in water_data_list[0][1:18]]#分別從列表中提取"全年水資源總量","地表水資源","地下水資源",并轉換成數字,原來是字符串
y1=[float(y1) for y1 in water_data_list[1][1:18]]
y2=[float(y2) for y2 in water_data_list[2][1:18]]
y3=[float(y3) for y3 in water_data_list[3][1:18]]#分別開始繪制折線圖的三條線,線型,顏色,標簽與圖例對應
subplot1.plot(x,y1,linestyle='-',color='r',label='全年水資源總量')
subplot1.plot(x,y2,linestyle='--',color='g',label='地表水資源量')
subplot1.plot(x,y3,linestyle=':',color='b',label='地下水資源量')#添加橫縱坐標的記號和標簽,橫軸年份(2001-2017),隔兩年顯示,斜體顯示,縱軸(0-40),相隔5
plt.xticks(np.linspace(2001,2017,9,endpoint=True),rotation=45)
plt.xlabel('年份')
plt.yticks(np.linspace(0,40,9,endpoint=True))
plt.ylabel('億立方米')#圖例放在左上
subplot1.legend(loc='upper left')#子圖2,繪制人均水資源量散點圖
subplot2=plt.subplot(2,2,2)#子圖2標題"人均水資源量散點圖"
subplot2.set_title('人均水資源量散點圖')#從列表中提取出人均水資源量數據并轉化成數字,原來是字符串
y_2=[float(y_2) for y_2 in water_data_list[4][1:18]]#繪制散點圖,點的類型為circle'o',顏色為藍色,圖例為"人均水資源(立方米/人)"
subplot2.scatter(x,y_2,marker='o',color='b',label='人均水資源(立方米/人)')#顯示圖例,在右上角
subplot2.legend(loc='upper right')#橫縱坐標的記號和標簽,縱軸(100-200),相隔10
plt.xticks(np.linspace(2001,2017,9,endpoint=True),rotation=45)
plt.xlabel('年份')
plt.yticks(np.linspace(100,200,11,endpoint=True))
plt.ylabel('立方米/人')
plt.show()
子圖3:2017年用水餅圖
餅圖非常適合展示比例關系。我們提取了2017年的用水數據,分別展示農業、工業、生活和生態環境用水的比例。
Python
import matplotlib.pyplot as plt
import numpy as np
import matplotlibmatplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False#將文件全部內容讀取出來放入列表中,每個元素為一行字符串,用逗號隔開
with open('2001-2017年北京市水資源情況信息.csv','r',encoding='GBK') as file:water_data_list=[line.strip().split(',') for line in file]
#設置畫布尺寸為12x12英寸,分辨率dpi為100像素
plt.figure(figsize=(12,12),dpi=100)
#畫布總標題即圖片總標題為"姓名+QQ號"
plt.suptitle('啊阿貍不會拉桿 2826848766',fontsize=35,fontweight='bold')#子圖1,繪制"全年水資源折線圖"
subplot1=plt.subplot(2,2,1)#子圖1的標題"全年水資源折線圖"
subplot1.set_title('全年水資源折線圖')#從列表中提取數據"年份"為x的取值
x=[int(x) for x in water_data_list[0][1:18]]#分別從列表中提取"全年水資源總量","地表水資源","地下水資源",并轉換成數字,原來是字符串
y1=[float(y1) for y1 in water_data_list[1][1:18]]
y2=[float(y2) for y2 in water_data_list[2][1:18]]
y3=[float(y3) for y3 in water_data_list[3][1:18]]#分別開始繪制折線圖的三條線,線型,顏色,標簽與圖例對應
subplot1.plot(x,y1,linestyle='-',color='r',label='全年水資源總量')
subplot1.plot(x,y2,linestyle='--',color='g',label='地表水資源量')
subplot1.plot(x,y3,linestyle=':',color='b',label='地下水資源量')#添加橫縱坐標的記號和標簽,橫軸年份(2001-2017),隔兩年顯示,斜體顯示,縱軸(0-40),相隔5
plt.xticks(np.linspace(2001,2017,9,endpoint=True),rotation=45)
plt.xlabel('年份')
plt.yticks(np.linspace(0,40,9,endpoint=True))
plt.ylabel('億立方米')#圖例放在左上
subplot1.legend(loc='upper left')#子圖2,繪制人均水資源量散點圖
subplot2=plt.subplot(2,2,2)#子圖2標題"人均水資源量散點圖"
subplot2.set_title('人均水資源量散點圖')#從列表中提取出人均水資源量數據并轉化成數字,原來是字符串
y_2=[float(y_2) for y_2 in water_data_list[4][1:18]]#繪制散點圖,點的類型為circle'o',顏色為藍色,圖例為"人均水資源(立方米/人)"
subplot2.scatter(x,y_2,marker='o',color='b',label='人均水資源(立方米/人)')#顯示圖例,在右上角
subplot2.legend(loc='upper right')#橫縱坐標的記號和標簽,縱軸(100-200),相隔10
plt.xticks(np.linspace(2001,2017,9,endpoint=True),rotation=45)
plt.xlabel('年份')
plt.yticks(np.linspace(100,200,11,endpoint=True))
plt.ylabel('立方米/人')#子圖3,2017年用水餅圖
subplot3=plt.subplot(2,2,3)#子圖3標題"2017年用水量餅圖"
subplot3.set_title('2017年用水量餅圖')#各個餅的標簽
label_3=['農業用水','工業用水','生活用水','生態環境用水']#列表value用來存放2017年的"農業用水","工業用水","生活用水","生態環境用水量"
value=[]
for i in range(11,15):value.append(float(water_data_list[i][17]))#繪制餅圖,顏色按示例來對應,各個餅間距為01,百分比顯示格式為小數點后保留2位
subplot3.pie(value,colors=['steelblue','darkorange','g','red'],labels=label_3,autopct='%1.2f%%',explode=[0.01,0.01,0.01,0.01])
plt.show()
子圖4:萬元地區生產總值耗水量箱線圖
箱線圖可以展示數據的分布情況,包括中位數、四分位數和離群值。我們提取了2001-2017年的耗水量數據,并繪制了箱線圖。
Python
import matplotlib.pyplot as plt
import numpy as np
import matplotlibmatplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False#將文件全部內容讀取出來放入列表中,每個元素為一行字符串,用逗號隔開
with open('2001-2017年北京市水資源情況信息.csv','r',encoding='GBK') as file:water_data_list=[line.strip().split(',') for line in file]
#設置畫布尺寸為12x12英寸,分辨率dpi為100像素
plt.figure(figsize=(12,12),dpi=100)
#畫布總標題即圖片總標題為"姓名+QQ號"
plt.suptitle('啊阿貍不會拉桿 2826848766',fontsize=35,fontweight='bold')
#繪制子圖4,2001-2017年萬元地區生產總值耗水量箱線圖
subplot4=plt.subplot(2,2,4)#子圖4總標題為"2001-2017年萬元地區生產總值耗水量箱線圖"
subplot4.set_title('2001-2017年萬元地區生產總值耗水量箱線圖')#列表用來存放"2001-2017年萬元地區生產總值耗水量"數據
data_4=[]
for i in range(1,18):data_4.append(float(water_data_list[15][i]))#繪制箱線圖,notch=Ture凹口的形式展現箱線圖,用線的形式表示均值
subplot4.boxplot(data_4,notch=True,meanline='-')#橫軸標簽和縱軸記號
plt.xlabel('萬元地區生產總值耗水量(立方米)')
plt.yticks(np.linspace(0,100,6,endpoint=True))
#保存圖片為"我的姓名+QQ號",即"啊阿貍不會拉桿 2826848766"
#plt.savefig('啊阿貍不會拉桿 2826848766')
#展示畫布
plt.show()
最終效果
將四個子圖組合在一起,形成了一個完整的可視化分析圖。每個子圖都清晰地展示了不同維度的水資源數據。

import matplotlib.pyplot as plt
import numpy as np
import matplotlibmatplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False#將文件全部內容讀取出來放入列表中,每個元素為一行字符串,用逗號隔開
with open('2001-2017年北京市水資源情況信息.csv','r',encoding='GBK') as file:water_data_list=[line.strip().split(',') for line in file]
#設置畫布尺寸為12x12英寸,分辨率dpi為100像素
plt.figure(figsize=(12,12),dpi=100)
#畫布總標題即圖片總標題為"姓名+QQ號"
plt.suptitle('啊阿貍不會拉桿 2826848766',fontsize=35,fontweight='bold')#子圖1,繪制"全年水資源折線圖"
subplot1=plt.subplot(2,2,1)#子圖1的標題"全年水資源折線圖"
subplot1.set_title('全年水資源折線圖')#從列表中提取數據"年份"為x的取值
x=[int(x) for x in water_data_list[0][1:18]]#分別從列表中提取"全年水資源總量","地表水資源","地下水資源",并轉換成數字,原來是字符串
y1=[float(y1) for y1 in water_data_list[1][1:18]]
y2=[float(y2) for y2 in water_data_list[2][1:18]]
y3=[float(y3) for y3 in water_data_list[3][1:18]]#分別開始繪制折線圖的三條線,線型,顏色,標簽與圖例對應
subplot1.plot(x,y1,linestyle='-',color='r',label='全年水資源總量')
subplot1.plot(x,y2,linestyle='--',color='g',label='地表水資源量')
subplot1.plot(x,y3,linestyle=':',color='b',label='地下水資源量')#添加橫縱坐標的記號和標簽,橫軸年份(2001-2017),隔兩年顯示,斜體顯示,縱軸(0-40),相隔5
plt.xticks(np.linspace(2001,2017,9,endpoint=True),rotation=45)
plt.xlabel('年份')
plt.yticks(np.linspace(0,40,9,endpoint=True))
plt.ylabel('億立方米')#圖例放在左上
subplot1.legend(loc='upper left')#子圖2,繪制人均水資源量散點圖
subplot2=plt.subplot(2,2,2)#子圖2標題"人均水資源量散點圖"
subplot2.set_title('人均水資源量散點圖')#從列表中提取出人均水資源量數據并轉化成數字,原來是字符串
y_2=[float(y_2) for y_2 in water_data_list[4][1:18]]#繪制散點圖,點的類型為circle'o',顏色為藍色,圖例為"人均水資源(立方米/人)"
subplot2.scatter(x,y_2,marker='o',color='b',label='人均水資源(立方米/人)')#顯示圖例,在右上角
subplot2.legend(loc='upper right')#橫縱坐標的記號和標簽,縱軸(100-200),相隔10
plt.xticks(np.linspace(2001,2017,9,endpoint=True),rotation=45)
plt.xlabel('年份')
plt.yticks(np.linspace(100,200,11,endpoint=True))
plt.ylabel('立方米/人')#子圖3,2017年用水餅圖
subplot3=plt.subplot(2,2,3)#子圖3標題"2017年用水量餅圖"
subplot3.set_title('2017年用水量餅圖')#各個餅的標簽
label_3=['農業用水','工業用水','生活用水','生態環境用水']#列表value用來存放2017年的"農業用水","工業用水","生活用水","生態環境用水量"
value=[]
for i in range(11,15):value.append(float(water_data_list[i][17]))#繪制餅圖,顏色按示例來對應,各個餅間距為01,百分比顯示格式為小數點后保留2位
subplot3.pie(value,colors=['steelblue','darkorange','g','red'],labels=label_3,autopct='%1.2f%%',explode=[0.01,0.01,0.01,0.01])#繪制子圖4,2001-2017年萬元地區生產總值耗水量箱線圖
subplot4=plt.subplot(2,2,4)#子圖4總標題為"2001-2017年萬元地區生產總值耗水量箱線圖"
subplot4.set_title('2001-2017年萬元地區生產總值耗水量箱線圖')#列表用來存放"2001-2017年萬元地區生產總值耗水量"數據
data_4=[]
for i in range(1,18):data_4.append(float(water_data_list[15][i]))#繪制箱線圖,notch=Ture凹口的形式展現箱線圖,用線的形式表示均值
subplot4.boxplot(data_4,notch=True,meanline='-')#橫軸標簽和縱軸記號
plt.xlabel('萬元地區生產總值耗水量(立方米)')
plt.yticks(np.linspace(0,100,6,endpoint=True))
#保存圖片為"我的姓名+QQ號",即"啊阿貍不會拉桿 2826848766"
plt.savefig('啊阿貍不會拉桿 2826848766')
#展示畫布
plt.show()
項目二:圖書館書籍管理應用程序
1. 項目背景
圖書館書籍管理是日常生活中非常常見的場景。通過開發一個簡單的書籍管理應用程序,我們可以學習如何使用Python的Tkinter庫創建圖形用戶界面,并實現添加、刪除和修改書籍信息的功能。
2. 功能實現
書籍類和圖書館類
我們首先定義了兩個類:Book
類用于存儲書籍信息,Library
類用于管理書籍列表。
Python
class Book:def __init__(self, title, author, isbn):self.title = titleself.author = authorself.isbn = isbndef __str__(self):return f"{self.title} by {self.author}, ISBN: {self.isbn}"class Library:def __init__(self):self.books = []def add_book(self, book):self.books.append(book)return Truedef remove_book(self, isbn):for book in self.books:if book.isbn == isbn:self.books.remove(book)return Truereturn Falsedef update_book(self, isbn, new_title=None, new_author=None):for book in self.books:if book.isbn == isbn:if new_title:book.title = new_titleif new_author:book.author = new_authorreturn Truereturn False
圖書館應用程序界面
我們使用Tkinter創建了一個圖形用戶界面,包括輸入框、按鈕和列表框。
Python
class LibraryApp:def __init__(self, master, name, student_id):self.master = masterself.name = nameself.student_id = student_idself.library = Library()self.master.geometry('1000x500')self.create_widgets()def create_widgets(self):tk.Label(self.master, text=f"圖書館書籍管理應用程序 - {self.name} {self.student_id}", font=('Arial', 16)).pack()tk.Label(self.master, text="書名:").pack()self.title_entry = tk.Entry(self.master)self.title_entry.pack()tk.Label(self.master, text="作者:").pack()self.author_entry = tk.Entry(self.master)self.author_entry.pack()tk.Label(self.master, text="ISBN(國際標準書號):").pack()self.isbn_entry = tk.Entry(self.master)self.isbn_entry.pack()tk.Button(self.master, text="添加書籍", command=self.add_book).pack()tk.Button(self.master, text="刪除書籍", command=self.remove_book).pack()tk.Button(self.master, text="修改書籍", command=self.update_book).pack()tk.Button(self.master, text="書籍清單:", command=self.refresh_list).pack(anchor=tk.W)self.listbox = Listbox(self.master, width=125, height=11)self.listbox.pack()self.refresh_list()
添加、刪除和修改書籍
我們實現了三個核心功能:添加書籍、刪除書籍和修改書籍信息。
Python
def add_book(self):title = self.title_entry.get()author = self.author_entry.get()isbn = self.isbn_entry.get()if title and author and isbn:new_book = Book(title, author, isbn)if self.library.add_book(new_book):messagebox.showinfo("成功", "書籍添加成功!")self.refresh_list()self.clear_entries()else:messagebox.showerror("錯誤", "書籍添加失敗")else:messagebox.showwarning("提示", "信息不完整,還需完善")def remove_book(self):isbn = self.isbn_entry.get()if isbn:if self.library.remove_book(isbn):messagebox.showinfo("成功", "刪除書籍成功!")self.refresh_list()self.clear_entries()else:messagebox.showerror("失敗", "未找到對應書籍。")else:messagebox.showwarning("提示", "需要提供ISBN碼")def update_book(self):isbn = self.isbn_entry.get()new_title = self.title_entry.get()new_author = self.author_entry.get()if isbn:if self.library.update_book(isbn, new_title, new_author):messagebox.showinfo("成功", "書籍修改成功!")self.refresh_list()self.clear_entries()else:messagebox.showerror("失敗", "未找到對應書籍")else:messagebox.showwarning("提示", "需要提供ISBN碼")
3. 程序運行效果
運行程序后,我們會看到一個簡潔的圖形界面。用戶可以通過輸入框添加書籍信息,也可以通過ISBN刪除或修改書籍信息。所有書籍都會顯示在列表框中,方便查看和管理。
import tkinter as tk
from tkinter import messagebox, Listbox# 定義書籍類
class Book:#title,anthor,isbn分別表示書籍的書名,作者,國際標準書號def __init__(self, title, author, isbn):#把傳進來的三個參數分別賦給書籍類的實例對象的三個屬性self.title = titleself.author = authorself.isbn = isbndef __str__(self):#返回對象的屬性return f"{self.title} by {self.author}, ISBN: {self.isbn}"# 定義圖書館類
class Library:def __init__(self):#創建books列表存放書籍的數據self.books = []#定義添加書籍的方法def add_book(self, book):#存放到books列表里self.books.append(book)return True#定義刪除書籍的方法(用國際標準書號檢索并刪除)def remove_book(self, isbn):#遍歷書籍列表里的書籍for book in self.books:#如果書籍的國際標準書號isbn與輸入isbn一致if book.isbn == isbn:#把相應書籍從列表里刪除self.books.remove(book)return Truereturn False#定義修改書籍信息方法(通過國際標準書號檢索,把書名或作者修改掉)def update_book(self, isbn, new_title=None, new_author=None):#遍歷書籍列表里的書籍for book in self.books:#如果isbn一致if book.isbn == isbn:# 且修改書名非空if new_title:#把書籍的書名修改book.title = new_title#且修改作者非空if new_author:#把書籍的作者修改book.author = new_authorreturn Truereturn False# 定義圖書館應用程序類(也是用戶界面的主界面)
class LibraryApp:def __init__(self, master, name, student_id):#對Tk()函數創建的窗口對象master(或者是常用的root)的屬性賦值self.master = master#我的名字self.name = name#我的學號self.student_id = student_id#圖書館類self.library = Library()#窗口大小設為(1000x500)像素,即寬1000像素,高500像素self.master.geometry('1000x500')#創建界面中的控件(類),包括創建標簽,輸入框,按鈕self.create_widgets()#創建界面中的控件(類)def create_widgets(self):# 創建一個標題tk.Label(self.master, text=f"圖書館書籍管理應用程序 - {self.name} {self.student_id}", font=('Arial', 16)).pack()# 創建一個輸入框并顯示"書名"tk.Label(self.master, text="書名:").pack()#創建供用戶輸入"書名"的輸入框控件self.title_entry = tk.Entry(self.master)self.title_entry.pack()# 創建一個輸入框并顯示"作者"tk.Label(self.master, text="作者:").pack()# 創建供用戶輸入"作者"的輸入框控件self.author_entry = tk.Entry(self.master)self.author_entry.pack()# 創建一個輸入框并顯示"國際標準書號"tk.Label(self.master, text="ISBN(國際標準書號):").pack()# 創建供用戶輸入"國際標準書號"的輸入框控件self.isbn_entry = tk.Entry(self.master)self.isbn_entry.pack()# 創建按鈕,text設置按鈕上顯示文本,command指定按鈕被點擊時執行的函數(命令),pack()方法把按鈕添加到窗口#四個按鈕分別是添加,刪除,修改書籍和書籍清單,前三個居中,書籍清單按鈕放置左邊tk.Wtk.Button(self.master, text="添加書籍", command=self.add_book).pack()tk.Button(self.master, text="刪除書籍", command=self.remove_book).pack()tk.Button(self.master, text="修改書籍", command=self.update_book).pack()tk.Button(self.master, text="書籍清單:", command=self.refresh_list).pack(anchor=tk.W)# 創建列表框,放置書籍,寬125,高11,也可適當調整,都行self.listbox = Listbox(self.master, width=125, height=11)self.listbox.pack()#刷新書籍清單(自定義方法)self.refresh_list()#添加書籍(方法)def add_book(self):#從tk.Entry控件獲取對應文本,get()方法讀取文本title = self.title_entry.get()author = self.author_entry.get()isbn = self.isbn_entry.get()#如果書名,作者,國際標準書號均非空if title and author and isbn:#調用Book()方法添加書籍new_book = Book(title, author, isbn)#是否添加成功if self.library.add_book(new_book):#成功時輸出"書籍添加成功"messagebox.showinfo("成功", "書籍添加成功!")#刷新書籍清單self.refresh_list()#清除輸入框中的文本,讓用戶多次輸入self.clear_entries()#添加失敗并打印"書籍添加失敗"else:messagebox.showerror("錯誤", "書籍添加失敗")#提供的信息不完整else:messagebox.showwarning("提示", "信息不完整,還需完善")#刪除書籍(方法),用國際標準書號來檢索def remove_book(self):#傳值,國際標準書號isbn = self.isbn_entry.get()#如果輸入的isbn非空if isbn:#調用圖書館里刪除書籍的方法if self.library.remove_book(isbn):messagebox.showinfo("成功", "刪除書籍成功!")#刷新書籍清單self.refresh_list()#清除輸入框中的文本,讓用戶多次輸入self.clear_entries()#調用方法卻找不到對應書籍else:messagebox.showerror("失敗", "未找到對應書籍。")#輸入的isbn碼為空else:messagebox.showwarning("提示", "需要提供ISBN碼")#修改書籍(方法),用國際標準書號檢索def update_book(self):#傳值,國際標準書號,新書名,新作者isbn = self.isbn_entry.get()new_title = self.title_entry.get()new_author = self.author_entry.get()#如果isbn碼非空if isbn:#調用圖書館修改書籍方法()if self.library.update_book(isbn, new_title, new_author):#調用修改書籍方法messagebox.showinfo("成功", "書籍修改成功!")#刷新書籍清單self.refresh_list()#清除輸入框的文本,讓用戶多次輸入self.clear_entries()#調用失敗,找不到書籍else:messagebox.showerror("失敗", "未找到對應書籍")else:messagebox.showwarning("提示", "需要提供ISBN碼")#刷新清單(方法)def refresh_list(self):#從控件中刪除所有項目self.listbox.delete(0, tk.END)#遍歷圖書館中的書籍for book in self.library.books:#把書籍嵌入清單self.listbox.insert(tk.END, str(book))#清空輸入框文本(方法),讓用戶多次輸入def clear_entries(self):#分別刪除書名,作者,isbn控件中(輸入)項目的self.title_entry.delete(0, tk.END)self.author_entry.delete(0, tk.END)self.isbn_entry.delete(0, tk.END)# 主函數
def main():#創建窗口對象root = tk.Tk()#窗口標題root.title("圖書館書籍管理應用程序")#調用圖書館應用程序類app = LibraryApp(root, "啊阿貍不會拉桿", "2826848766")#窗口程序主循環,使窗口停留root.mainloop()if __name__ == "__main__":main()
總結
? ? ?通過這兩個項目,我們不僅學會了如何使用Python進行數據可視化和圖形用戶界面開發,還掌握了數據分析和應用程序設計的基本思路。無論是水資源數據的可視化分析,還是圖書館書籍管理的應用開發,Python都能提供強大的工具支持。
希望大家能從這兩個項目中獲得啟發,嘗試用自己的數據和創意開發更多有趣的應用!如果有任何問題或建議,歡迎在評論區留言交流!資源綁定附上完整資料供讀者參考學習!