1+ from tkinter import *
2+ from .database import database as db
3+ '''
4+ 提前安装好模块:pip install tkinter-page
5+ 需要掌握的知识:Python基础、Mysql命令、os模块、tkinter模块
6+ '''
7+ class Book ():
8+ def __init__ (self , name , author , comment , state ):
9+ self .name = name
10+ self .author = author
11+ self .comment = comment
12+ self .state = state
13+ def __str__ (self ):
14+ return '\n 名称:《%s》 \n 作者:%s \n 推荐语:%s\n 状态:%s \n ---------' % (self .name , self .author , self .comment ,self .state )
15+ 16+ class StrayLibrary ():
17+ books = []
18+ def __init__ (self ,init_window_name ):
19+ self .init_window_name = init_window_name
20+ results = db .checkmysql ()
21+ for row in results :
22+ name = row [0 ]
23+ author = row [1 ]
24+ comment = row [2 ]
25+ state = row [3 ]
26+ book1 = Book (name , author , comment , state )
27+ self .books .append (book1 )
28+ 29+ def set_init_window (self ):#设置窗口
30+ self .init_window_name .title ("流浪图书馆(StrayLibrary)" ) #窗口名
31+ self .init_window_name .geometry ('450x260+10+10' )
32+ self .result_data_Text = Text (self .init_window_name , width = 35 , height = 15 ) #处理结果展示
33+ self .result_data_Text .grid (row = 1 , column = 12 , rowspan = 7 , columnspan = 7 )
34+ 35+ self .mianbutton1 = Button (self .init_window_name , text = "查询(check)" , bg = "DodgerBlue" , width = 20 ,command = self .show_all_book ) # 调用内部方法 加()为直接调用
36+ self .mianbutton2 = Button (self .init_window_name , text = "添加(add)" , bg = "DodgerBlue" ,width = 20 ,command = self .add_book ) # 调用内部方法 加()为直接调用
37+ self .mianbutton3 = Button (self .init_window_name , text = "借阅(lend)" , bg = "DodgerBlue" , width = 20 ,command = self .lend_book ) # 调用内部方法 加()为直接调用
38+ self .mianbutton4 = Button (self .init_window_name , text = "归还(return)" , bg = "DodgerBlue" ,width = 20 ,command = self .return_book ) # 调用内部方法 加()为直接调用
39+ self .mianbutton1 .grid (row = 1 , column = 11 )
40+ self .mianbutton2 .grid (row = 3 , column = 11 )
41+ self .mianbutton3 .grid (row = 5 , column = 11 )
42+ self .mianbutton4 .grid (row = 7 , column = 11 )
43+ 44+ #功能函数
45+ def show_all_book (self ):
46+ self .result_data_Text .delete (0.0 ,END )
47+ for book in self .books :
48+ self .result_data_Text .insert (1.0 ,book )
49+ def add_book (self ):
50+ top = Tk ()
51+ top .title ("添加(add)" )
52+ top .geometry ('300x120+450+10' )
53+ self .L1 = Label (top , text = "请输入书籍名称:" )
54+ self .E1 = Entry (top , bd = 5 )
55+ self .L2 = Label (top , text = "请输入作者名称:" )
56+ self .E2 = Entry (top , bd = 5 )
57+ self .L3 = Label (top , text = "请输入书籍推荐语:" )
58+ self .E3 = Entry (top , bd = 5 )
59+ self .L1 .place (x = 0 ,y = 0 )
60+ self .L2 .place (x = 0 ,y = 30 )
61+ self .L3 .place (x = 0 ,y = 60 )
62+ self .E1 .place (x = 120 ,y = 0 )
63+ self .E2 .place (x = 120 ,y = 30 )
64+ self .E3 .place (x = 120 ,y = 60 )
65+ self .B = Button (top , text = "输入完毕请点击确认,无需继续输入请关闭窗口" , command = self .add_booking )
66+ self .B .pack (side = BOTTOM )
67+ def add_booking (self ):
68+ new_name = self .E1 .get ()
69+ new_author = self .E2 .get ()
70+ new_comment = self .E3 .get ()
71+ self .result_data_Text .delete (0.0 ,END )
72+ new_book = Book (new_name , new_author , new_comment ,'未借出' )
73+ self .books .append (new_book )
74+ db .addmysql (new_name , new_author , new_comment ,'未借出' )#写入数据库
75+ self .result_data_Text .insert (1.0 ,new_name + '录入成功!\n ' )
76+ 77+ def check_book (self ,name ):
78+ for book in self .books :
79+ if book .name == name :
80+ return book
81+ else :
82+ return None
83+ 84+ def lend_book (self ):
85+ toplend = Tk ()
86+ toplend .title ("借阅(lend)" )
87+ toplend .geometry ('330x50+450+30' )
88+ self .lendE1 = Entry (toplend , bd = 5 )
89+ self .lendE1 .pack (side = RIGHT )
90+ self .lendB1 = Button (toplend , text = "输入书名,输入完毕请点击" , command = self .lend_booking )
91+ self .lendB1 .pack (side = LEFT )
92+ 93+ def lend_booking (self ):
94+ name = self .lendE1 .get ()
95+ res = self .check_book (name )
96+ self .result_data_Text .delete (0.0 ,END )
97+ if res != None :
98+ if res .state == '已借出' :
99+ self .result_data_Text .insert (1.0 ,'你来晚了一步,这本书已经被借走了噢' )
100+ else :
101+ res .state = '已借出'
102+ db .changemysql ('已借出' ,res .name )
103+ self .result_data_Text .insert (1.0 ,'借阅成功,借了不看会变胖噢〜' )
104+ else :
105+ self .result_data_Text .insert (1.0 ,'这本书暂时没有收录在系统里呢' )
106+ 107+ def return_book (self ):
108+ topreturn = Tk ()
109+ topreturn .title ("归还(return)" )
110+ topreturn .geometry ('330x50+450+30' )
111+ self .returnE1 = Entry (topreturn , bd = 5 )
112+ self .returnE1 .pack (side = RIGHT )
113+ self .returnB1 = Button (topreturn , text = "输入书名,完毕请点击" , command = self .return_booking )
114+ self .returnB1 .pack (side = LEFT )
115+ 116+ def return_booking (self ):
117+ name = self .returnE1 .get ()
118+ res = self .check_book (name )# 调用check_book方法,将返回值赋值给变量res
119+ self .result_data_Text .delete (0.0 ,END )
120+ if res == None :# 如果返回的是空值,即这本书的书名不在系统里
121+ self .result_data_Text .insert (1.0 ,'没有这本书噢,你恐怕输错了书名〜' )
122+ else :# 如果返回的是实例对象
123+ if res .state == '未借出' :# 如果实例属性state等于0,即这本书的借阅状态为'未借出'
124+ self .result_data_Text .insert (1.0 ,'这本书没有被借走,在等待有缘人的垂青呢!' )
125+ else : # 如果实例属性state等于1,即状态为'已借出'
126+ self .result_data_Text .insert (1.0 ,'归还成功!' )
127+ res .state = '未借出' # 归还后书籍借阅状态为0,重置为'未借出'
128+ db .changemysql ('未借出' ,res .name )
129+ 130+ def gui_start ():
131+ init_window = Tk () #实例化出一个父窗口
132+ ZMJ_PORTAL = StrayLibrary (init_window ) # 设置根窗口默认属性
133+ ZMJ_PORTAL .set_init_window ()
134+ init_window .mainloop () #父窗口进入事件循环,可以理解为保持窗口运行,否则界面不展示
0 commit comments