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


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

生成試題庫以及界面代碼:

注意: 要使代碼運行成功,需要先看上一篇文章 python生成數據庫(python generate database) 先生成 test_bank.db 數據庫才可以運行成功

 

 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()

 

結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM