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

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.
#3
vote_ok
von Gisbert5020 (3120 Punkte) - 11.06.2018 um 09:50 Uhr
Quellcode ausblenden Python-Code
import sys
import random
from PyQt5.QtWidgets import QApplication, QPushButton, QWidget, QLabel, QSpacerItem,\
                            QGridLayout, QHBoxLayout, QVBoxLayout, QSizePolicy
from PyQt5.QtGui import QPixmap
from PyQt5.QtCore import Qt
LISTE = []
SORTLISTE=[]

 
class Fenster(QWidget):
    
    def __init__(self, parent=None):
        super(Fenster, self).__init__(parent)
        self.kartenLaden()
        self.initUI()         

    def initUI(self):
        self.hlayout = QHBoxLayout()
        self.glayout = QGridLayout()
        self.glayout.setContentsMargins(5, 5, 5, 5)
        self.glayout.setSpacing(3)
        self.vlayout = QVBoxLayout()
        self.label =[] 
        
        for i in range(52):
                self.label.append(QLabel(self))
                self.label[i].setObjectName('label'+str(i))
                myPixmap = QPixmap(SORTLISTE[i])
                self.label[i].setPixmap(myPixmap)
                self.label[i].setScaledContents(True)
                self.label[i].setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
                j = i//13
                k = i%13
                self.glayout.addWidget(self.label[i],j,k)

        self.sortieren = QPushButton("Karten sortieren")
        self.sortieren.setFixedWidth(100)
        self.vlayout.addWidget(self.sortieren)
        self.mischen = QPushButton(" Karten mischen ")      
        self.mischen.setFixedWidth(100)
        self.vlayout.addWidget(self.mischen)
        self.spacerItem = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding)
        self.vlayout.addItem(self.spacerItem)
        self.hlayout.addLayout(self.glayout)
        self.hlayout.addLayout(self.vlayout)
        self.setLayout(self.hlayout)

        self.sortieren.clicked.connect(self.kartenSortieren)
        self.mischen.clicked.connect(self.kartenMischen)
               
    def kartenLaden(self):
        for i in range(56):
            if i == 10 or i==24 or i==38 or i==52:
                continue
            if i < 10:
                LISTE.append('cardpics/' + '0' + str(i) + '.png')
            else:
                LISTE.append('cardpics/' + str(i) + '.png')
        SORTLISTE.extend(LISTE[0:26])
        SORTLISTE.extend(LISTE[39:52]) 
        SORTLISTE.extend(LISTE[26:39])

    def kartenSortieren(self):
        for i in range(52):
            myPixmap = QPixmap(SORTLISTE[i])                                      
            self.label[i].setPixmap(myPixmap)
            
    def kartenMischen(self):
        random.shuffle(LISTE)
        for i in range(52):
            myPixmap = QPixmap(LISTE[i])                                       
            self.label[i].setPixmap(myPixmap)
        
if __name__ == '__main__':
    app = QApplication(sys.argv)
    fenster=Fenster()
    fenster.show()
    app.exec_()

Kommentare:

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

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