當前位置:首頁 ? tkinter ? 正文

用tkinter的多行文本框組件做一個答題程序,有源碼

  tkinter的多行文本框Text組件,可以插入文本,圖片,插入組件,插件的組件也可以響應事件,也可以綁定滾動條,這決定了用tkinter的多行文本框組件可以做一個答題程序。

  這個答題程序,我還是采取一個txt文件做題庫,有些代碼,就采用了我前面的文章:用tkinter做一個簡單的答題系統:單選題,大家也可以回看這篇文章,互相參考一下。

  我的題庫只有10道題,你可以任意加多少題目,只要修改txt文件的題庫就行了。

  程序也有簡單的核對答案部分,只是我做得太簡單了,只是用print()方法輸出,是有點偷懶了。

  事先要在你的代碼目錄里,保存題庫文件:car3.txt ,以及代碼目錄里的子文件夾 image 保存2個相關的圖片 car_1.gif 和 car_2.gif

  題庫內容如下,請將這個txt文件編碼保存為UTF-8編碼格式

駕駛機動車在道路上違反道路交通安全法的行為,屬于什么行為?,過失行為,違規行為,違章行為,違法行為,4,,
機動車駕駛人違法駕駛造成重大交通事故構成犯罪的,依法追究什么責任?,刑事責任,民事責任,直接責任,經濟責任,1,,
機動車駕駛人造成事故后逃逸構成犯罪的,吊銷駕駛證多長時間不得重新取得駕駛證?,5年內,10年內,20年內,終生,4,,
駕駛機動車應當隨身攜帶哪種證件?,職業資格證,身份證,駕駛證,工作證,3,,
本程序的原創來自"五筆打字通"(網名),五筆打字通有自己的網站,他的網站是:,taobao.com,wb98.com,baidu.com,163.com,2,,
駕駛機動車在路口直行遇到這種信號燈應該怎樣行駛?,不得越過停止線,加速直行通過,左轉彎行駛,進入路口等待,1,car_1.gif,
下列做法哪些可以有效避免駕駛疲勞?,連續駕駛不超過4小時,用餐不宜過飽,保持良好的睡眠,餐后適當休息后駕車,1234,,
駕駛汽車從支線道路怎樣安全匯入主干道車流?,提前開啟左轉向燈,仔細觀察主干道內情況,確認安全后匯入車流,加速直接匯入車流,123,,
這個小型客車駕車人有哪些違法行為?,接打手持電話,無證駕駛,酒后駕駛,未系安全帶,1234,car_2.gif,
行車中駕駛人接打手機或發短信有什么危害?,影響乘車人休息,分散駕駛注意力,影響正常駕駛操作,遇緊急情況反應不及,234,,

2個相關的圖片如下:

202111111126119153895.gif

202111111443103775250.gif


  全部代碼如下:

from tkinter import *
import webbrowser

def wb98():
    webbrowser.open('http://www.wb98.com',new=1)

root = Tk()
root.title('何老師做的答題系統 wb98.com')
te1 = Text(root, cursor='arrow', width=10, height=15) # 創建多行文本框組件
te1.pack(side='left', fill=BOTH, expand=True)

with open('car3.txt', 'r', encoding='utf-8') as file:  # 只讀方式打開編碼為utf-8的題庫文本文件
    number = 0  # 文本文件中的行號,即
    line = file.readlines()  # 以讀取一行為列表方法讀取全部行,line為分解好的列表內容
    str1 = line[0].split(',')  # 以英文,號來分解第1行,獲取題目,答案1,答案2......

# str1[0]:題目  str1[1]:選項1  str1[2]:選項2  str1[3]:選項3  str1[4]:選項4
# str1[5]:答案  str1[6]:圖片名

img = dict()  # 設img為一個空字典,用于循環地創建各題目的插圖

# 以下設各變量為字典,便于循環時生成各組件插入Text組件
option1 = dict()  # 答案選項1
option2 = dict()  # 答案選項2
option3 = dict()  # 答案選項3
option4 = dict()  # 答案選項4

# 以下設各變量為字典,便于循環時綁定各組件的 variable 參數
var_ra = dict()
var_ch1 = dict()
var_ch2 = dict()
var_ch3 = dict()
var_ch4 = dict()
str_daan = ''  # 答案字符串初始化

