card_display_3.py

# =========================================================
# Display card images (using labels)
# the cards displayed are picked randomly and new
# random cards can be displayed by clicking on the
# "Cards" button
# =========================================================
#
# Uses pillow to manipulate/display images
# (PIL is a discontinued project)
#
# --- remove PIL if installed
#
# sudo apt-get remove python-pil
# sudo apt-get remove python3-pil
# sudo pip remove PIL
# sudo pip3 remove PIL
#
# --- install Pillow
#
# sudo pip install Pillow
# sudo pip3 install Pillow
#
# =========================================================

import sys
from random import randint

if sys.version_info.major is 3:
    import tkinter as tk
    py3 = True
else:
    import Tkinter as tk
    py3 = False

from PIL import Image
import card_values as cv

# ---------------------------------------------------------
# --- global variables
# ---------------------------------------------------------

buttonFont = ('arial', 15, 'bold')
labelFont  = ('arial', 18, 'bold')
cardDir    = 'cards/'

# ---------------------------------------------------------
# --- functions
# ---------------------------------------------------------

def quit():
    sys.exit()

def newCards():
    new1 = tk.PhotoImage(file=randomCard(cards))
    l1.configure(image=new1)
    l1.card = new1
    new2 = tk.PhotoImage(file=randomCard(cards))
    l2.configure(image=new2)
    l2.card = new2

def randomCard(cards):
    i = randint(0, len(cards)-1)
    return cardDir + cards[i]

# ---------------------------------------------------------
# --- main
# ---------------------------------------------------------

# --- card image files

cards = cv.cardsvalues.keys()

# --- TK root window

root = tk.Tk()
root.title('Label Card Test')

root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)

# --- create a frame to put everything in

f = tk.Frame(root, relief='flat')
f.grid(row=0, column=0, sticky=tk.N+tk.S+tk.E+tk.W)

f.grid_rowconfigure(0, weight=1)
f.grid_columnconfigure(0, weight=1)

# --- create a title label

ft = tk.Frame(f, relief='flat')
ft.grid(row=0, column=0)

ft.grid_rowconfigure(0, weight=0)
ft.grid_columnconfigure(0, weight=1)

lt = tk.Label(ft, text='Card Images', font=labelFont, anchor=tk.N)
lt.grid(row=0, column=0)

# --- read images and create photoImage objects

img1 = tk.PhotoImage(file=randomCard(cards))
img2 = tk.PhotoImage(file=randomCard(cards))

# --- get images width,height

w1 = img1.width()
h1 = img1.height()
w2 = img2.width()
h2 = img2.height()

# --- create a frame to hold labels

fl = tk.Frame(f, relief='flat')
fl.grid(row=1, column=0)

fl.grid_rowconfigure(0, weight=1)
fl.grid_columnconfigure(0, weight=1)

# --- create labels to display images

l1 = tk.Label(fl, width=w1, height=h1, anchor=tk.CENTER, image=img1)
l1.card = img1
l1.grid(row=0, column=0)

l2 = tk.Label(fl, width=w2, height=h2, anchor=tk.CENTER, image=img2)
l2.card = img2
l2.grid(row=0, column=1)

# --- Buttons

fb = tk.Frame(f)
fb.grid(row=2, column=0)

fb.grid_rowconfigure(0, weight=0)
fb.grid_columnconfigure(0, weight=1)

bq = tk.Button(fb, text='Quit', font=buttonFont, command=quit)
bq.pack(side=tk.LEFT)

bn = tk.Button(fb, text='Cards', font=buttonFont, command=newCards)
bn.pack(side=tk.LEFT)

# --- main loop

tk.mainloop()