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

來自 《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()

 

結果:數據庫

相關文章
相關標籤/搜索