1. 程式人生 > >Python圖形化介面

Python圖形化介面

import tkinter as tk
from tkinter import ttk
from Include.top.youshang520i.dao.studentDao import studentDao as stuDao
from Include.top.youshang520i.pojo.Studnet import Student as stu
root=tk.Tk()
root.title("學管理系統")
root.resizable(width=False,height=False)
#設定視窗大小
root.geometry('500x500')
tt=tk.Label(root, text = "學生管理系統", height = 2,width=2, font=("溫軟雅黑", 12),bg="red",fg="yellow")
tt.pack(fill='x')
# tt2=tk.Label(root,text="",height=1).pack(fill='x')
tt3=tk.Label(root,text="",height=1)

items=()#將treeview中觸發的資料提取為全域性
#點選Tree時觸發的方法
def clickTree(self):
    #獲取點選的行
    item=tree.selection()
    global items

    if(len(item)>0):
        # editButton.config(relief='sunken')#按鈕樣式凹陷
        # editButton.config(relief='groove')#按鈕樣式水平
        sidEntry.config(state='disabled')#編輯文字框只讀
        editButton.config(state='normal')#按鈕可用
        # editButton.config(state='disabled')#按鈕不可用

    #獲得選中的結果集(返回元祖格式的結果集)
    items=tree.item(item,"values")
    sid=items[0]
    sname=items[1]
    ssex=items[2]
    sage=items[3]

    sidEntry.delete(0,len(items))
    snameEntry.delete(0,len(items))
    ssexEntry.delete(0,len(items))
    sageEntry.delete(0,len(items))

    sidEntry.insert(0,sid)
    snameEntry.insert(1,sname)
    ssexEntry.insert(2,ssex)
    sageEntry.insert(3,sage)

tree = ttk.Treeview(root,show="headings")
tree['columns']=("sid",'sname','ssex','sage')
tree.column("sid",width=100,anchor='center')
tree.column("sname",width=100,anchor='center')
tree.column("ssex",width=100,anchor='center')
tree.column("sage",width=100,anchor='center')

tree.heading("sid",text="編號")
tree.heading("sname",text="姓名")
tree.heading("ssex",text="性別")
tree.heading("sage",text="年齡")

def quryAll():#查詢全部
    qurAll = stuDao.queryStudentAll()
    for s in qurAll:
        tree.insert("",s[0],text="values" ,values=(s[0],s[1],'男' if(s[2]=='1') else '女',s[3])) #插入資料,
quryAll()

def delAll(tree):#刪除全部
    x = tree.get_children()#獲得所有的專屬的下標(新手不是很瞭解但是是獨有的,像下標一樣的那種,但又不是下標的格式,有點像16進位制的格式)
    for ll in x:
        tree.delete(ll)


tree.bind("<<TreeviewSelect>>",clickTree)#給列表繫結點選事件

tree.pack(pady=25)

# tt3.pack(fill='x')


#定義一個大容器
clickFrame=tk.Frame(root,width=500)

leftFrame=tk.Frame(clickFrame)

# 設定列頭與輸入框
sidLabel=tk.Label(leftFrame,text="編號:")
snameLabel=tk.Label(leftFrame,text="姓名:")
ssexLabel=tk.Label(leftFrame,text="性別:")
sageLabel=tk.Label(leftFrame,text="年齡:")
sidEntry=tk.Entry(leftFrame)
snameEntry=tk.Entry(leftFrame)
ssexEntry=tk.Entry(leftFrame)
sageEntry=tk.Entry(leftFrame)

#文字與文字框的位置(使用的網格佈局)
snameEntry.grid(row=0,column=3,padx=1)#編號文字框
ssexEntry.grid(row=1,column=1,padx=1,pady=15)
sageEntry.grid(row=1,column=3,padx=1,pady=15)
sidEntry.grid(row=0,column=1,padx=1)

sidLabel.grid(row=0,column=0,padx=1)#編號文字
snameLabel.grid(row=0,column=2,padx=1)
ssexLabel.grid(row=1,column=0,padx=1,pady=15)
sageLabel.grid(row=1,column=2,padx=1,pady=15)

leftFrame.pack(fill='x')#上容器



#點選選中事件(有一個bug就是沒辦法刪除之前的資料)
def clickAdd(self):
    print('新增')#ralsed
    addButton.config(relief='sunken')
    stu.id = sidEntry.get()
    stu.sname = snameEntry.get()
    ssex = ssexEntry.get()
    stu.ssex=2
    if(ssex=='男'):
        stu.ssex=1
    stu.sage = sageEntry.get()
    i = stuDao.addStudent(stu)
    if(i>0):
        delAll(tree)
        quryAll()

def clickDele(self):#刪除
    deleButton.config(relief='sunken')
    i = stuDao.delStudent(items[0])
    if(i>0):
        delAll(tree)
        quryAll()
def clickEdit():#修改
    stu.id=items[0]
    stu.sname=snameEntry.get()
    ssex=ssexEntry.get()
    stu.ssex=2
    if(ssex=='男'):
        stu.ssex=1
    stu.sage=sageEntry.get()
    i = stuDao.editStudent(stu)
    if(i>0):
        delAll(tree)
        quryAll()

def clickQuery(self):
    print('查詢')
    queryButton.config(relief='sunken')



def releaseAdd(self):
    addButton.config(relief='raised')
def releaSedele(self):
    deleButton.config(relief='raised')
def releaseEdit(self):
    editButton.config(relief='raised')
def releaseQuery(self):
    queryButton.config(relief='raised')


rightFrame=tk.Frame(clickFrame)#下容器

addButton = tk.Button(rightFrame,text="新增")#,command=add
deleButton = tk.Button(rightFrame,text="移除")#,command=dele
#rightFrame=需要新增到哪個容器裡面去
#command=當點選的時候會觸發哪個函式
#state將按鈕的狀態設定為失效(文件上面是直接大寫字母的DISABLED)
editButton = tk.Button(rightFrame,text="修改",state='disabled',command=clickEdit)#
queryButton = tk.Button(rightFrame,text="查詢")#,command=query

#給按鈕新增滑鼠事件
addButton.bind(sequence="<Button-1>",func=clickAdd)#當點選新增按鈕時
addButton.bind(sequence="<ButtonRelease-1>",func=releaseAdd)#當滑鼠釋放時

deleButton.bind(sequence="<Button-1>",func=clickDele)
deleButton.bind(sequence="<ButtonRelease-1>",func=releaSedele)


# editButton.bind(sequence="<Button-1>",func=clickEdit)
editButton.bind(sequence="<ButtonRelease-1>",func=releaseEdit)

queryButton.bind(sequence="<Button-1>",func=clickQuery)
queryButton.bind(sequence="<ButtonRelease-1>",func=releaseQuery)


addButton.grid(row=0,column=0,padx=50,pady=10)
deleButton.grid(row=0,column=2,padx=50,pady=10)
editButton.grid(row=1,column=0,padx=50,pady=10)
queryButton.grid(row=1,column=2,padx=50,pady=10)

rightFrame.pack()



clickFrame.pack()#最大容器
root.mainloop()
# labelHello = tk.Label(root,text='123',height=10,width=50,font=("Arial", 12))
# labelHello.pack()

最終展示結果,但是有點小bug太耗時間了....