tkinter GUI

时间:2016-02-14 20:13:48

标签: python-3.x tkinter raspberry-pi2

我正在开发一个程序,可以阻止用户在一段随机时间后更改标签。有两个按钮,开始和下一个,当用户按下开始时,开始按钮被销毁,但应该在随机选择的时间后返回。我试图让开始按钮触发一个启动计时器的标志。当计时器达到某个值(count_to + 1)时,标志应该变为零,开始按钮应该重新出现,标签应该读取结束。标志似乎永远不会切换,计时器永远不会启动。谁能告诉我我做错了什么?也许我指向一个解决方案?听到的是代码:

import sys
from tkinter import *
import random
import time

mGui = Tk()
mGui.geometry('450x450+200+200')
mGui.title('Letters')

stored = ['A', 'b', 'c', 'd']
count_down = [10,20,30,40,50,60]
global count_to
global countFlag
count_to = IntVar()
countFlag = 0
Sec = 0


def run_counter():
    count_to = random.choice(count_down)
    while countFlag == 1:
        Sec+=1
        print(sec)
        if Sec == count_to+1:
            countFlag = 0
            newbutton.destroy()
            startbutton.grid(row=2,column=1)
            phrase.configure(text='End')
    return

def change_phrase():
    fish = StringVar()
    fish = random.choice(stored)
    stored.remove(fish)
    phrase.configure(text=fish)
    #to help with debug
    print(countFlag)
    print(Sec)
    print(count_to)
    return

def start_count():
    countFlag = True
    count_to = random.choice(count_down)
    print(countFlag)
    startbutton.destroy()
    run_counter
    return


phrase = Label(mGui,text='Letter',fg='red',bg='blue')
phrase.grid(row=0,column=0, sticky=S,columnspan=2)


startbutton =Button(mGui, text='start',fg='black',bg='green',command=start_count)
startbutton.grid(row=2,column=1)
newbutton = Button(mGui,text='NEXT',fg='black',bg='red',command=change_phrase)
newbutton.grid(row=2,column=0)

#mEntry = Entry(mGui,textvariable=ment)
#mEntry.grid(row=3,column=0)

mGui.mainloop()

1 个答案:

答案 0 :(得分:0)

一旦你学会使用类,Tkinter编程变得更加混乱和混乱。使用Tkinter的after()方法每隔“x”时间调用一个函数,直到分配的时间结束。

import random
import sys

if sys.version_info[0] < 3:
    import Tkinter as tk     ## Python 2.x
else:
    import tkinter as tk     ## Python 3.x

class ButtonDisappear():
    def __init__(self, root):
        self.root=root
        self.startbutton=tk.Button(root, text='disappear', fg='black',
                                   bg='green', command=self.disappear)
        self.startbutton.grid(row=2,column=1)
        self.lab=tk.Label(self.root, text="", bg="lightblue")

    def disappear(self):
        ## remove button
        self.startbutton.grid_forget()
        ## grid label for time
        self.lab.grid(row=0, column=0)
        ## "random" number
        self.stop_time=random.choice([1, 2, 3, 4, 5])*1000
        self.elapsed=0
        self.root.after(100, self.time_it)

    def time_it(self):
        self.elapsed += 100
        ## function calls itself until time has finished
        if self.elapsed < self.stop_time:
            self.lab["text"]="%d of %d" % (self.elapsed, self.stop_time)
            self.root.after(100, self.time_it)
        ## time elapsed so remove label and restore button
        else:
            self.lab.grid_forget()
            self.startbutton.grid(row=2,column=1)


m_gui = tk.Tk()
m_gui.geometry('450x450+200+200')
m_gui.title('Letters')
B=ButtonDisappear(m_gui)
m_gui.mainloop()