我想用Tkinter(Python 2.7)创建一个简单的测验。我有一个音频列表,对于每个音频,我想要有以下内容:
我设法创建了三个对象,但是我很难根据条目文本尝试更新标签:周围有许多引用,但我无法使其工作。我想我不太了解循环如何工作以及何时触发事件。
你能提供一个能做我想做的最小例子吗?我在下面提供了我的代码,但它很可能会膨胀(我完全是Tkinter和面向对象编程的新手),因为我基本上是从Internet上的现有示例构建的:
#!/usr/bin/env python
#encoding=utf-8
import Tkinter as tk
import vlc
tk.Tk()
var_entry= tk.StringVar()
var_label= tk.StringVar()
class Application(tk.Frame):
def __init__(self, master=None):
tk.Frame.__init__(self, master)
self.grid()
self.createWidgets()
def createWidgets(self):
self.audio= tk.Button(self,text='Play Audio',command=lambda:vlc.MediaPlayer('./audios/my_audio.mp3').play())
self.audio.grid()
self.entry = tk.Entry(self,width=50,textvariable=var_entry)
self.entry.grid()
var_label.set('Correct!\n' if var_entry.get()=='my_audio_title' else 'Incorrect\n')
self.label = tk.Label(self,textvariable=var_label)
self.label.grid()
self.quitButton = tk.Button(self, text='Quit',command=self.quit)
self.quitButton.grid()
app = Application()
app.master.title('Audio Quiz')
app.mainloop()
我确信从var_label.set
开始的行是错过的,但我不知道应该在哪里写它以及如何更新标签。
提前致谢。
你可以使用trace
来实现:
默认显示“不正确”的标签和“正确!”只要条目中的文本是音频中歌曲的标题。
当trace
与'w'
选项一起使用时,只要重写它所附加的变量类(BooleanVar
,DoubleVar
,IntVar
,StringVar
),它就会调用一个方法。下面是一个示例,检查条目中的文本是否为"Valid String"
:
import tkinter as tk
def check_entry(*args):
global entry, entry_var, label
if entry_var.get() == "Valid String":
label['text'] = "Correct"
else:
label['text'] = "Incorrect"
root = tk.Tk()
entry_var = tk.StringVar()
label = tk.Label(root)
entry = tk.Entry(root, textvariable=entry_var)
label.pack()
entry.pack()
entry_var.trace('w', check_entry)
root.mainloop()