How can I make the button text change, from text t

2019-03-04 20:57发布

I'm using tkinter library for the GUI. Basically I'm creating 4 buttons using a for loop, each having a random number as their text. Now I got stuck when trying to implement a method which allows the button text to appear as a number and then change to nothing in a second or so (After this is done the next button would do the same process). So the method would allow each button to flash it's number and moves on to the next (Until all the buttons flashed their numbers for one time).

This is the code which I got so far

from tkinter import *
from tkinter.messagebox import showinfo
from random import randint

def set_colors(a):
    if a == 0:
        return "red"
    elif a == 1:
        return "green"
    elif a == 2:
        return "blue"
    elif a == 3:
        return "yellow"

def set_random():
    random_int = 0
    random_int = randint(0, 100)
    return random_int

LARGE_FONT = ("Verdana",20)
color = 0

root = Tk()
frame = Frame(root)
root.title("Test")
root.geometry("200x200")
root.resizable(0, 0)

Grid.rowconfigure(root, 0, weight=1)
Grid.columnconfigure(root, 0, weight=1)
frame.grid(row=0, column=0, sticky=N + S + E + W)
grid = Frame(frame)
grid.grid(sticky=N + S + E + W, column=0, row=7, columnspan=2)
Grid.rowconfigure(frame, 7, weight=1)
Grid.columnconfigure(frame, 0, weight=1)



for x in range(2):
    for y in range(2):  
        rand_no = set_random()
        btn = rand_no
        btn = Button(frame, text=btn, bg=set_colors(color) , font=LARGE_FONT)
        btn.grid(column=x, row=y, sticky=N + S + E + W)
        color += 1

for x in range(2):
  Grid.columnconfigure(frame, x, weight=1)

for y in range(2):
  Grid.rowconfigure(frame, y, weight=1)

root.mainloop()

A picture of the output.So far I figured that I need to import the time library and use the sleep() method to get the delay needed. But I still need to:

Allow the panel to load with the buttons (Without any numbers) Then the buttons start to flash the number one after each other until all buttons flashed the number for one time.

Help

1条回答
等我变得足够好
2楼-- · 2019-03-04 21:49

Memory is everything !

#!/usr/bin/python
import os
import thread,time
import random

import math

try:
    dirs = os.path.dirname(os.__file__).lower()
    if "python2" in dirs:
        from Tkinter import *
    elif "python3" in dirs:
        from tkinter import *
except Exception,e : print e

LARGE_FONT = ("Verdana",20)
color = 0

root = Tk()
frame = Frame(root)
root.title("Very Hard Memory Game !")
root.geometry("200x200")
root.resizable(0, 0)

Grid.rowconfigure(root, 0, weight=1)
Grid.columnconfigure(root, 0, weight=1)
frame.grid(row=0, column=0, sticky=N + S + E + W)
grid = Frame(frame)
grid.grid(sticky=N + S + E + W, column=0, row=8, columnspan=2)
Grid.rowconfigure(frame, 8, weight=1)
Grid.columnconfigure(frame, 0, weight=1)

class _zo : pass
zo = _zo()
zo.foo = []
zo.pick = None
zo.lq =[]
zo.a = {}
zo.level = 0
zo.lev_list = [4,9,16,25,36,49,64,81]
zo.miss = 0


def get_num(num):
    h = sorted(zo.a.keys())
    p = zo.foo.index(num)
    if num in zo.lq and num == zo.pick :
        zo.a["%0.2d_%d"%(p,num)].config(text=num, state="disabled")

        if len(zo.lq) > 1 :
            zo.lq.remove(num)
            zo.pick = ( random.choice(zo.lq))
            zo.a["my_lab"].config(text= "where is %d ?" % zo.pick)
        elif len(zo.lq) == 1:
            zo.lq = []
            zo.foo = []
            zo.pick = None
            zo.level = zo.level +1
            for s in zo.a.keys() :
                zo.a[s].destroy()
            zo.a = {}
            do_cube(zo.lev_list[zo.level])


    else:
        zo.miss += 1
        zo.a["my_lab"].config(text="Try again for (%d)!(Miss:%s)"%(zo.pick,zo.miss))    





def timot(hu):
    time.sleep(2)
    n = sorted(zo.a.keys())   

    for s in n :
        if not s.startswith("my"):
            y = zo.foo[n.index(s)]
            zo.a[s].config(text=y)
            time.sleep(1)
            zo.a[s].config(text="")
    zo.pick = random.choice(zo.foo)
    for j in n: zo.a[j].config(state="normal")
    zo.a["my_lab"].config(text="where is %d ?" %zo.pick)

def do_cube(many):
    bx = int(math.sqrt(many))
    w = (200+(200*(zo.level*0.15)))
    root.geometry("%dx%d+400+200" %(w,w+(20+(5*zo.level))))


    color = "orange","red","green","blue","yellow","brown","dodgerblue","pink"
    zo.foo  = random.sample(range(100),many)
    zo.lq = [e for e in zo.foo]

    for x in range(bx):
        for y in range(bx):
            ind = (x*bx) + y  
            rand_no = zo.foo[ind]

            butn = Button(frame, bg=color[x], command= lambda rand_no=rand_no:get_num(rand_no), font=LARGE_FONT,state="disabled")
            butn.grid(column=x, row=y, sticky=N + S + E + W)

            zo.a["%0.2d_%d"%(ind,rand_no)] = butn

    for x in range(bx):
        Grid.columnconfigure(frame, x, weight=1)
    for y in range(bx):
        Grid.rowconfigure(frame, y, weight=1)

    zo.a["my_lab"] = Label(root,text="ready !")
    zo.a["my_lab"].grid(column=0, row=bx+1, sticky=N + S + E + W,columnspan = bx)


    thread.start_new_thread(timot,(None,))


do_cube(zo.lev_list[zo.level])


root.mainloop()
查看更多
登录 后发表回答