Python :: Aufgabe #175 :: Lösung #1
3 Lösungen
#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.
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
von 0 (0 Punkte)
- 18.02.2018 um 17:49 Uhr
#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
Seite 1 von 0
1
