Я хочу, чтобы на странице моей программы отображалось содержимое списка, созданного функцией, но когда я помещаю адрес списка в функцию «вставка», он не работает и выдает сообщение об ошибке всякий раз, когда я нажимаюпри запуске «TypeError: индексы списка должны быть целыми или кусочками, а не кортежем», пытаясь перейти на следующую страницу.
Это код:
from tkinter import *
import tkinter as tk
import random
title_font= ("Microsoft Jhenghei UI Light", 35)
class MathsApp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
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.title("Maths Revision App")
self.geometry("800x500")
self.frames = {}
for F in (StartPage, q1):
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):
#funtion that displays different pages
frame = self.frames[cont]
frame.tkraise()
class StartPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self,parent)
self.configure(bg ="white")
lbl = tk.Label(self, text="Welcome!", font=title_font, bg="white", fg="#004d99")
lbl.place(x=30, y=20)
rtbtn=tk.Button(self, text="Start", height=3, width=15, fg="white", bg="#004d99", command=lambda:controller.show_frame(q1))
rtbtn.place(x=350, y=200)
class q1(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.configure(bg="white")
lbl=Label(self, text="Question 1", font=("Microsoft Jhenghei UI Light", 35), bg="white", fg="#004d99")
lbl.place(x=30, y=20)
txt=Text(self, height=5, width=70)
txt.config(state="normal")
#where I am trying to display the contents of the list
txt.insert(tk.INSERT,qlist[0,0])
txt.config(state="disabled")
txt.place(x=35,y=125)
nxt=Button(self, text="Next", height=3, width=15, fg="white", bg="#004d99")
nxt.place(x=650, y=400)
ans=Entry(self)
ans.place(x=650, y=350,height=25)
#function for creating the list
qlist=0
def getQuestions():
global qlist
qlist=[0,0,0,0,0]
noschosen=[]
with open("questiontest.txt","r") as f:
lines=f.read().strip().split("\n")
i=0
while i<len(qlist):
chosen=False
n=random.randint(1,20)
while n in noschosen:
n=random.randint(1,20)
qline=2*n-1
noschosen.append(n)
qlist[i]=(lines[qline],lines[qline+1])
i=i+1
getQuestions()
print (qlist)
app = MathsApp()
app.mainloop()
Текстовый файл называется «questiontest» и содержит:
.
Question1
Answer1
Question2
Answer2
Question3
Answer3
Question4
Answer4
Question5
Answer5
Question6
Answer6
Question7
Answer7
Question8
Answer8
Question9
Answer9
Question10
Answer10
Question11
Answer11
Question12
Answer12
Question13
Answer13
Question14
Answer14
Question15
Answer15
Question16
Answer16
Question17
Answer17
Question18
Answer18
Question19
Answer19
Question20
Answer20
На второй странице должно отображаться «QuestionX»в текстовом поле (X представляет любое число).Я знаю, что в адресе есть что-то, потому что я заставляю код печатать весь список перед запуском GUI.