1_GUI_fine.png

最近學到了 Python SQLite 資料庫的存取和 tkinter 圖形化介面的使用,就想說來整合一下。可以做出一個圖形化介面的資料庫應用程式。

2_originalDBcontent.png

資料庫內容與操作

    假設我們有一個資料庫表格,每一筆紀錄(record)包含四筆欄位(fields):姓名(Name)、國文(Chinese)、英文(English)、數學(Math)。如要增加一筆紀錄,我們可以寫下面的程式碼:

conn=sqlite3.connect('資料庫檔名')
cur=conn.cursor()
sqlstr="insert into 表格名稱 values ('{}', {}, {}, {})".\
format(姓名, 國文成績, 英文成績, 數學成績)


# 執行 SQL 語句
cur.execute(sqlstr)

# 將變動過的資料寫入資料庫
conn.commit()

# 關閉資料庫
conn.close()

 

3_GUI_define.png

[圖形化介面的設計]

      至於圖形化介面,就可以使用 tkinter 程式庫。
使用的介面需要這種排版形式,我在之前的文章裡寫過 .pack() 的排版方式無法達成,只能使用 .grid()排版樣式

      大致看一下排版的內容:最上方是 .grid()排版樣式;但下方的提交按鈕 只有一個元件,也沒有其他的元件跟它一起排版。因此,這裡只要用 .pack() 的排版方式就可以了!

      可是,tkinter 裡面一個 frame 只能用一種排版方式,用了  .grid() 就不能用  .pack() 。為了同時使用這2種排版方式,我採用 2 個單獨的 frame :上方的 frame 用 .grid() 來排版,下方的就用 .pack() 。可以寫出這樣的程式碼:

my_window = tk.Tk()
frame1=tk.Frame(my_window)
frame2=tk.Frame(my_window,bg='yellow')

然後,建立圖形化 元件,並加入排版
Title_label=tk.Label(frame1, text='成績建檔系統',fg='black',font=('Arial', 32))
schoollot_label=tk.Label(frame1, text='學號',fg='black',font=('Arial', 14))
schoollot_entry=tk.Entry(frame1,bg='cyan', fg='black',font=('Arial', 14))

name_label=tk.Label(frame1, text='姓名',fg='black',font=('Arial', 14))
name_entry=tk.Entry(frame1,bg='cyan', fg='black',font=('Arial', 14))

TC_label=tk.Label(frame1, text='國文',fg='black',font=('Arial', 14))
TC_entry=tk.Entry(frame1,bg='cyan', fg='black',font=('Arial', 14))

EN_label=tk.Label(frame1, text='英文',fg='black',font=('Arial', 14))
EN_entry=tk.Entry(frame1,bg='cyan', fg='black',font=('Arial', 14))

Math_label=tk.Label(frame1, text='數學',fg='black',font=('Arial', 14))
Math_entry=tk.Entry(frame1,bg='cyan', fg='black',font=('Arial', 14))

frame1 採用 .grid() 排版
Title_label.grid(row=0,column=0,columnspan=2)

name_label.grid(row=1,column=0)
name_entry.grid(row=1,column=1)

TC_label.grid(row=2,column=0)
TC_entry.grid(row=2,column=1)

EN_label.grid(row=3,column=0)
EN_entry.grid(row=3,column=1)

Math_label.grid(row=4,column=0)
Math_entry.grid(row=4,column=1)

frame2 採用 .pack() 排版
submit_btn.pack()

4_SubmitCmd_pic.png

[提交按鈕的命令]

當使用者填好了資料,按下 提交按鈕 後,要由程式取得資料。可以用這樣的語法:

元件誕生時,先綁定一個命令處理函式:
submit_btn=Button(frame2,text='提交',command=InsertDB)

後面的參數:command= 可以讓我們指定操作的函式名稱。只是記住:這裡只能有函式名稱,不加 ()

那 InsertDB 要在使用前先寫好:

def InsertDB():
   conn=sqlite3.connect('資料庫檔名')
   cur=conn.cursor()
   sqlstr="insert into 表格名稱 values ('{}', {}, {}, {})".\
            format(姓名, 國文成績, 英文成績, 數學成績)
   # 執行 SQL 語句
   cur.execute(sqlstr)

   # 將變動過的資料寫入資料庫
   conn.commit()

   # 關閉資料庫
   conn.close()

在函式裡面的程式都要加入縮排或 Tab 空間,Python直譯器在翻譯程式的時候才會將這些程式碼包含在函式內部

5_AddFine_all.png

      左邊是圖形化程式,右邊是資料庫瀏覽程式 DB Browser for SQLite 的讀取結果。當我們輸入一筆 新資料按下 提交按鈕後,資料庫的內容也新增了這一筆資料!

arrow
arrow
    文章標籤
    Python SQLite tkinter
    全站熱搜
    創作者介紹
    創作者 小木屋 的頭像
    小木屋

    小木屋

    小木屋 發表在 痞客邦 留言(0) 人氣()