首页 > 解决方案 > 标签出现缓冲,但 Python 代码运行时未缓冲

问题描述

我目前正在 Sublime Text 上使用 Python3 创建一个二十一点游戏。当庄家一张一张地抽牌时,您可以在控制台中看到它是一张一张地抽牌,使用after()调用不同的函数,但在实际的 GUI 中,所有牌都是同时出现的,就在最后。

以下是部分代码:

def d_pick_a_card():
    global d_hand
    global card
    global deck
    global d_counter
    global cvpath
    global cardvalue 
    global d_card_relx
    global cv 
    cardvalue = 0
    card = deck.pop(0)
    print('Drew',card)
    if card == 'J':
        cardvalue = 10
        cvpath = 11
    elif card == 'Q':
        cardvalue = 10
        cvpath = 12
    elif card == 'K':
        cardvalue = 10
        cvpath = 13
    elif card == 'A':
        cardvalue = 11
        cvpath = 14
    else:
        cardvalue = card
        cvpath = card
    d_hand.append(cardvalue)
    random.shuffle(deck)
    random.shuffle(deck)
    d_counter += 1

#THIS IS THE FUNCTION THAT SHOWS THE VISUAL CARD ON THE GUI
def d_pick_vis(cardvalue, d_counter):
    global dealers_turn
    global card_frame
    card_frame = tk.Label(top, image = cv[cvpath]) 
    card_frame.place(relx= d_card_relx[d_counter], rely=.18, anchor='center')
    widgetList.append(card_frame)

def dturnfunc():
    global dealersturn_img
    holding_img1.pack_forget()
    dealersturn_img = tk.Label(top, image = dealersturn)
    dealersturn_img.img = dealersturnpath
    dealersturn_img.pack()
    top.after(500, dealers_turn())

def dealers_turn():
    global cardvalue
    global d_counter
    d_pick_a_card()
    d_pick_vis(cardvalue, d_counter)
    print("The Dealers hand is:", sum(d_hand))
    print('\n')
    if sum(d_hand) <= sum(hand):
        print('Dealer picks again')
        top.after(500,dealers_turn_2())
    elif sum(d_hand) == 21:
        print('Dealer Wins')
    elif sum(d_hand) >= 22:
        print('You win!')
    else:
        print('Dealer Wins')

标签: pythonuser-interfacetkinterbuffered

解决方案


您正在调用 to 中的函数after(),而不是这样做:

top.after(500, dealers_turn)  # Note: just pass in the name of the function

...

top.after(500, dealers_turn_2)

您需要传入对该函数的引用,并在时间过去后将该after()函数传递给该函数。call

当你自己调用函数时,你传入了返回值,None我猜这可能是after()忽略的。


推荐阅读