Python :: Aufgabe #175 :: Lösung #1

3 Lösungen Lösungen öffentlich
#175

Mischen von Spielkarten

Anfänger - Python von hollst - 14.01.2018 um 16:42 Uhr
Man schreibe eine GUI-Anwendung, die einen 52er Kartensatz mischt und die entstandene Reihenfolge anzeigt (BILD 2).
Die Anwendung soll zwei Befehlsknöpfe haben: MISCHEN und RESET. Mit RESET soll die Default-Reihenfolge angezeigt werden (BILD 1).

Einen Satz von Image-Dateien der Spielkarten könnt ihr z. B. unter http://www.nongnu.org/cardpics/cardpics.en.html herunterladen und darüber frei verfügen, sofern ihr eure Lösung nicht für kommerzielle Zwecke vermarkten wollt.
#1
vote_ok
von 0 (0 Punkte) - 18.02.2018 um 17:49 Uhr
Quellcode ausblenden Python-Code
#if not installed PIL:
#python-m pip install PIL 

#!!!
#card_mix.py for #175 trainyourprogrammer!!! thanks hollst!
#!!!

#dir with Cards in the directory of card_mix.py
CARD_DIR="cards"
WIDTH,HEIGHT=50,100#size of the cards-adjustable!


from os import getcwd,listdir,chdir,path
from tkinter import *
from PIL import Image, ImageTk
from random import shuffle
class Cards():
    def __init__(self):
        self.fenster=Tk()
        self.fenster.title("Cards")
        Button(self.fenster,command=self.mix,text="Mix").pack(side=LEFT,expand=1)
        Button(self.fenster,command=self.reset,text="Reset").pack(side=LEFT,expand=1)
        self.frame=Frame(self.fenster)
        self.neu()
        self.reset()
        self.fenster.mainloop()
    def neu(self):
        dir=getcwd()
        
        card_dir=path.join(dir,CARD_DIR)
        
        cards=listdir(card_dir)
        self.anz=len(cards)-1
        chdir(card_dir)
        self.image_list=[]
        for card in cards:
            img=Image.open(card)
            img=img.resize(size=(WIDTH,HEIGHT))
            img=ImageTk.PhotoImage(img)
            self.image_list.append(img)
    def reset(self):
        self.make_labels(self.image_list)
    def make_labels(self,list):
        self.frame.destroy()
        self.frame=Frame(self.fenster)
        x,y=0,0
        x_max=self.anz//4
        for card in list:
            Label(self.frame,image=card).grid(column=x,row=y)
            x+=1
            if x==x_max:
                y+=1
                x=0
        
        self.frame.pack(side=BOTTOM)
    def mix(self):
        labels=[]
        for image in self.image_list:
            labels.append(image)
        
        shuffle(labels)
        self.make_labels(labels)
            
Cards()
        

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben