图书数据库操作界面升级

今年年初,我写了一篇名为《图书管理库以及操作界面》的文章(链接:http://blog.csdn.net/qq_32897527/article/details/50493313),但是由于技术问题,导致程序不是很优化,界面也不是很友好。最近得空稍微研究了下,对界面进行了升级。


1、使用表格进行数据项显示

升级前 升级后

#coding:gbk
import wx,sqlite3
import wx.lib.sheet as sheet

class find(wx.Frame):
    def load(self,event):
        conn=sqlite3.connect("F:\\Python\My Program\library_system\library.db")
        conn.cursor()
        rel = conn.execute('SELECT * FROM library')
        re = rel.fetchall()
        
        if self.s.GetValue().encode('gbk') == '按书名':
            t=[]
            for i in re:
                if i[1] == self.t.GetValue():
                    t.append(i)
            rows = len(t)
            self.cs.SetNumberRows(rows)
            for row in range(rows):
                self.cs.SetRowLabelValue(row,'%d'%t[row][0])
                for col in range(4):
                    self.cs.SetCellValue(row,col,t[row][col+1])
            dial = wx.MessageDialog(None,'共有%d个结果'%rows,'结果',wx.YES_NO)
            dial.ShowModal()

        if self.s.GetValue().encode('gbk') == '按出版社':
            t=[]
            for i in re:
                if i[2] == self.t.GetValue():
                    t.append(i)
            rows = len(t)
            self.cs.SetNumberRows(rows)
            for row in range(rows):
                self.cs.SetRowLabelValue(row,'%d'%t[row][0])
                for col in range(4):
                    self.cs.SetCellValue(row,col,t[row][col+1])
            dial = wx.MessageDialog(None,'共有%d个结果'%rows,'结果',wx.YES_NO)
            dial.ShowModal()

        if self.s.GetValue().encode('gbk') == '按价格':
            t=[]
            for i in re:
                if i[3] == self.t.GetValue():
                    t.append(i)
            rows = len(t)
            self.cs.SetNumberRows(rows)
            for row in range(rows):
                self.cs.SetRowLabelValue(row,'%d'%t[row][0])
                for col in range(4):
                    self.cs.SetCellValue(row,col,t[row][col+1])
            dial = wx.MessageDialog(None,'共有%d个结果'%rows,'结果',wx.YES_NO)
            dial.ShowModal()

        if self.s.GetValue().encode('gbk') == '按分类':           
            t=[]
            for i in re:
                if i[4] == self.t.GetValue():
                    t.append(i)
            rows = len(t)
            self.cs.SetNumberRows(rows)
            for row in range(rows):
                self.cs.SetRowLabelValue(row,'%d'%t[row][0])
                for col in range(4):
                    self.cs.SetCellValue(row,col,t[row][col+1])
            dial = wx.MessageDialog(None,'共有%d个结果'%rows,'结果',wx.YES_NO)
            dial.ShowModal()

        if self.s.GetValue().encode('gbk') == '查询全部':
            t = re
            rows = len(t)
            self.cs.SetNumberRows(rows)
            for row in range(rows):
                self.cs.SetRowLabelValue(row,'%d'%t[row][0])
                for col in range(4):
                    self.cs.SetCellValue(row,col,t[row][col+1])
            dial = wx.MessageDialog(None,'共有%d个结果'%rows,'结果',wx.YES_NO)
            dial.ShowModal()

        if self.s.GetValue().encode('gbk') == '选择查询项':
            dial = wx.MessageDialog(None,'请选择查询项','结果',wx.YES_NO)
            dial.ShowModal()

    def __init__(self):
        wx.Frame.__init__(self, None, -1, title='查询数据',
                pos=(390,200),size=(410, 400),style=wx.CAPTION | wx.CLOSE_BOX)
        panel = wx.Panel(self)
        panel.SetBackgroundColour('white')

        self.s = wx.ComboBox(panel,value='选择查询项',
                choices=['按书名','按出版社','按价格','按分类','查询全部'],pos=(20,10),size=(100,20))
        self.t = wx.TextCtrl(panel,pos=(130,10),size=(185,20))

        self.cs = sheet.CSheet(panel)
        self.cs.SetLabelBackgroundColour('white')
        self.cs.SetNumberCols(4)
        self.cs.SetNumberRows(0)
        self.cs.SetSize((360,320))
        self.cs.SetPosition((20,40))
        column = ['书名','出版社','价格','类别']
        for col in range(4):
            self.cs.SetColLabelValue(col,column[col])

        btn=wx.Button(panel,label="查询",pos=(325,10),size=(50,20))
        btn.Bind(wx.EVT_BUTTON,self.load)

if __name__ == '__main__':
    app = wx.App()
    find().Show()
    app.MainLoop()
主要使用wx.lib.sheet库创建表格


2、用notebook将find、insert、delete三个程序合并到一起

原先的是find、insert、delete三个程序进行三个不同的操作,但是这样太过麻烦。所以使用notebook可以实现一个程序实现三个操作。


#coding:gbk
import wx,sqlite3

class find(wx.Panel):
    def load(self,event):
        conn=sqlite3.connect("F:\\Python\My Program\library_system\library.db")
        conn.cursor()
        rel = conn.execute('SELECT * FROM library')
        t = 0
        h = 40
        if self.x > 0:
            for i in range(self.x):
                h1 = 60 + 20*i
                wx.StaticText(self, -1,'                           ',(20,h1))
                wx.StaticText(self, -1,'                           ',(40,h1))
                wx.StaticText(self, -1,'                           ',(120,h1))
                wx.StaticText(self, -1,'                           ',(220,h1))
                wx.StaticText(self, -1,'                           ',(260,h1))

        if self.s.GetValue().encode('gbk') == '按书名':
            for i in rel.fetchall():
                if i[1] == self.t.GetValue():
                    t = t + 1
                    h = h + 20
                    id = '%d' %i[0]
                    name = i[1].encode('gbk')
                    pub = i[2].encode('gbk')
                    price = i[3].encode('gbk')
                    type = i[4].encode('gbk')
                    wx.StaticText(self, -1,id,(20,h))
                    wx.StaticText(self, -1,name,(40,h))
                    wx.StaticText(self, -1,pub,(120,h))
                    wx.StaticText(self, -1,price,(220,h))
                    wx.StaticText(self, -1,type,(260,h))
            dial = wx.MessageDialog(None,'共有%d个结果'%t,'结果',wx.YES_NO)
            dial.ShowModal()
            self.x = t

        if self.s.GetValue().encode('gbk') == '按出版社':
            for i in rel.fetchall():
                if i[2] == self.t.GetValue():
                    t = t + 1
                    h = h + 20
                    id = '%d' %i[0]
                    name = i[1].encode('gbk')
                    pub = i[2].encode('gbk')
                    price = i[3].encode('gbk')
                    type = i[4].encode('gbk')
                    wx.StaticText(self, -1,id,(20,h))
                    wx.StaticText(self, -1,name,(40,h))
                    wx.StaticText(self, -1,pub,(120,h))
                    wx.StaticText(self, -1,price,(220,h))
                    wx.StaticText(self, -1,type,(260,h))
            dial = wx.MessageDialog(None,'共有%d个结果'%t,'结果',wx.YES_NO)
            dial.ShowModal()
            self.x = t

        if self.s.GetValue().encode('gbk') == '按价格':
            for i in rel.fetchall():
                if i[3] == self.t.GetValue():
                    t = t + 1
                    h = h + 20
                    id = '%d' %i[0]
                    name = i[1].encode('gbk')
                    pub = i[2].encode('gbk')
                    price = i[3].encode('gbk')
                    type = i[4].encode('gbk')
                    wx.StaticText(self, -1,id,(20,h))
                    wx.StaticText(self, -1,name,(40,h))
                    wx.StaticText(self, -1,pub,(120,h))
                    wx.StaticText(self, -1,price,(220,h))
                    wx.StaticText(self, -1,type,(260,h))
            dial = wx.MessageDialog(None,'共有%d个结果'%t,'结果',wx.YES_NO)
            dial.ShowModal()
            self.x = t

        if self.s.GetValue().encode('gbk') == '按分类':
            for i in rel.fetchall():
                if i[4] == self.t.GetValue():
                    t = t + 1
                    h = h + 20
                    id = '%d' %i[0]
                    name = i[1].encode('gbk')
                    pub = i[2].encode('gbk')
                    price = i[3].encode('gbk')
                    type = i[4].encode('gbk')
                    wx.StaticText(self, -1,id,(20,h))
                    wx.StaticText(self, -1,name,(40,h))
                    wx.StaticText(self, -1,pub,(120,h))
                    wx.StaticText(self, -1,price,(220,h))
                    wx.StaticText(self, -1,type,(260,h))
            dial = wx.MessageDialog(None,'共有%d个结果'%t,'结果',wx.YES_NO)
            dial.ShowModal()
            self.x = t

        if self.s.GetValue().encode('gbk') == '查询全部':
            for i in rel.fetchall():
                t = t + 1
                h = h + 20
                id = '%d' %i[0]
                name = i[1].encode('gbk')
                pub = i[2].encode('gbk')
                price = i[3].encode('gbk')
                type = i[4].encode('gbk')
                wx.StaticText(self, -1,id,(20,h))
                wx.StaticText(self, -1,name,(40,h))
                wx.StaticText(self, -1,pub,(120,h))
                wx.StaticText(self, -1,price,(220,h))
                wx.StaticText(self, -1,type,(260,h))
            dial = wx.MessageDialog(None,'共有%d个结果'%t,'结果',wx.YES_NO)
            dial.ShowModal()
            self.x = t

        if self.s.GetValue().encode('gbk') == '选择查询项':
            dial = wx.MessageDialog(None,'请选择查询项','结果',wx.YES_NO)
            dial.ShowModal()

    def __init__(self,parent):
        wx.Panel.__init__(self,parent)

        self.s = wx.ComboBox(self,value='选择查询项',
                choices=['按书名','按出版社','按价格','按分类','查询全部'],pos=(20,10),size=(100,20))
        self.t = wx.TextCtrl(self
                             ,pos=(130,10),size=(100,20))
        self.x = 0

        wx.StaticText(self, -1, "id",(20,40))
        wx.StaticText(self, -1, "书名",(40,40))
        wx.StaticText(self, -1, "出版社",(120,40))
        wx.StaticText(self, -1, "价格",(220,40))
        wx.StaticText(self, -1, "类别",(260,40))

        btn=wx.Button(self,label="查询",pos=(240,10),size=(50,20))
        btn.Bind(wx.EVT_BUTTON,self.load)

class insert(wx.Panel):
    def load(self,event):
        conn=sqlite3.connect("F:\\Python\My Program\library_system\library.db")
        conn.cursor()
        n1=self.t1.GetValue()
        n2=self.t2.GetValue()
        n3=self.t3.GetValue()
        n4=self.t4.GetValue()
        s=[n1,n2,n3,n4]
        conn.execute("insert into library(name,pub,price,type) values(?,?,?,?)",s)
        conn.commit()
        dial = wx.MessageDialog(None,'成功插入数据!','结果',wx.YES_NO)
        dial.ShowModal()

    def __init__(self,parent):
        wx.Panel.__init__(self,parent)

        st1 = wx.StaticText(self, -1, "请输入书名:",(20,10))
        st2 = wx.StaticText(self, -1, "请输入出版社:",(20, 60))
        st3 = wx.StaticText(self, -1, "请输入价格:",(20, 110))
        st4 = wx.StaticText(self, -1, "请选择分类:",(20, 160))

        self.t1 = wx.TextCtrl(self,pos=(20,30),size=(100,20))
        self.t2 = wx.TextCtrl(self,pos=(20,80),size=(100,20))
        self.t3 = wx.TextCtrl(self,pos=(20,130),size=(100,20))
        self.t4 = wx.ComboBox(self,value='未选择',
                choices=['文学','理工科','计算机','外语','其他'],pos=(20,180),size=(100,20))

        btn=wx.Button(self,label="插入",pos=(20,210),size=(100,30))
        btn.Bind(wx.EVT_BUTTON,self.load)

class delete(wx.Panel):
    def load(self,event):
        conn=sqlite3.connect("F:\\Python\My Program\library_system\library.db")
        conn.cursor()
        n1=self.t1.GetValue()
        s=[n1]
        conn.execute('DELETE FROM library where name=?',s)
        conn.commit()
        dial = wx.MessageDialog(None,'成功删除数据!','结果',wx.YES_NO)
        dial.ShowModal()

    def __init__(self,parent):
        wx.Panel.__init__(self,parent)

        st1 = wx.StaticText(self, -1, "请输入要删除的书名:",(20,20))

        self.t1 = wx.TextCtrl(self,pos=(20,40),size=(150,20))

        btn=wx.Button(self,label="删除",pos=(20,70),size=(100,30))
        btn.Bind(wx.EVT_BUTTON,self.load)
        
if __name__ == '__main__':
    app = wx.App(False)
    frame = wx.Frame(None, title="图书管理")
    nb = wx.Notebook(frame)


    nb.AddPage(find(nb), "查找图书")
    nb.AddPage(insert(nb), "插入图书")
    nb.AddPage(delete(nb), "删除图书")

    frame.Show()
    app.MainLoop()

3、界面美化


#coding:gbk
import wx,sqlite3
import wx.lib.buttons as buttons
import wx.lib.sheet as sheet

class find(wx.Panel):
    def load(self,event):
        conn=sqlite3.connect("F:\\Python\My Program\library_system\library.db")
        conn.cursor()
        rel = conn.execute('SELECT * FROM library')
        re = rel.fetchall()
        
        if self.s.GetValue().encode('gbk') == '按书名':
            t=[]
            for i in re:
                if i[1] == self.t.GetValue():
                    t.append(i)
            rows = len(t)
            self.cs.SetNumberRows(rows)
            for row in range(rows):
                self.cs.SetRowLabelValue(row,'%d'%t[row][0])
                for col in range(4):
                    self.cs.SetCellValue(row,col,t[row][col+1])
            dial = wx.MessageDialog(None,'共有%d个结果'%rows,'结果',wx.YES_NO)
            dial.ShowModal()

        if self.s.GetValue().encode('gbk') == '按出版社':
            t=[]
            for i in re:
                if i[2] == self.t.GetValue():
                    t.append(i)
            rows = len(t)
            self.cs.SetNumberRows(rows)
            for row in range(rows):
                self.cs.SetRowLabelValue(row,'%d'%t[row][0])
                for col in range(4):
                    self.cs.SetCellValue(row,col,t[row][col+1])
            dial = wx.MessageDialog(None,'共有%d个结果'%rows,'结果',wx.YES_NO)
            dial.ShowModal()

        if self.s.GetValue().encode('gbk') == '按价格':
            t=[]
            for i in re:
                if i[3] == self.t.GetValue():
                    t.append(i)
            rows = len(t)
            self.cs.SetNumberRows(rows)
            for row in range(rows):
                self.cs.SetRowLabelValue(row,'%d'%t[row][0])
                for col in range(4):
                    self.cs.SetCellValue(row,col,t[row][col+1])
            dial = wx.MessageDialog(None,'共有%d个结果'%rows,'结果',wx.YES_NO)
            dial.ShowModal()

        if self.s.GetValue().encode('gbk') == '按分类':           
            t=[]
            for i in re:
                if i[4] == self.t.GetValue():
                    t.append(i)
            rows = len(t)
            self.cs.SetNumberRows(rows)
            for row in range(rows):
                self.cs.SetRowLabelValue(row,'%d'%t[row][0])
                for col in range(4):
                    self.cs.SetCellValue(row,col,t[row][col+1])
            dial = wx.MessageDialog(None,'共有%d个结果'%rows,'结果',wx.YES_NO)
            dial.ShowModal()

        if self.s.GetValue().encode('gbk') == '查询全部':
            t = re
            rows = len(t)
            self.cs.SetNumberRows(rows)
            for row in range(rows):
                self.cs.SetRowLabelValue(row,'%d'%t[row][0])
                for col in range(4):
                    self.cs.SetCellValue(row,col,t[row][col+1])
            dial = wx.MessageDialog(None,'共有%d个结果'%rows,'结果',wx.YES_NO)
            dial.ShowModal()

        if self.s.GetValue().encode('gbk') == '选择查询项':
            dial = wx.MessageDialog(None,'请选择查询项','结果',wx.YES_NO)
            dial.ShowModal()

    def __init__(self,parent):
        wx.Panel.__init__(self,parent)

        self.s = wx.ComboBox(self,value='选择查询项',
                choices=['按书名','按出版社','按价格','按分类','查询全部'],pos=(20,10),size=(100,20))
        self.t = wx.TextCtrl(self,pos=(130,10),size=(185,20))

        self.cs = sheet.CSheet(self)
        self.cs.SetLabelBackgroundColour('#ffffff')
        self.cs.SetNumberCols(4)
        self.cs.SetNumberRows(0)
        self.cs.SetSize((550,520))
        self.cs.SetPosition((20,40))
        column = ['书名','出版社','价格','类别']
        for col in range(4):
            self.cs.SetColLabelValue(col,column[col])

        btn=wx.Button(self,label="查询",pos=(325,10),size=(50,20))
        btn.Bind(wx.EVT_BUTTON,self.load)

class insert(wx.Panel):
    def load(self,event):
        conn=sqlite3.connect("F:\\Python\My Program\library_system\library.db")
        conn.cursor()
        n1=self.t1.GetValue()
        n2=self.t2.GetValue()
        n3=self.t3.GetValue()
        n4=self.t4.GetValue()
        s=[n1,n2,n3,n4]
        conn.execute("insert into library(name,pub,price,type) values(?,?,?,?)",s)
        conn.commit()
        dial = wx.MessageDialog(None,'成功插入数据!','结果',wx.YES_NO)
        dial.ShowModal()

    def __init__(self,parent):
        wx.Panel.__init__(self,parent)

        st1 = wx.StaticText(self, -1, "请输入书名:",(20,10))
        st2 = wx.StaticText(self, -1, "请输入出版社:",(20, 60))
        st3 = wx.StaticText(self, -1, "请输入价格:",(20, 110))
        st4 = wx.StaticText(self, -1, "请选择分类:",(20, 160))

        self.t1 = wx.TextCtrl(self,pos=(20,30),size=(200,20))
        self.t2 = wx.TextCtrl(self,pos=(20,80),size=(200,20))
        self.t3 = wx.TextCtrl(self,pos=(20,130),size=(200,20))
        self.t4 = wx.ComboBox(self,value='未选择',
                choices=['文学','理工科','计算机','外语','其他'],pos=(20,180),size=(200,20))

        btn=wx.Button(self,label="插入",pos=(20,210),size=(100,30))
        btn.Bind(wx.EVT_BUTTON,self.load)

class delete(wx.Panel):
    def load(self,event):
        conn=sqlite3.connect("F:\\Python\My Program\library_system\library.db")
        conn.cursor()
        n1=self.t1.GetValue()
        s=[n1]
        conn.execute('DELETE FROM library where name=?',s)
        conn.commit()
        dial = wx.MessageDialog(None,'成功删除数据!','结果',wx.YES_NO)
        dial.ShowModal()

    def __init__(self,parent):
        wx.Panel.__init__(self,parent)

        st1 = wx.StaticText(self, -1, "请输入要删除的书名:",(20,20))

        self.t1 = wx.TextCtrl(self,pos=(20,40),size=(200,20))

        btn=wx.Button(self,label="删除",pos=(20,70),size=(100,30))
        btn.Bind(wx.EVT_BUTTON,self.load)

def OnPaint(event):
    dc = wx.PaintDC(lp)
    dc.DrawBitmap(map,28,50)

def bt1(event):
    b1.SetBackgroundColour('#011b27')
    b2.SetBackgroundColour('#052b3b')
    b3.SetBackgroundColour('#052b3b')
    rp1.Show(1)
    rp2.Show(0)
    rp3.Show(0)
    frame.Refresh()

def bt2(event):
    b1.SetBackgroundColour('#052b3b')
    b2.SetBackgroundColour('#011b27')
    b3.SetBackgroundColour('#052b3b')
    rp1.Show(0)
    rp2.Show(1)
    rp3.Show(0)
    frame.Refresh()

def bt3(event):
    b1.SetBackgroundColour('#052b3b')
    b2.SetBackgroundColour('#052b3b')
    b3.SetBackgroundColour('#011b27')
    rp1.Show(0)
    rp2.Show(0)
    rp3.Show(1)
    frame.Refresh()

app = wx.App(False)
frame = wx.Frame(None, title='图书管理',size=(800,600),style=wx.CAPTION | wx.CLOSE_BOX)
frame.SetBackgroundColour('#0a3142')

rp1 = find(frame)
rp2 = insert(frame)
rp3 = delete(frame)
rp1.SetBackgroundColour('#ffffff');rp1.SetSize((600,600));rp1.SetPosition((200,0))
rp2.SetBackgroundColour('#ffffff');rp2.SetSize((600,600));rp2.SetPosition((200,0))
rp3.SetBackgroundColour('#ffffff');rp3.SetSize((600,600));rp3.SetPosition((200,0))
rp2.Show(0)
rp3.Show(0)

lp = wx.Panel(frame,-1)
lp.SetSize((200,600))
b1 = buttons.GenButton(lp, -1, '查询图书',pos=(0,250),size=(200,50))
b2 = buttons.GenButton(lp, -1, '插入图书',pos=(0,300),size=(200,50))
b3 = buttons.GenButton(lp, -1, '删除图书',pos=(0,350),size=(200,50))
b1.SetBackgroundColour('#011b27');b1.SetForegroundColour('#ffffff');b1.SetBezelWidth(1);b1.SetFont(wx.Font(15, wx.DEFAULT, wx.NORMAL, wx.NORMAL))
b1.Bind(wx.EVT_BUTTON,bt1)
b2.SetBackgroundColour('#052b3b');b2.SetForegroundColour('#ffffff');b2.SetBezelWidth(1);b2.SetFont(wx.Font(15, wx.DEFAULT, wx.NORMAL, wx.NORMAL))
b2.Bind(wx.EVT_BUTTON,bt2)
b3.SetBackgroundColour('#052b3b');b3.SetForegroundColour('#ffffff');b3.SetBezelWidth(1);b3.SetFont(wx.Font(15, wx.DEFAULT, wx.NORMAL, wx.NORMAL))
b3.Bind(wx.EVT_BUTTON,bt3)
map = wx.Bitmap('photo.png')
wx.EVT_PAINT(lp,OnPaint)

frame.Show()
app.MainLoop()
都是些基本的wxpython,用于装饰界面

猜你喜欢

转载自blog.csdn.net/qq_32897527/article/details/51233275