In this video I’ll show you how to create a deck of cards with images for Tkinter and Python.
We’ll shuffle the deck of cards, and deal out a card to a dealer and a player. Then we’ll create a button to deal out two more cards.
We’ll keep track of who has what cards, and when the deck is empty, the game will end.
This is a good foundation for creating just about any card game with Tkinter.
Python Code: deck.py
(Github Code)
from tkinter import *
import random
from PIL import Image, ImageTk
root = Tk()
root.title('Codemy.com - Card Deck')
root.iconbitmap('c:/gui/codemy.ico')
root.geometry("900x500")
root.configure(background="green")
# Resize Cards
def resize_cards(card):
# Open the image
our_card_img = Image.open(card)
# Resize The Image
our_card_resize_image = our_card_img.resize((150, 218))
# output the card
global our_card_image
our_card_image = ImageTk.PhotoImage(our_card_resize_image)
# Return that card
return our_card_image
# Shuffle The Cards
def shuffle():
# Define Our Deck
suits = ["diamonds", "clubs", "hearts", "spades"]
values = range(2, 15)
# 11 = Jack, 12=Queen, 13=King, 14 = Ace
global deck
deck =[]
for suit in suits:
for value in values:
deck.append(f'{value}_of_{suit}')
# Create our players
global dealer, player
dealer = []
player = []
# Grab a random Card For Dealer
card = random.choice(deck)
# Remove Card From Deck
deck.remove(card)
# Append Card To Dealer List
dealer.append(card)
# Output Card To Screen
global dealer_image
dealer_image = resize_cards(f'images/cards/{card}.png')
dealer_label.config(image=dealer_image)
# Grab a random Card For Player
card = random.choice(deck)
# Remove Card From Deck
deck.remove(card)
# Append Card To Dealer List
player.append(card)
# Output Card To Screen
global player_image
player_image = resize_cards(f'images/cards/{card}.png')
player_label.config(image=player_image)
#player_label.config(text=card)
# Put number of remaining cards in title bar
root.title(f'Codemy.com - {len(deck)} Cards Left')
# Deal Out Cards
def deal_cards():
try:
# Get the deler Card
card = random.choice(deck)
# Remove Card From Deck
deck.remove(card)
# Append Card To Dealer List
dealer.append(card)
# Output Card To Screen
global dealer_image
dealer_image = resize_cards(f'images/cards/{card}.png')
dealer_label.config(image=dealer_image)
#dealer_label.config(text=card)
# Get the player Card
card = random.choice(deck)
# Remove Card From Deck
deck.remove(card)
# Append Card To Dealer List
player.append(card)
# Output Card To Screen
global player_image
player_image = resize_cards(f'images/cards/{card}.png')
player_label.config(image=player_image)
#player_label.config(text=card)
# Put number of remaining cards in title bar
root.title(f'Codemy.com - {len(deck)} Cards Left')
except:
root.title(f'Codemy.com - No Cards In Deck')
my_frame = Frame(root, bg="green")
my_frame.pack(pady=20)
# Create Frames For Cards
dealer_frame = LabelFrame(my_frame, text="Dealer", bd=0)
dealer_frame.grid(row=0, column=0, padx=20, ipadx=20)
player_frame = LabelFrame(my_frame, text="Player", bd=0)
player_frame.grid(row=0, column=1, ipadx=20)
# Put cards in frames
dealer_label = Label(dealer_frame, text='')
dealer_label.pack(pady=20)
player_label = Label(player_frame, text='')
player_label.pack(pady=20)
# Create a couple buttons
shuffle_button = Button(root, text="Shuffle Deck", font=("Helvetica", 14), command=shuffle)
shuffle_button.pack(pady=20)
card_button = Button(root, text="Get Cards", font=("Helvetica", 14), command=deal_cards)
card_button.pack(pady=20)
# Shuffle Deck On Start
shuffle()
root.mainloop()

Add comment