Python 3.x tkinter GUI中控件的定时可用性

Python 3.x tkinter GUI中控件的定时可用性,python-3.x,tkinter,raspberry-pi2,Python 3.x,Tkinter,Raspberry Pi2,我正在开发一个程序,它可以阻止用户在一段随机时间后更改标签。有两个按钮,“开始”和“下一步”,当用户按下“开始”按钮时,“开始”按钮被销毁,但应在随机选择的时间后返回。我试图让开始按钮触发一个启动计时器的标志。当计时器达到某个值(count_至+1)时,标志应变为零,开始按钮应重新出现,标签应为“结束”。标志似乎从未切换,计时器也从未启动。谁能告诉我我做错了什么?也许能给我指出一个解决办法?下面是代码: import sys from tkinter import * import random

我正在开发一个程序,它可以阻止用户在一段随机时间后更改标签。有两个按钮,“开始”和“下一步”,当用户按下“开始”按钮时,“开始”按钮被销毁,但应在随机选择的时间后返回。我试图让开始按钮触发一个启动计时器的标志。当计时器达到某个值(count_至+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()

一旦您学会使用类,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()
随机导入
导入系统
如果系统版本信息[0]<3:
将Tkinter作为tk##Python 2.x导入
其他:
将tkinter作为tk##Python 3.x导入
类ButtonDisappear():
定义初始化(自,根):
self.root=根
self.startbutton=tk.Button(根,text='消失',fg='黑色',
bg='green',command=self.define)
self.startbutton.grid(行=2,列=1)
self.lab=tk.Label(self.root,text=”“,bg=“lightblue”)
def消失(自我):
##移除按钮
self.startbutton.grid_忘记()
##时间网格标签
self.lab.grid(行=0,列=0)
##“随机”数
自停时间=随机选择([1,2,3,4,5])*1000
self.appeased=0
self.root.after(100,self.time\u it)
定义时间(自身):
自运行时间+=100
##函数调用自身,直到时间结束
如果自运行时间<自停止时间:
self.lab[“text”]=%d个,共%d个%(self.passed,self.stop\u时间)
self.root.after(100,self.time\u it)
##时间已过,因此请删除标签并还原按钮
其他:
self.lab.grid_忘记()
self.startbutton.grid(行=2,列=1)
m_gui=tk.tk()
几何图形(“450x450+200+200”)
m_gui.标题(“字母”)
B=按钮式耳机(m_gui)
m_gui.mainloop()

我尝试了这一点,但我收到了两个错误,第一个是错误的几何体说明符,因此我将其注释掉,因为此时我不太关心程序的几何体。第二个是关于第37行的:
B=ButtonDisappear(mugui)
。我接收到
TypeError:object.\u new\uu()不接受任何参数
。知道我做错了什么吗?我使用的是Python3。我无法说出代码中的内容。