Python Tkinter音频测验

Python Tkinter音频测验,python,tkinter,Python,Tkinter,我想用Tkinter(Python 2.7)创建一个简单的测验。我有一个音频列表,对于每个音频,我希望有以下内容: 重放音频的按钮 用户可以在其中介绍任何文本的条目 当条目中的文本是音频中歌曲的标题时,默认显示“不正确”和“正确!”的标签 我设法创建了这三个对象,但我很难根据条目文本更新标签:有很多引用,但我无法让它工作。我想我不太了解循环是如何工作的以及事件是何时触发的 你能提供一个简单的例子来说明我的意图吗?我在下面提供了我的代码,但它很可能过于臃肿(我对Tkinter和面向对象编程完全是新

我想用Tkinter(Python 2.7)创建一个简单的测验。我有一个音频列表,对于每个音频,我希望有以下内容:

  • 重放音频的按钮
  • 用户可以在其中介绍任何文本的条目
  • 当条目中的文本是音频中歌曲的标题时,默认显示“不正确”和“正确!”的标签
  • 我设法创建了这三个对象,但我很难根据条目文本更新标签:有很多引用,但我无法让它工作。我想我不太了解循环是如何工作的以及事件是何时触发的

    你能提供一个简单的例子来说明我的意图吗?我在下面提供了我的代码,但它很可能过于臃肿(我对Tkinter和面向对象编程完全是新手),因为我基本上是从互联网上的现有示例构建它的:

    #!/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\u label.set
    开头的行放错了位置,但我真的不知道应该在哪里写它以及如何更新标签

    提前感谢。

    您可以使用来实现:

    当条目中的文本是音频中歌曲的标题时,默认显示“不正确”和“正确!”的标签

    trace
    'w'
    选项一起使用时,只要附加到的变量类(
    BooleanVar
    DoubleVar
    IntVar
    StringVar
    )被重新写入,它就会调用一个方法。下面是一个示例,用于检查条目中的文本是否为
    “有效字符串”

    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()
    

    展示您尝试过的内容,即使它不起作用,我们也会尝试纠正您的错误,因此您学到的不仅仅是复制答案。我可能没有解释自己:我尝试的是我上面提供的代码。我的意思是,我拿了一个不相关的简单Tkinter例子(这一个:)作为模型。谢谢,Nae。这正是我所需要的功能。不过,我会有几个音频,如果有一个适用于所有音频的check_输入功能就太好了。你知道如何实现它吗?@A.bellmun不确定。开始播放时,只需将
    音频名称
    保存在全局变量中,然后将
    有效字符串
    替换为
    音频名称