1. 程式人生 > 實用技巧 >python生成試題庫和介面 (python generate test database and layout)

python生成試題庫和介面 (python generate test database and layout)

來自《Python專案案例開發從入門到實戰》(清華大學出版社 鄭秋生 夏敏捷主編)中 資料庫應用--智力問答測試

生成試題庫以及介面程式碼:

注意: 要使程式碼執行成功,需要先看上一篇文章python生成資料庫(python generate database)先生成test_bank.db 資料庫才可以執行成功

  1 import tkinter
  2 # from tkinter import *
  3 # from tkinter.messagebox import *
  4 from tkinter import messagebox
  5 import sqlite3
6 7 8 # 呼叫下一道題目函式 9 def callNext(): 10 # 設定k和score為全域性變數 11 global k 12 global score 13 # 得到單選按鈕的結果 14 useranswer = r.get() 15 print(r.get()) 16 17 # 判斷答案是否為空 18 if useranswer == 'E': 19 messagebox.showinfo("出錯", "請先完成本題") 20 # 判斷答案是否等於正確答案
21 elif useranswer == values[k][5]: 22 # 如果相同則提示答對資訊,messagebox是訊息視窗元件 23 messagebox.showinfo("恭喜", "恭喜你對了") 24 # 新增分數 25 score += 10 26 # 跳轉到下一題 27 k = k + 1 28 else: 29 # 打錯了則提示錯誤提示 30 messagebox.showinfo("遺憾", "遺憾你錯了
") 31 # 跳轉到下一題 32 k = k + 1 33 34 # 判斷是否是最後一道題目 35 if k >= len(values): 36 messagebox.showinfo("提示", "題目做完了") 37 return 38 # 修改timu, radio1, radio2, radio3, radio4中的文字值 39 timu["text"] = values[k][0] 40 radio1["text"] = values[k][1] 41 radio2["text"] = values[k][2] 42 radio3["text"] = values[k][3] 43 radio4["text"] = values[k][4] 44 # 預設值還是設定為沒有選中 45 r.set('E') 46 47 48 # 檢視結果函式 49 def callResult(): 50 tkinter.messagebox.showinfo("你的得分", str(score)) 51 52 53 # 連線到 test_bank 資料庫 54 conn = sqlite3.connect('test_bank.db') 55 # 建立遊標物件 56 cursor = conn.cursor() 57 # 查詢 exam 資料庫表 58 cursor.execute('select * from exam') 59 # 提取查詢到的資料存在values變數中 60 values = cursor.fetchall() 61 # 關閉cursor物件 62 cursor.close() 63 # 關閉connect物件 64 conn.close() 65 66 # 建立視窗物件 67 root = tkinter.Tk() 68 # 設定視窗標題 69 root.title('Python 智力問答遊戲') 70 # 設定初始視窗大小為500*200 71 root.geometry("500x200") 72 # 建立一個StringVar()物件 73 r = tkinter.StringVar() 74 # 設定初始值為'E',即沒有選中 75 r.set('E') 76 # 記錄當前的題目指數 77 k = 0 78 # 記錄得到的分數值 79 score = 0 80 # Label是標籤元件,可以顯示文字和點陣圖 81 # 新建timu標籤元件,標籤的文字值是values中的[k][0] 82 timu = tkinter.Label(root, text=values[k][0]) 83 # 將timu標籤元件新增到視窗中顯示 84 timu.pack() 85 # Frame是框架控制元件,在螢幕上顯示一個矩形區域,多用來作為容器 86 # 新建第一個Frame元件 87 f1 = tkinter.Frame(root) 88 # 將元件新增到視窗中顯示 89 f1.pack() 90 # Radiobutton是單選按鈕控制元件,顯示一個單選的按鈕狀態 91 # 使用者可以使用variable屬性為Radiobutton元件指定一個對應的變數。如果將多個Radiobutton元件繫結到同一個變數,則這些Radiobutton元件 92 # 屬於一個分組,分組後需要使用value設定每個Radiobutton的值,以標識該專案是否被選中。 93 # 在框架控制元件f1中新建一個單選的按鈕控制元件,並且指定單選按鈕按下的變數值,單選按鈕選中時變數的值value和單選按鈕顯示的文字內容text 94 radio1 = tkinter.Radiobutton(f1, variable=r, value='A', text=values[k][1]) 95 # 將元件新增到視窗中顯示 96 radio1.pack() 97 # 在框架控制元件f1中新建一個單選的按鈕控制元件,並且指定單選按鈕按下的變數值,單選按鈕選中時變數的值value和單選按鈕顯示的文字內容text 98 radio2 = tkinter.Radiobutton(f1, variable=r, value='B', text=values[k][2]) 99 # 將元件新增到視窗中顯示 100 radio2.pack() 101 # 在框架控制元件f1中新建一個單選的按鈕控制元件,並且指定單選按鈕按下的變數值,單選按鈕選中時變數的值value和單選按鈕顯示的文字內容text 102 radio3 = tkinter.Radiobutton(f1, variable=r, value='C', text=values[k][3]) 103 # 將元件新增到視窗中顯示 104 radio3.pack() 105 # 在框架控制元件f1中新建一個單選的按鈕控制元件,並且指定單選按鈕按下的變數值,單選按鈕選中時變數的值value和單選按鈕顯示的文字內容text 106 radio4 = tkinter.Radiobutton(f1, variable=r, value='D', text=values[k][4]) 107 # 將元件新增到視窗中顯示 108 radio4.pack() 109 110 # 建立第2個Frame框架元件 111 f2 = tkinter.Frame(root) 112 # 將元件新增到視窗中顯示 113 f2.pack() 114 # 在f2框架上新建Button元件,text表示按鈕顯示的內容,command表示點選按鈕時執行的函式,side表示將Button元件新增到視窗中顯示,左停靠 115 tkinter.Button(f2, text='下一題', command=callNext).pack(side=tkinter.LEFT) 116 # 在f2框架上新建Button元件,text表示按鈕顯示的內容,command表示點選按鈕時執行的函式,side表示將Button元件新增到視窗中顯示,左停靠 117 tkinter.Button(f2, text='結 果', command=callResult).pack(side=tkinter.LEFT) 118 119 # 進入訊息迴圈,也就是顯示視窗 120 root.mainloop()

結果: