來自 《Python項目案例開發從入門到實戰》(清華大學出版社 鄭秋生 夏敏捷主編)中 數據庫應用--智力問答測試html
生成試題庫以及界面代碼:python
注意: 要使代碼運行成功,須要先看上一篇文章 python生成數據庫(python generate database) 先生成 test_bank.db 數據庫才能夠運行成功sql
1 import tkinter # Tkinter模塊是python的標準Tk GUI工具包的接口
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()
結果:數據庫