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