網站首頁 編程語言 正文
基于python的tkinter,將圖書管理系統的界面進行簡單的開發,我在這里使用的方法比較簡單理解,但是代碼過于繁多。添加、刪除及修改并未使用數據庫,而是使用了csv文件的讀取操作,從而替代數據庫。
基本效果如下圖所示:
該系統將所有代碼全都放在一個文件中,源碼如下:
import os import tkinter import tkinter.messagebox from tkinter import * from tkinter import ttk ? class LoginPage (object): ? ? def __init__(self, master=None):? ? ? ? ? self.root = master #定義內部變量root? ? ? ? ? # 獲取當前屏幕的寬高 ? ? ? ? self.width = self.root.winfo_screenwidth() ? ? ? ? self.height = self.root.winfo_screenheight() ? ? ? ? # 設置窗口大小 ? ? ? ? self.h = 600 ? ? ? ? self.w = 800 ? ? ? ? # 將窗口居中 ? ? ? ? self.y = (self.height - 600) / 2 ? ? ? ? self.x = (self.width - 800) / 2 ? ? ? ? self.root.geometry("%dx%d+%d+%d" %(self.w,self.h,self.x,self.y)) ? ? ? ? # 不允許修改窗口大小 ? ? ? ? self.root.resizable(False,False) ? ? ? ? self.addnum = StringVar()? ? ? ? ? self.addname = StringVar()? ? ? ? ? self.addauthor = StringVar()? ? ? ? ? self.addchu = StringVar()? ? ? ? ? self.adddate = StringVar()? ? ? ? ? self.addpri = StringVar()? ? ? ? ? self.altnum = StringVar()? ? ? ? ? self.altname = StringVar()? ? ? ? ? self.altauthor = StringVar()? ? ? ? ? self.altchu = StringVar()? ? ? ? ? self.altdate = StringVar()? ? ? ? ? self.altpri = StringVar()? ? ? ? ? self.createPage()? ? ? ? # 創建頁面 ? ? def createPage(self):? ? ? ? ? #表格 ? ? ? ? tree = ttk.Treeview(self.root) ? ? ? ? tree.place(x=10,y=10,width=780,height=260) ? ? ? ? # #定義列 ? ? ? ? tree["columns"] = ("編號","書名","作者", "出版社", "出版日期", "價格") ? ? ? ? tree['show'] = 'headings' ? ? ? ? # 設置列,列還不顯示 ? ? ? ? tree.column("編號", width=80,anchor ='c') ? ? ? ? tree.column("書名", width=150,anchor ='c') ? ? ? ? tree.column("作者", width=150,anchor ='c') ? ? ? ? tree.column("出版社", width=150,anchor ='c') ? ? ? ? tree.column("出版日期", width=150,anchor ='c') ? ? ? ? tree.column("價格", width=100,anchor ='c') ? ? ? ? #設置表頭 ? ? ? ? tree.heading("編號", text="編號") ? ? ? ? tree.heading("書名", text="書名") ? ? ? ? tree.heading("作者", text="作者") ? ? ? ? tree.heading("出版社", text="出版社") ? ? ? ? tree.heading("出版日期", text="出版日期") ? ? ? ? tree.heading("價格", text="價格") ? ? ? ? #添加數據 ? ? ? ? f = open('圖書.csv','r',encoding='utf-8') ? ? ? ? for line in f.readlines(): ? ? ? ? ? ? info = line[:-1].split(",") ? ? ? ? ? ? tree.insert("", 0, values=(info[0],info[1],info[2],info[3],info[4],info[5])) ? ? ? ? f.close() ? ? ? ? ? # 添加編號 ? ? ? ? addnum = Label(self.root, text="編號",font=('微軟雅黑',10,''),anchor='w') ? ? ? ? addnum.place(x=42.5,y=280,height=20,width=80) ? ? ? ? addnuminput = Entry(self.root,font=('微軟雅黑',10,''),textvariable=self.addnum) ? ? ? ? addnuminput.place(x=122.5,y=279,height=24,width=105) ? ? ? ? # 添加書名 ? ? ? ? addname = Label(self.root, text="書名",font=('微軟雅黑',10,''),anchor='w') ? ? ? ? addname.place(x=42.5,y=310,height=20,width=80) ? ? ? ? addnameinput = Entry(self.root,font=('微軟雅黑',10,''),textvariable=self.addname) ? ? ? ? addnameinput.place(x=122.5,y=309,height=24,width=105) ? ? ? ? # 添加作者 ? ? ? ? addauthor = Label(self.root, text="作者",font=('微軟雅黑',10,''),anchor='w') ? ? ? ? addauthor.place(x=42.5,y=340,height=20,width=80) ? ? ? ? addauthorinput = Entry(self.root,font=('微軟雅黑',10,''),textvariable=self.addauthor) ? ? ? ? addauthorinput.place(x=122.5,y=339,height=24,width=105) ? ? ? ? # 添加出版社 ? ? ? ? addchu = Label(self.root, text="出版社",font=('微軟雅黑',10,''),anchor='w') ? ? ? ? addchu.place(x=42.5,y=370,height=20,width=80) ? ? ? ? addchuinput = Entry(self.root,font=('微軟雅黑',10,''),textvariable=self.addchu) ? ? ? ? addchuinput.place(x=122.5,y=369,height=24,width=105) ? ? ? ? # 添加出版日期 ? ? ? ? adddate = Label(self.root, text="出版日期",font=('微軟雅黑',10,''),anchor='w') ? ? ? ? adddate.place(x=42.5,y=400,height=20,width=80) ? ? ? ? adddateinput = Entry(self.root,font=('微軟雅黑',10,''),textvariable=self.adddate) ? ? ? ? adddateinput.place(x=122.5,y=399,height=24,width=105) ? ? ? ? # 添加價格 ? ? ? ? addpri = Label(self.root, text="價格",font=('微軟雅黑',10,''),anchor='w') ? ? ? ? addpri.place(x=42.5,y=430,height=20,width=80) ? ? ? ? addpriinput = Entry(self.root,font=('微軟雅黑',10,''),textvariable=self.addpri) ? ? ? ? addpriinput.place(x=122.5,y=429,height=24,width=105) ? ? ? ? # 添加按鈕 ? ? ? ? add = Button(self.root,command=self.click, text ="添加書本",font=('微軟雅黑',10,''),activeforeground='#ffffff',fg='#ffffff',activebackground='#7cba59',bd=2,bg='#2aa515') ? ? ? ? add.place(x=105,y=500,height=35,width=100) ? ? ? ? ? ? # 修改編號 ? ? ? ? altnum = Label(self.root, text="編號",font=('微軟雅黑',10,''),anchor='w') ? ? ? ? altnum.place(x=292.5,y=280,height=20,width=80) ? ? ? ? altnuminput = Entry(self.root,font=('微軟雅黑',10,''),textvariable=self.altnum) ? ? ? ? altnuminput.place(x=372.5,y=279,height=24,width=105) ? ? ? ? # 修改書名 ? ? ? ? altname = Label(self.root, text="書名",font=('微軟雅黑',10,''),anchor='w') ? ? ? ? altname.place(x=292.5,y=310,height=20,width=80) ? ? ? ? altnameinput = Entry(self.root,font=('微軟雅黑',10,''),textvariable=self.altname) ? ? ? ? altnameinput.place(x=372.5,y=309,height=24,width=105) ? ? ? ? # 修改作者 ? ? ? ? altauthor = Label(self.root, text="作者",font=('微軟雅黑',10,''),anchor='w') ? ? ? ? altauthor.place(x=292.5,y=340,height=20,width=80) ? ? ? ? altauthorinput = Entry(self.root,font=('微軟雅黑',10,''),textvariable=self.altauthor) ? ? ? ? altauthorinput.place(x=372.5,y=339,height=24,width=105) ? ? ? ? # 修改出版社 ? ? ? ? altchu = Label(self.root, text="出版社",font=('微軟雅黑',10,''),anchor='w') ? ? ? ? altchu.place(x=292.5,y=370,height=20,width=80) ? ? ? ? altchuinput = Entry(self.root,font=('微軟雅黑',10,''),textvariable=self.altchu) ? ? ? ? altchuinput.place(x=372.5,y=369,height=24,width=105) ? ? ? ? # 修改出版日期 ? ? ? ? altdate = Label(self.root, text="出版日期",font=('微軟雅黑',10,''),anchor='w') ? ? ? ? altdate.place(x=292.5,y=400,height=20,width=80) ? ? ? ? altdateinput = Entry(self.root,font=('微軟雅黑',10,''),textvariable=self.altdate) ? ? ? ? altdateinput.place(x=372.5,y=399,height=24,width=105) ? ? ? ? # 修改價格 ? ? ? ? altpri = Label(self.root, text="價格",font=('微軟雅黑',10,''),anchor='w') ? ? ? ? altpri.place(x=292.5,y=430,height=20,width=80) ? ? ? ? altpriinput = Entry(self.root,font=('微軟雅黑',10,''),textvariable=self.altpri) ? ? ? ? altpriinput.place(x=372.5,y=429,height=24,width=105) ? ? ? ? # 修改按鈕 ? ? ? ? alter = Button(self.root,command=self.altclick, text ="修改書本",font=('微軟雅黑',10,''),activeforeground='#ffffff',fg='#ffffff',activebackground='#7cba59',bd=2,bg='#2aa515') ? ? ? ? alter.place(x=350,y=500,height=35,width=100) ? ? ? ? # 保存按鈕 ? ? ? ? pre = Button(self.root,command=self.show, text ="保存書本信息",font=('微軟雅黑',10,''),activeforeground='#ffffff',fg='#ffffff',activebackground='#7cba59',bd=2,bg='#2aa515') ? ? ? ? pre.place(x=595,y=500,height=35,width=100) ? ? ? # 寫入判斷輸入框是否有空值 ? ? def Isspace(self,text): ? ? ? ? temp = 0 ? ? ? ? for i in text: ? ? ? ? ? ?if not i.isspace(): ? ? ? ? ? ? ? ?temp = 1 ? ? ? ? ? ? ? ?break ? ? ? ? if temp==1: ? ? ? ? ? ? return 0 ? ? ? ? else: ? ? ? ? ? ? return 1 ? ? # 檢查寫入是否有空值 ? ? def click(self): ? ? ? ? addnum = self.addnum.get() ? ? ? ? addname = self.addname.get() ? ? ? ? addauthor = self.addauthor.get() ? ? ? ? addchu = self.addchu.get() ? ? ? ? adddate = self.adddate.get() ? ? ? ? addpri = self.addpri.get() ? ? ? ? if self.Isspace(addnum) or self.Isspace(addname) or self.Isspace(addauthor) or self.Isspace(addchu) or self.Isspace(adddate) or self.Isspace(addpri) : ? ? ? ? ? ? tkinter.messagebox.showerror(title='提示', message ="請填寫所有信息") ? ? ? ? else: ? ? ? ? ? ? self.write(addnum,addname,addauthor,addchu,adddate,addpri) ? ? # 寫入信息 ? ? def write(self,addnum,addname,addauthor,addchu,adddate,addpri): ? ? ? ? f = open('圖書.csv','r',encoding='utf-8') ? ? ? ? for line in f.readlines(): ? ? ? ? ? ? info = line[:-1].split(",") ? ? ? ? ? ? if len(info)<6: ? ? ? ? ? ? ? ? break ? ? ? ? ? ? if info[0] ==addnum and info[1] ==addname: ? ? ? ? ? ? ? ? ?tkinter.messagebox.showinfo(title='結果', message ="已存在該圖書信息!") ? ? ? ? ? ? ? ? ?f.close() ? ? ? ? ? ? ? ? ?return ? ? ? ? ? f.close() ? ? ? ? f = open('圖書.csv','a',encoding='utf-8') ? ? ? ? f.write('{},{},{},{},{},{}\n'.format(addnum,addname,addauthor,addchu,adddate,addpri)) ? ? ? ? f.close() ? ? ? ? tkinter.messagebox.showinfo(title='提示', message ="寫入成功,點擊保存后更新") ? ? ? # 檢查修改信息是否空白 ? ? def altclick(self): ? ? ? ? altnum = self.altnum.get() ? ? ? ? altname = self.altname.get() ? ? ? ? altauthor = self.altauthor.get() ? ? ? ? altchu = self.altchu.get() ? ? ? ? altdate = self.altdate.get() ? ? ? ? altpri = self.altpri.get() ? ? ? ? if self.Isspace(altnum) or self.Isspace(altname) or self.Isspace(altauthor) or self.Isspace(altchu) or self.Isspace(altdate) or self.Isspace(altpri) : ? ? ? ? ? ? tkinter.messagebox.showerror(title='提示', message ="輸入項為空") ? ? ? ? else: ? ? ? ? ? ? self.modify(altnum,altname,altauthor,altchu,altdate,altpri) ? ? ? # 修改信息 ? ? def modify(self,altnum,altname,altauthor,altchu,altdate,altpri): ? ? ? ? temp = 0 ? ? ? ? with open("圖書.csv","r",encoding="utf-8") as f: ? ? ? ? ? ? lines = f.readlines() ? ? ? ? ? ? with open("圖書.csv","w",encoding="utf-8") as f_w: ? ? ? ? ? ? for line in lines: ? ? ? ? ? ? ? ? info = line[:-1].split(",") ? ? ? ? ? ? ? ? if info[0] ==altnum: ? ? ? ? ? ? ? ? ? ? temp = 1 ? ? ? ? ? ? ? ? ? ? f_w.write('{},{},{},{},{},{}\n'.format(altnum,altname,altauthor,altchu,altdate,altpri)) ? ? ? ? ? ? ? ? ? ? continue ? ? ? ? ? ? ? ? f_w.write(line) ? ? ? ? if temp==0: ? ? ? ? ? ? tkinter.messagebox.showerror(title='提示', message ="沒有該信息") ? ? ? ? else: ? ? ? ? ? ? tkinter.messagebox.showinfo(title='提示', message ="修改成功,點擊保存后更新") ? ? # 保存信息并顯示 ? ? def show(self): ? ? ? ? self.createPage()? root = Tk()? root.title('圖書管理')? LoginPage(root)? root.mainloop()?
在運行代碼前需要在同級文件夾下創建一個名為“圖書”的csv文件,如下圖所示:
原文鏈接:https://blog.csdn.net/weixin_46221428/article/details/121915578
相關推薦
- 2022-12-04 在python?list中篩選包含字符的字段方式_python
- 2022-03-15 使用jib-maven-plugin插件打包docker鏡像上傳到私有鏡像庫,為了賬戶安全,需要設置
- 2022-05-08 C#使用Unity實現IOC_實用技巧
- 2023-10-26 解決問題:NODE_ENV 不是內部或外部命令,也不是可運行的程序,或者批處理文件
- 2022-10-28 go語言?nil使用避坑指南_Golang
- 2022-04-28 shell命令返回值判斷的方法實現_linux shell
- 2022-07-26 Android自定義評分控件的完整實例_Android
- 2021-12-10 C#實現簡易灰度圖和酷炫HeatMap熱力圖winform(附DEMO)_C#教程
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支