2015-08-15 35 views
0

我爲GUI使用tkinter庫。基本上我使用for循環創建4個按鈕,每個按鈕都有一個隨機數作爲文本。現在我試圖實現一種方法,它允許按鈕文本顯示爲一個數字,然後在第二秒左右變爲無(此操作完成後,下一個按鈕將執行相同的過程)時卡住了。因此,該方法將允許每個按鈕閃爍它的數字,並移動到下一個(直到所有按鈕閃爍一次他們的數字)。如何讓按鈕文本從文本更改爲空名稱並延遲?

這是我到目前爲止

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

的output.So的圖片爲止,我計算過,我需要進口的時間庫,並使用了sleep()方法來獲得所需的延遲代碼。但我仍然需要:

允許面板使用按鈕加載(沒有任何數字) 然後按鈕開始閃爍數字一個接一個,直到所有按鈕閃爍一次數字。

Help

回答

1

記憶就是一切!

#!/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() 
+0

給我一個錯誤:/回溯(最近通話最後一個): 文件 「C:\用戶\新\我的文檔\ LiClipse工作區\ Lesson_1 \ Test.py」,2號線,在 進口線程,時間 ImportError:沒有名爲'thread'的模塊 – ShrtTth

+0

想象出來,但是這段代碼中的數字不是一個接一個地閃爍起來 – ShrtTth

+0

調整了一些代碼並得到了我想要的謝謝! – ShrtTth