【发布时间】:2017-11-15 23:12:19
【问题描述】:
我一直将此编码为使用 python 对 Tkinter 的个人练习/测试,我正在尝试加载一个包含字典中的字典的文件并读取不应该是问题的文件,但问题是, TempDict 未按定义分类。
如果某些代码没有正确缩进,我也很抱歉,它没有很好地复制和粘贴,所以我不得不做一些更正。
import tkinter as tk
from tkinter import *
from tkinter import ttk
import tkinter.messagebox as tm
import os
import pickle
class Quiz (tk.Tk):
def __init__ (self, *args , **kwargs):
tk.Tk.__init__(self, *args , **kwargs)
tk.Tk.wm_title(self, "Quiz")
container = tk.Frame (self)
container.pack (side = "top" , fill = "both" , expand = True)
container.grid_rowconfigure (0,weight = 1)
container.grid_columnconfigure (0,weight = 1)
self.frames = {}
for F in (StartPage, Menu, Difficulty, QuestionsStart):
frame = F(container, self)
self.frames[F] = frame
frame.grid (row = 0, column = 0 , sticky = "nsew")
self.show_frame(StartPage)
def show_frame(self,cont):
frame = self.frames[cont]
frame.tkraise()
class StartPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self,parent)
label = tk.Label(self, text = "Login")
label.pack(pady = 10 , padx = 10)
global Username
User = tk.Label (self, text = "Username")
User.pack()
Username = tk.Entry(self)
Username.pack()
Pass = tk.Label (self, text = "Password")
Pass.pack()
Password = tk.Entry (self, show = "*")
Password.pack()
button1 = ttk.Button(self, text = "Login",
command = lambda: Login(Username,Password,parent,controller,self) )
button1.pack()
button2 = ttk.Button(self, text = "Sign Up",
command = lambda: Signup())
button2.pack()
class Menu(tk.Frame):
def __init__ (self, parent, controller):
tk.Frame.__init__(self, parent)
label = tk.Label(self, text = "Menu")
label.pack()
Label = tk.Label(self, text = "Please enter Maths or Chemsitry")
Label.pack()
Topic = tk.Entry(self)
Topic.pack()
Proceed = ttk.Button(self, text = "Proceed", command = lambda: controller.show_frame(Difficulty))
Proceed.pack()
Result = ttk.Button(self, text = "Results",
command = lambda: Results(controller))
Result.pack()
Logout = ttk.Button(self, text = "Log Out",
command = lambda: controller.show_frame(StartPage))
Logout.pack()
class Difficulty(tk.Frame):
def __init__ (self, parent, controller):
tk.Frame.__init__(self,parent)
label = tk.Label(self, text = "Difficulty")
label.pack()
Label = tk.Label(self, text = "Please enter Easy, Medium or Hard")
Label.pack()
DifficultyInput = tk.Entry(self)
DifficultyInput.pack()
StartQuiz = tk.Button(self , text = "Start Quiz", command = lambda: controller.show_frame(QuestionsStart))
StartQuiz.pack()
backtomenu = ttk.Button(self, text = "Back to Menu",
command = lambda: controller.show_frame(Menu))
backtomenu.pack()
def DictFromFile ():
TempDict = {}
try:
with open("Questions.txt" , "r") as file:
TempDict = eval(file.read())
file.close()
except IOError as error:
print (error)
print(TempDict)
return TempDict
DictFromFile()
def QuizType(Topic, DifficultyInput):
QuizSelection = str(Topic.get().lower() + DifficultyInput.get().lower())
return QuizSelection
class QuestionsStart (tk.Frame):
def __init__(self , parent, controller):
tk.Frame.__init__(self,parent)
Label = tk.Label(self, text = DictFromFile(TempDict[QuizSelection(Topic, DifficultyInput)]["Question1"]))
Label.pack()
def Login(Username,Password,parent,controller,self):
Usernames = []
Login = True
Username = Username.get()
Password = Password.get()
try:
with open ("Usernames&Passwords.txt" , "rb" ) as file:
for each in pickle.load(file):
Usernames.append(each.strip("\n"))
file.close()
except IOError as error:
print (error)
for each in range(len(Usernames)):
if Usernames[each] == Username :
if Usernames[each + 1] == Password:
Login = True
controller.show_frame(Menu)
break
else:
Login = False
else:
Login = False
if Login == False:
tm.showinfo("Your Username or Password is incorrect" , "Your Usename or Password is incorrect")
def Results (controller):
UsersResults = []
Counter = 0
Topic = []
Difficulty = []
Mark = []
Percentage = []
Grade = []
try:
with open(Username.get() + ".txt" , "r" , encoding = "UTF-8") as file:
for each in file:
UsersResults.append(each.strip("\n"))
except IOError as error:
print(error)
print (UsersResults)
print (Counter)
for each in range (len(UsersResults)):
Topic = UsersResults[Counter]
Difficulty = UsersResults[Counter + 1]
Mark = UsersResults[Counter + 2]
Percentage = UsersResults[Counter + 3]
Grade = UsersResults[Counter + 4]
Counter += 5
return UsersResults
app = Quiz()
app.geometry ("500x300")
app.mainloop()
【问题讨论】:
-
[包含字典的记事本][1] [我遇到的错误][2] [用户名和密码][3] [1]:gyazo.com/8ea5faab3027411927762305535cb0c3 [2]:gyazo.com/2d6a5d659020ee5aa259b61f5cbf3c08 [3]:gyazo.com/1f7f87a17ce5749fa92e717fc6327035
-
请在您的问题中包含尽可能短的示例数据。没有人愿意单击链接下载数据只是为了测试您的代码。另外,请将您的代码缩减为minimal reproducible example。有很多代码与您提出的问题完全无关。
-
您有按钮
{}来正确格式化所选代码。将错误消息作为有问题的文本而不是屏幕截图。将Questions.txt作为有问题的文本,而不是屏幕截图。现在没有人可以复制它来测试它了。