点击使用Tkinter Python更改标签

时间:2017-04-03 19:37:06

标签: python

我编写了一个python代码,用于在每次单击后更改标签文本。现在我必须编写一个测试来确认每次点击后确实显示新文本。我环顾四周,无法找到办法。对于python和编程来说真的很新,并且知道有更简单的方法可以做一些代码,但是现在我还没有这些知识。

import Tkinter as tk

li="This Text Will Keep Changing Every Time You Click!".split()

def toggle_text():
    """Change text after each click """

    if lbl["text"] == "Hi!":
            lbl["text"] = li[0]    
    elif lbl["text"] == li[0]:
            lbl["text"] = li[1]   
    elif lbl["text"] == li[1]:
            lbl["text"] = li[2]   
    elif lbl["text"] == li[2]:
            lbl["text"] = li[3]    
    elif lbl["text"] == li[3]:
            lbl["text"] = li[4]   
    elif lbl["text"] == li[4]:
            lbl["text"] = li[5]   
    elif lbl["text"] == li[5]:
            lbl["text"] = li[6]   
    elif lbl["text"] == li[6]:
            lbl["text"] = li[7]
    elif lbl["text"] == li[7]:
            lbl["text"] = li[8]       
    else:
       lbl["text"] = "Hi!"

root = tk.Tk()
root.title("Click the Button")
button = tk.Button( text="Click", width=12, command=toggle_text)
button.pack(padx=100, pady=10)
lbl = tk.Label(root, text="Hi!")
lbl.pack()
root.mainloop()

代码不是最好的,但确实有效。我尝试使用for循环,但文本没有改变,所以我找到了一个解决方法。现在,如何测试每次点击后是否显示新文本?

1 个答案:

答案 0 :(得分:0)

为了更好地处理Tkinter,我建议您在一个类中设置GUI:

import Tkinter as tk
class DynamicLabel:

    TEXT_LIST="This Text Will Keep Changing Every Time You Click!".split() + ["Hi"]

    def __init__(self, toplvl):

        self.index = 0
        self.new_text = "Hi"
        self.old_text = "Hi"

        self.button = tk.Button(toplvl, text="Click", width=12, command=self.toggle_text)
        self.button.pack(padx=100, pady=10)

        self.label = tk.Label(toplvl, text="Hi")
        self.label.pack()

    def toggle_text(self):
        self.old_text = self.label['text']
        self.new_text = self.TEXT_LIST[self.index%len(self.TEXT_LIST)]
        self.label['text'] = self.new_text
        self.index += 1
        print "Text Changed: %r" % self.check_text()

    #This one may check if the text changed, returning True or False
    def check_text(self):
        return self.old_text != self.new_text

root = tk.Tk()
DynamicLabel(root)
root.mainloop() 

单击按钮时,验证应流式传输到终端。