# 以下是循環出題的代碼 ------------------
for i in range(1, 11): # 通過循環插入題目,插圖,答案選項

    id = str(number+1)+". "  # 題目序號
    te1.insert(END, id+str1[0]+'\n') # 插入題目

    if str1[6] == '':
        img[i] = PhotoImage()  # 沒有相關圖片
    else:
        img[i] = PhotoImage(file='.\\image\\'+str1[6])  # 圖片是在安裝目錄下的image文件夾里
        te1.image_create(END, image=img[i]) # 插入相關插圖
        te1.insert(END, '\n') # 插入一個分隔行

    str_daan = str_daan + str1[5]+','  # 把答案記下來,保存到一個以,號相分割的字符串里,交卷用于核對

    # 由答案的字符長度判斷是單選題還是多選題,分別插入答案選項
    if len(str1[5]) == 1:  # 單選題
        var_ra[i] = IntVar(value=0)
        option1[i] = Radiobutton(root, text='A. '+str1[1], bg='white',
                                 activebackground='white', variable=var_ra[i], value=1)
        te1.window_create(END, window=option1[i])
        te1.insert(END, '\n')

        option2[i] = Radiobutton(root, text='B. '+str1[2], bg='white',
                                 activebackground='white', variable=var_ra[i], value=2)
        te1.window_create(END, window=option2[i])
        te1.insert(END, '\n')

        option3[i] = Radiobutton(root, text='C. '+str1[3], bg='white',
                                 activebackground='white', variable=var_ra[i], value=3)
        te1.window_create(END, window=option3[i])
        te1.insert(END, '\n')

        option4[i] = Radiobutton(root, text='D. '+str1[4], bg='white',
                                 activebackground='white', variable=var_ra[i], value=4)
        te1.window_create(END, window=option4[i])
        te1.insert(END, '\n')
    else:
        var_ch1[i] = BooleanVar(value=False)
        var_ch2[i] = BooleanVar(value=False)
        var_ch3[i] = BooleanVar(value=False)
        var_ch4[i] = BooleanVar(value=False)

        option1[i] = Checkbutton(
            root, text='A. '+str1[1], bg='white', activebackground='white', variable=var_ch1[i])
        te1.window_create(END, window=option1[i])
        te1.insert(END, '\n')

        option2[i] = Checkbutton(
            root, text='B. '+str1[2], bg='white', activebackground='white', variable=var_ch2[i])
        te1.window_create(END, window=option2[i])
        te1.insert(END, '\n')

        option3[i] = Checkbutton(
            root, text='C. '+str1[3], bg='white', activebackground='white', variable=var_ch3[i])
        te1.window_create(END, window=option3[i])
        te1.insert(END, '\n')

        option4[i] = Checkbutton(
            root, text='D. '+str1[4], bg='white', activebackground='white', variable=var_ch4[i])
        te1.window_create(END, window=option4[i])
        te1.insert(END, '\n')

    te1.insert(END, '\n')
    number = number+1
    str1 = line[number].split(',')  # 讀取新一行記錄
# 以上是循環出題的代碼----------------------

te1.insert(END, '\n\n\n')


def dafei(): # 核對答案 函數
    daan = str_daan.split(',')  # 把答案字符串分解

    for i in range(1, 11):  # 單選題
        if len(daan[i-1]) == 1:  # 單選題
            if daan[i-1] == str(var_ra[i].get()):
                print('第'+str(i)+"題回答正確")
            else:
                print('第'+str(i)+"題回答錯誤")
                print("    正確答案:" + daan[i-1])
                print("    你的答案:" + str(var_ra[i].get()))
        else:  # 多選題
            duo = ''
            if var_ch1[i].get() == True:
                duo = '1'
            if var_ch2[i].get() == True:
                duo = duo+'2'
            if var_ch3[i].get() == True:
                duo = duo+'3'
            if var_ch4[i].get() == True:
                duo = duo+'4'

            if daan[i-1] == duo:
                print('第'+str(i)+"題回答正確")
            else:
                print('第'+str(i)+"題回答錯誤")
                print("    正確答案:" + daan[i-1])
                print("    你的答案:" + duo)


but1 = Button(root, text="    立 即 交 卷    ", command=dafei)  # 交卷打分
te1.window_create(END, window=but1)
but2 = Button(root, text="    訪 問 官 網    ", command=wb98)  
te1.window_create(END, window=but2)



te1['state'] = DISABLED

scr1 = Scrollbar(root)  # 垂直滾動條
scr1.pack(side='right', fill=Y)

te1.config(yscrollcommand=scr1.set)  # 綁定滾動條
scr1.config(command=te1.yview)

root.geometry('700x650+555+111')  # 窗體啟動的初始大小

root.mainloop()

運行結果

未命名.GIF

以上代碼在 window10下 測試成功

此文章來自:wb98.com  網站還有相關的系列課程文章,感興趣的可以前往。


來源:濟亨網

本文鏈接:http://www.chinaengraver.com/post/344.html

    << 上一篇 下一篇 >>

    湘公網安備 43011102000514號 - 湘ICP備08100508號

    2019年秋霞鲁丝片瓜皮_导航亚洲AV日韩AV永久无码_有没有哪些可以看片的免费的_国产色妞妞在线视频免费播放