PyQt5 Dersleri – Hayvan Adları Kelime Bulma Etkinliği

Bu etkinliğimizde rastgele gelen bir hayvan ismini tahmin etmemiz isteniyor. Gelen ipuçlarına göre tahmininizi geliştirebilrisiniz. Etkinliğimizi indirmek ve incelemek için İndir !

from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *

from random import randint

import sys

class Pencere(QWidget):
def __init__(self):
super(Pencere, self).__init__()
self.tutulanKelime = ""
self.setUI()
#self.setStyleSheet("QLabel { background-color : yellow}")

def setUI(self):
#Qwidget ın içerinde herşey alt alta sıralansın.
izgara = QGridLayout()

self.labSonuc = QLabel()
self.labSonuc.setAlignment(Qt.AlignCenter)
self.labSonuc.setFont(QFont("Calibri",22))
self.labSonuc.setText(self.rastgeleKelimeAl())

self.resim = QLabel()
self.resim.setPixmap(QPixmap("../PyQt5_Dersleri/icons/bilgi.png"))
self.resim.setAlignment(Qt.AlignHCenter)

self.lineTahmin = QLineEdit()
self.lineTahmin.setFixedWidth(160)

self.pushTahmin = QPushButton("Tahmin Et")
self.pushTahmin.setFixedSize(160,50)
self.pushTahmin.setFont(QFont("Calibri",10))
self.pushTahmin.clicked.connect(self.tahminEt)

self.pushYardim = QPushButton("Oyun Hakkında")
self.pushYardim.setFixedSize(160,50)
self.pushYardim.setFont(QFont("Calibri",10))
self.pushYardim.clicked.connect(self.acYardim)

self.labUyari = QLabel()
self.labUyari.setFont(QFont("Calibri",11))

izgara.addWidget(self.labSonuc,0,1,Qt.AlignCenter)
izgara.addWidget(self.lineTahmin,1,1,Qt.AlignCenter)
izgara.addWidget(self.labUyari,2,1,Qt.AlignCenter)
izgara.addWidget(self.pushTahmin, 3, 1,Qt.AlignCenter)
izgara.addWidget(self.resim,4,1,Qt.AlignCenter)
izgara.addWidget(self.pushYardim, 5, 1,Qt.AlignCenter)

# QWidget imizin Pencere özellikleri girilmekte.
self.setLayout(izgara)
self.setFixedSize(400,400)
self.setGeometry(1000, 100, 300, 200)
self.setWindowIcon(QIcon("../PyQt5_Dersleri/icons/bilgi.png"))
self.setWindowTitle("Kelime Bulmaca Oyunu")
self.show()

def rastgeleKelimeAl(self):
# Rastegele kelime belirlerken tahmin sayısı sıfırlanmalı.
self.tahminSayisi = 0
kelimeListesi = ["aslan", "kaplan", "serçe","şempanze","maymun","deve","lama","fare"]

self.tutulanKelime = kelimeListesi[randint(0, len(kelimeListesi) - 1)]
self.sonuc = ["*" for x in range(0, len(self.tutulanKelime))]
self.sonuc = "".join(self.sonuc)

return self.sonuc

def tahminEt(self):
# Buttona her basışta tahmin sayısı 1 artmaktadır.
self.tahminSayisi +=1

# Her 3 saniyede bir tahmin buttonuna basıldığında çalışmaya başlayacak ve 3 saniye sonra Uyarı label ı silinecektir.
self.baglanTimer()

tahmin = self.lineTahmin.text().lower()
ind = 0
son = list(self.sonuc)
print(son)
try:
if len(tahmin) == len(self.tutulanKelime):
for harf in self.tutulanKelime:
if harf == tahmin[ind]:
if son[ind] == "*":
son[ind] = harf
else:
son[ind] = "*"
ind += 1
else:
self.labUyari.setText("Girdiğiniz kelime ile tutulan sayının karakter sayısı tutmuyor !")
except:
print("HAta")

sonucBirles = "".join(son)
self.labSonuc.setText(sonucBirles)

if sonucBirles == tahmin:
self.labUyari.setText(f"Tebrikler ! {self.tahminSayisi} denemede bildiniz.")
self.mesajAl()

self.lineTahmin.setText("")

def mesajAl(self):
mesaj = QMessageBox()
mesaj.setWindowTitle("UYARI !")
mesaj.setText("Yeniden Oynamak istediğinizden emin misiniz?")
mesaj.setIcon(QMessageBox.Warning)
mesaj.setInformativeText("Oynayalım mı yeniden ?")
mesaj.setDetailedText("Yeniden oynamak isterseniz Yes Tuşunu kullanmak isteyebilirsiniz !")
mesaj.setStandardButtons(QMessageBox.Yes | QMessageBox.No)
mesaj.setIcon(QMessageBox.Warning)

mesaj.buttonClicked.connect(self.mesajCevap)

mesaj.exec()

def mesajCevap(self,q):
if q.text() == "&Yes":
self.labSonuc.setText(self.rastgeleKelimeAl())
else:
app.exit()

# Uyarı Label ındaki sayı 3 saniye gözükmeli ve sonra bu label boşaltılmalı.
def baglanTimer(self):
self.timer = QTimer()
self.timer.timeout.connect(self.lblSil)
self.timer.start(3000)

#Yukarıda ki timer nesnesinin zamanı dolduğunda uyarı labelı içeriği tamamen silinecektir.
def lblSil(self):
self.labUyari.setText("")

def acYardim(self):
self.diyalog = QDialog()
self.diyalog.setWindowTitle("Oyun Hakkında")
self.diyalog.setFixedSize(200,200)
text = QLabel("Yukarıdaki Tahmin Kutucuğunu \nHayvan adı tahmin ettikten sonra \ntahmin et butonuna basınız.\nEn kısa tekrarda hayvan \nadını doğru bilmeniz gerekiyor.",self.diyalog)
text.move(10,50)
buttonKapat = QPushButton(self.diyalog)
buttonKapat.setText("Kapat")
buttonKapat.move(70, 150)
buttonKapat.clicked.connect(self.kapat)

self.diyalog.exec()

def kapat(self):
self.diyalog.close()

if __name__ == "__main__":
app = QApplication(sys.argv)
pencere = Pencere()
sys.exit(app.exec())