文本小部件不显示lis中的内容

2024-10-03 17:28:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望我的程序中有一个页面显示由函数创建的列表的内容,但当我将列表的地址放入“插入”函数时,它不起作用,每当我单击“开始”时就会显示一条错误消息,“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()

txt文件称为“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之前打印整个列表


Tags: selftxt列表initcontainerdefplaceframe