Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Can';t在循环中不断更改tkinter标签文本_Python_Loops_For Loop_Tkinter_Range - Fatal编程技术网

Python Can';t在循环中不断更改tkinter标签文本

Python Can';t在循环中不断更改tkinter标签文本,python,loops,for-loop,tkinter,range,Python,Loops,For Loop,Tkinter,Range,我想做一个简单的测验程序。我希望标签更改10个问题范围内每个问题的文本。所以,当你回答第一个问题时,一个标签应该显示“问题1”。但它立即显示了“问题10”,我无法进行测试 在字典里,只有一个问题,但它不应该是问题,它应该重复那个问题10次 这是我的一段代码(在课堂上): 您需要等待用户在条目小部件中输入答案。你发布的代码不能做到这一点。与命令行程序相比,GUI程序中的逻辑组织方式必须稍有不同,因为您需要等待用户操作生成的事件,然后响应它们 下面的代码并不是您想要的所有功能,但它确实可以运行。:)

我想做一个简单的测验程序。我希望标签更改10个问题范围内每个问题的文本。所以,当你回答第一个问题时,一个标签应该显示“问题1”。但它立即显示了“问题10”,我无法进行测试

在字典里,只有一个问题,但它不应该是问题,它应该重复那个问题10次

这是我的一段代码(在课堂上):


您需要等待用户在条目小部件中输入答案。你发布的代码不能做到这一点。与命令行程序相比,GUI程序中的逻辑组织方式必须稍有不同,因为您需要等待用户操作生成的事件,然后响应它们

下面的代码并不是您想要的所有功能,但它确实可以运行。:)它显示一个问题,等待用户在
self.entry1
小部件中键入答案,当用户点击该小部件中的
Enter
键时,它调用
.get\u answer
方法,该方法处理用户的答案,然后调用
。ask
方法来提出新问题。10个问题后,程序退出

import tkinter as tk
import random

class Quiz(tk.Frame):
    def __init__(self, root):
        super().__init__(root)
        self.root = root
        self.pack()

        self.label = tk.Label(self, text="This is page 1")
        self.label.pack(side="top", fill="x", pady=10)
        self.label1 = tk.Label(self, text='')
        self.label1.pack()
        self.label2 = tk.Label(self, text='')
        self.label2.pack()
        self.entry1 = tk.Entry(self)
        self.entry1.bind("<Return>", self.get_answer)
        self.entry1.pack()
        self.label3 = tk.Label(self, text='')
        self.label3.pack()
        self.entry2 = tk.Entry(self)
        self.entry2.pack()

        self.start_quiz()
        root.mainloop()

    def start_quiz(self):
        self.qdict = {
            "Base-2 number system": "binary",
            "Base-8 number system": "octal",
            "Base-16 number system": "hexadecimal",
        }
        self.qkeys = list(self.qdict.keys())
        self.score = 0
        self.count = 1
        self.ask()

    def ask(self):
        self.question = random.choice(self.qkeys)
        self.label1.config(text="Question {}".format(self.count))
        self.label2.config(text=self.question + "?")

    def get_answer(self, event):
        widget = event.widget
        guess = widget.get()
        answer = self.qdict[self.question]
        if guess.lower() == answer.lower():
            self.score += 1
        self.label3.config(text="Score: {}".format(self.score))

        self.count += 1
        if self.count <= 10:
            self.ask()
        else:
            self.root.destroy()

Quiz(tk.Tk())
将tkinter作为tk导入
随机输入
课堂测验(传统框架):
定义初始化(自,根):
超级()
self.root=根
self.pack()
self.label=tk.label(self,text=“这是第1页”)
self.label.pack(side=“top”,fill=“x”,pady=10)
self.label1=tk.Label(self,text='')
self.label1.pack()
self.label2=tk.Label(self,text='')
self.label2.pack()
self.entry1=tk.Entry(self)
self.entry1.bind(“,self.get\u答案)
self.entry1.pack()
self.label3=tk.Label(self,text='')
self.label3.pack()
self.entry2=tk.Entry(self)
self.entry2.pack()
self.start_测验()
root.mainloop()
def start_测验(自我):
self.qdict={
“基-2数字系统”:“二进制”,
“基8数字系统”:“八进制”,
“Base-16数字系统”:“十六进制”,
}
self.qkeys=list(self.qdict.keys())
self.score=0
self.count=1
self.ask()
def ask(自我):
self.question=random.choice(self.qkeys)
self.label1.config(text=“Question{}”.format(self.count))
self.label2.config(text=self.question+“?”)
def get_应答(自身、事件):
widget=event.widget
guess=widget.get()
答案=self.qdict[self.question]
如果guess.lower()==answer.lower():
self.score+=1
self.label3.config(text=“Score:{}”.format(self.Score))
self.count+=1

如果self.count,则需要等待用户将其答案输入到条目小部件中。你的代码不能做到这一点。顺便说一句,如果您的代码是我们可以运行和修改的代码,那么会更容易帮助您。可以使用
按钮
而不是
标签
,当用户单击按钮时,您可以更改按钮中的文本。您可以使用
按钮(…,command=function\u name)
将功能分配给按钮,这很有帮助!现在我的代码工作了,我可以在更多帧之间切换。这个小测验也起作用了。
import tkinter as tk
import random

class Quiz(tk.Frame):
    def __init__(self, root):
        super().__init__(root)
        self.root = root
        self.pack()

        self.label = tk.Label(self, text="This is page 1")
        self.label.pack(side="top", fill="x", pady=10)
        self.label1 = tk.Label(self, text='')
        self.label1.pack()
        self.label2 = tk.Label(self, text='')
        self.label2.pack()
        self.entry1 = tk.Entry(self)
        self.entry1.bind("<Return>", self.get_answer)
        self.entry1.pack()
        self.label3 = tk.Label(self, text='')
        self.label3.pack()
        self.entry2 = tk.Entry(self)
        self.entry2.pack()

        self.start_quiz()
        root.mainloop()

    def start_quiz(self):
        self.qdict = {
            "Base-2 number system": "binary",
            "Base-8 number system": "octal",
            "Base-16 number system": "hexadecimal",
        }
        self.qkeys = list(self.qdict.keys())
        self.score = 0
        self.count = 1
        self.ask()

    def ask(self):
        self.question = random.choice(self.qkeys)
        self.label1.config(text="Question {}".format(self.count))
        self.label2.config(text=self.question + "?")

    def get_answer(self, event):
        widget = event.widget
        guess = widget.get()
        answer = self.qdict[self.question]
        if guess.lower() == answer.lower():
            self.score += 1
        self.label3.config(text="Score: {}".format(self.score))

        self.count += 1
        if self.count <= 10:
            self.ask()
        else:
            self.root.destroy()

Quiz(tk.Tk())