Метки выглядят буферизованными, но код Python работает без буферизации - PullRequest
0 голосов
/ 04 апреля 2020

В настоящее время я создаю игру в блэкджек, используя Python3 в Sublime Text. Когда карты дилеров вытягиваются одна за другой, вы можете видеть, как они вытягиваются одна за другой в консоли, используя 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')

1 Ответ

1 голос
/ 04 апреля 2020

Вы вызываете функции в своих вызовах на 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() игнорирует.

...