【发布时间】:2015-05-30 13:01:10
【问题描述】:
我正在尝试使用 tkinter for Python 创建一个基本的测验程序。现在我正在尝试从 JSON 文件中的两个字典列表中加载一个问题:
[
{
"wrong3": "Nope, also wrong",
"question": "Example Question 1",
"wrong1": "Incorrect answer",
"wrong2": "Another wrong one",
"answer": "Correct answer"
},
{
"wrong3": "0",
"question": "How many good Matrix movies are there?",
"wrong1": "2",
"wrong2": "3",
"answer": "1"
}
]
我正在尝试创建一个函数来从列表中提取字典,方法是通过索引遍历字典,然后使用 pop() 将其从列表中删除。然后我尝试使用 stringVar() 将问题放在标签中无济于事!
我假设我的问题出在 pop() 方法上,但我不确定如何继续。我应该从 pop() 继续并尝试其他方法吗?
import tkinter
import tkinter.messagebox
import json
import random
class ProgramGUI:
def __init__(self):
try:
f = open('question.txt', 'r')
questions = json.load(f)
f.close()
except FileNotFoundError:
tkinter.messagebox.showerror('Missing/Invalid file')
command=self.main.destroy
return
score = 0
self.main = tkinter.Tk()
self.main.title('Quizbox')
self.mainFrame = tkinter.Frame(self.main, width=350, height=150, bg="green", padx=20, pady=20)
self.mainFrame.pack(side="top")
#Question
self.questionString = tkinter.StringVar()
self.questionBox = tkinter.Label(self.mainFrame, justify="center", bg="grey",
wraplength=300, pady=10, textvariable=self.questionString)
self.questionBox.pack(side="top")
#Frames
self.frame1 = tkinter.Frame(self.mainFrame, bg="white", pady=5)
self.frame2 = tkinter.Frame(self.mainFrame, bg="white")
self.frame1.pack(fill="x")
self.frame2.pack(fill="x")
#Buttons (Yet to be completed)
self.answer1 = tkinter.Button(self.frame1, text="Answer 1")
self.answer1.pack(side="left")
self.answer2 = tkinter.Button(self.frame1, text="Answer 2")
self.answer2.pack(side="left")
self.answer3 = tkinter.Button(self.frame1, text="Answer 3")
self.answer3.pack(side="left")
self.answer4 = tkinter.Button(self.frame1, text="Answer 4")
self.answer4.pack(side="left")
buttonList = []
buttonList.append(self.answer1)
buttonList.append(self.answer2)
buttonList.append(self.answer3)
buttonList.append(self.answer4)
#Score
self.scoretext = tkinter.Label(self.frame2, width=20, justify="right", text="Score:" )
self.scorecount = tkinter.Label(self.frame2, width=20, text="0", bg="white")
self.scoretext.pack(side="left", fill="y")
self.scorecount.pack(side="left")
self.loadQuestion(questions)
tkinter.mainloop()
def loadQuestion(self):
quest = questions[i]['question']
self.questionString.set(quest)
【问题讨论】:
标签: python json dictionary tkinter