Nesne isimlerini otomatik verme

aşağıdaki gibi 5x5 olmak üzere 25 adet buton oluşturdum. fakat butonların hepsinin ismi “butonum” olduğu için tek tek erişerek işlem yaptıramıyorum. butonum01, butonum02, … şeklinde isimlenerek oluşmalarını sağlayabilir miyim? eğer bu mümkün değilse sorunu nasıl çözebilirim?

        butonNo = 1
        for satir in range(5):
            for sutun in range(5):
                self.butonum = QPushButton(str(butonNo), self)
                self.butonum.setToolTip("secilen")
                self.butonum.move(sutun*74, satir*22)
                self.butonum.clicked.connect(self.on_click)
                butonNo += 1

Oluşturup listeye atın. İsterseniz 5 tane liste oluşturun. Butonlara ulaşmak için listeleri kullanın. (Tek tek isimlendirmekten daha rahat. Tecrübeyle sabit.)

1 Beğeni

Bu sayfa yardımcı olabilir sanırım. Yine de özet geçmek gerekirse, butonları bir sözlük içerisinde saklayabilir ve bunlara bu şekilde erişebilirsiniz.

butonları sözlük içine attım ama kullanıcının sözlüğün hangi elemanı olan butona tıkladığını nasıl tespit edeceğim?

aslında yapmak istediğim şey basılan butonun üzerindeki texti değiştirmek.

Mesela her buton, tıklandığı zaman aynı fonksiyona gidiyor değil mi? Bu durumda bu butonların ayırt edici bir özelliği olması lazım. Mesela bu butonların üzerindeki yazılara bakarak ayırt edebilirsiniz. Ya da başka ayırt edici bir özelliği varsa onu kullanabilirsiniz.

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import pyqtSlot

class App(QWidget):

    def __init__(self):
        super().__init__()

        self.title = '5Kare'
        self.left = 300
        self.top = 300
        self.width = 520
        self.height = 400
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)
        butonNo = 1
        self.butonum = dict()
        for satir in range(5):
            for sutun in range(5):
                self.butonum[butonNo] = QPushButton(str(butonNo), self)
                self.butonum[butonNo].setToolTip("secilen")
                self.butonum[butonNo].move(sutun*74, satir*22)
                self.butonum[butonNo].clicked.connect(self.on_click)
                butonNo += 1

        self.show()

    @pyqtSlot()
    def on_click(self):
        self.butonum.setText("basıldı")
        print('butona basıldı')


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())

şu an yukarıdaki gibi. birkaç aklıma gelen şeyi çalışmayacağını bile bile denedim ama ne yapabilirim bilmiyorum.

Bu şekilde bir değişiklik yaptım. self.sender() metodunu kullanarak hangi butonun basıldığını elde ettim. Sonra da bunun yazısını ekrana yazdım

#coding:utf-8
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import pyqtSlot

class App(QWidget):

    def __init__(self):
        super().__init__()

        self.title = '5Kare'
        self.left = 300
        self.top = 300
        self.width = 520
        self.height = 400
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)
        butonNo = 1
        self.butonum = dict()
        for satir in range(5):
            for sutun in range(5):
                self.butonum[butonNo] = QPushButton(str(butonNo), self)
                self.butonum[butonNo].setToolTip("secilen")
                self.butonum[butonNo].move(sutun*74, satir*22)
                self.butonum[butonNo].clicked.connect(self.on_click)
                butonNo += 1

        self.show()

    @pyqtSlot()
    def on_click(self):
        self.basilan = self.sender() # Basılan butonu elde ediyoruz
        print("Butona basıldı: {}".format(self.basilan.text())) # bu butonun yazısını elde ediyoruz
        


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())

Buradaki self.sender() metodu, basılan butonu bize nesne olarak verir. Biz de bunu kullanarak istediğimiz değişikliği bu butona uygulayabiliriz.

1 Beğeni

tekrar ben :slight_smile: . bir oyun yapma niyetiyle başlamıştım. bilgisayar bir harf seçecek, kullanıcı bu harfi 25 kareden istediği bir tanesine yerleştirecek ve “sonraki harf” butonuna basacak. bu şekilde ilerleyerek bilgisayarın verdiği harfler ile en fazla sayıda kelime oluşturmaya çalışacak.

  • kullanıcı bir kareye tıklamış ve harfi oraya yerleştirmişse “sonraki harf” butonuna basana kadar başka bir kareye basarak harfi oraya alabilecek.
  • “sonraki harf” butonuna basıp yeni harf geldiğinde artık önceki harfleri yerleştirdiği karelere harf yerleştiremeyecek.

kodun son hali aşağıda. bu haldeyken şu problemleri yaşıyorum:

  • ilk seferde kareler (ki onlar da birer buton) istediğim gibi çalışıyor, harfin yerini değiştirebiliyorum; fakat sonraki harfleri aldığımda harfin yerini değiştirmek istediğim zaman ikinci tıkladığım kareye aynı harften bir tane daha yerleştiriyor.
  • bilgisayarın seçtiği harfi gösteren label sadece ilk seferde çalışıyor.
  • kontrol için bilgisayarın seçtiği harfi konsola da yazdırmıştım. eğer ilk seferde harfin yerini n defa değiştirmişsem, “sonraki harf” butonuna tıkladığımda konsolda n tane harf yazdırılıyor.
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import pyqtSlot
import random

harfler = "ABCÇDEFGĞHIİJKLMNOÖPRSŞTUÜVYZ"

class App(QWidget):

    def __init__(self):
        super().__init__()

        self.title = '5Kare'
        self.left = 300
        self.top = 300
        self.width = 420
        self.height = 300
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        self.sonrakiHarf = QPushButton("Sonraki Harf", self)
        self.sonrakiHarf.move(260, 90)
        self.sonrakiHarf.setEnabled(False)

        self.secilen = random.choice(harfler)

        self.yazi = QLabel(self)
        self.yazi.setText("Harf: %s" % self.secilen)
        self.yazi.move(280, 60)

        butonNo = 1
        self.butonum = dict()
        for satir in range(5):
            for sutun in range(5):
                self.butonum[butonNo] = QPushButton("", self)
                self.butonum[butonNo].setToolTip("secilen")
                self.butonum[butonNo].move(50 + sutun * 31, 50 + satir * 22)
                self.butonum[butonNo].clicked.connect(self.on_click)
                butonNo += 1

        print(self.secilen)

        self.show()

    @pyqtSlot()
    def on_click(self):
        self.basilan = self.sender()

        for i in self.butonum:
            self.butonum[i].setText(" ")

        self.basilan.setText(self.secilen)

        self.sonrakiHarf.setEnabled(True)
        self.sonrakiHarf.clicked.connect(self.initUI)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())

çok şey istediğimin farkındayım ama yakınımda yardımcı olabilecek kimse yok. vakit ayırırsanız çok çok mutlu edersiniz.

  1. İlk olarak bilgisayarın tuttuğu harfi gösteren label sadece bir kere çalışıyor demişsiniz. Doğal olarak, bilgisayar ikinci harfi tuttuğunda siz de o esnada bu labelin yazısını değiştirmelisiniz.

  2. Random sayıyı sadece birkez oluşturuyorsunuz. Sonraki butonuna tıklandığı zaman tekrar oluşturulmalı. Yani sonraki butonu için ayrı bir metot tanımlayıp sayı tutma vs işlemleri tekrar orada yapmalısınız.

  3. self.sonrakiHarf.clicked.connect(self.initUI) burada, sonraki butonuna bağladığınız metot, arayüzü tekrar tekrar oluşturuyor. Bunu yapmanızdaki amaç nedir?

self.sonrakiHarf.clicked.connect(self.initUI) ile “sonraki harf” butonuna tıklandığında initUI metodunu tekrar çalıştırıp bu metodun içindeki rastgele harf tutma, o harfi labela yazdırma işlemlerinin tekrarlanmasını sağlamaya çalıştım. dediğiniz gibi bu işlemleri ayrı bir metotta yaptırmayı da denedim ama başarılı olamadım. o haliyle işleri biraz daha karıştırmıştım bu nedenle o kodu paylaşmadım. sınıflar ve metodları kullanarak yapmaya çalıştığım ilk programım bu. epey kötü bir başlangıç oldu. :frowning:

Hayır bence kötü bir başlangıç değil. Hata yaparak öğrenirsiniz, kusursuz kod yazarak değil. Bu yüzden hataları normal kabul edin ve paylaşın.

2 Beğeni

bir de şu haline bakıp yorum yapabilir misiniz?

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import pyqtSlot
import random

harfler = "ABCÇDEFGĞHIİJKLMNOÖPRSŞTUÜVYZ"

class App(QWidget):

    def __init__(self):
        super().__init__()

        self.title = '5Kare'
        self.left = 300
        self.top = 300
        self.width = 420
        self.height = 300
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        self.sonrakiHarf = QPushButton("Sonraki Harf", self)
        self.sonrakiHarf.move(260, 90)
        self.sonrakiHarf.setEnabled(False)

        self.secilen = random.choice(harfler)

        self.yazi = QLabel(self)
        self.yazi.setText("Harf: %s" % self.secilen)
        self.yazi.move(280, 60)

        butonNo = 1
        self.butonum = dict()
        for satir in range(5):
            for sutun in range(5):
                self.butonum[butonNo] = QPushButton("", self)
                self.butonum[butonNo].setToolTip("secilen")
                self.butonum[butonNo].move(50 + sutun * 31, 50 + satir * 22)
                self.butonum[butonNo].clicked.connect(self.on_click)
                butonNo += 1

        self.show()

    @pyqtSlot()
    def on_click(self):
        self.basilan = self.sender()

        for i in self.butonum:
            self.butonum[i].setText(" ")

        self.basilan.setText(self.secilen)

        self.sonrakiHarf.setEnabled(True)
        self.sonrakiHarf.clicked.connect(self.sonraki)

    def sonraki(self):
        self.secilen = random.choice(harfler)
        self.sonrakiHarf.setEnabled(False)

        self.yazi = QLabel(self)
        self.yazi.setText("Harf: %s" % self.secilen)
        self.yazi.move(280, 60)

        print(self.secilen)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())
1 Beğeni

evet şimdi biraz daha algoritmaya uymuş görünüyor. mobilde olduğum için daha fazla yorum yapamayacağım kusura bakmayın.

fakat pek bişey değişmedi. :frowning: label hâlâ yenilenmiyor. diğer sıkıntılar da devam ediyor.

Şimdi yeniden baktım. sonraki metodunun içerisinde Label’i bir daha tanımlamışsınız. Bir daha tanımladığın için farklı bir nesne olmuş oluyor. Zaten başlangıçta tanımlandığı için, yeniden tanımlamanıza gerek yok.

Bu yüzden sonraki adlı metot içerisinde, direkt erişip değiştirebilirsiniz.

#coding:utf-8
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import pyqtSlot
import random

harfler = "ABCÇDEFGĞHIİJKLMNOÖPRSŞTUÜVYZ"

class App(QWidget):

    def __init__(self):
        super().__init__()

        self.title = '5Kare'
        self.left = 300
        self.top = 300
        self.width = 420
        self.height = 300
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        self.sonrakiHarf = QPushButton("Sonraki Harf", self)
        self.sonrakiHarf.move(260, 90)
        self.sonrakiHarf.setEnabled(False)

        self.secilen = random.choice(harfler)

        self.yazi = QLabel(self)
        self.yazi.setText("Harf: %s" % self.secilen)
        self.yazi.move(280, 60)

        butonNo = 1
        self.butonum = dict()
        for satir in range(5):
            for sutun in range(5):
                self.butonum[butonNo] = QPushButton("", self)
                self.butonum[butonNo].setToolTip("secilen")
                self.butonum[butonNo].move(50 + sutun * 31, 50 + satir * 22)
                self.butonum[butonNo].clicked.connect(self.on_click)
                butonNo += 1

        self.show()

    @pyqtSlot()
    def on_click(self):
        self.basilan = self.sender()

        for i in self.butonum:
            self.butonum[i].setText(" ")

        self.basilan.setText(self.secilen)

        self.sonrakiHarf.setEnabled(True)
        self.sonrakiHarf.clicked.connect(self.sonraki)

    def sonraki(self):
        self.secilen = random.choice(harfler)
        self.sonrakiHarf.setEnabled(False)

        self.yazi.setText("Harf: %s" % self.secilen)
        

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())
1 Beğeni

yeni harf geldiğinde bunu bir yere yerleştirdiğimiz zaman diğer butonlar boşluk " " karakteri ile dolduruluyor. fakat daha önceden konulmuş olan harfin bulunduğu butona da bu işlem uygulandığı için önceki yerleştirdiğimiz harf kayboluyor. bunu önlemek için; sonraki harf butonuna tıklandığında en son harf yerleştirilmiş olan butonu butonum sözlüğünden çıkarmayı denedim.

bu amaçla sonraki metoduna aşağıdaki gibi dört satır kod ekledim. fakat bu da sadece ilk seferde çalışıyor :frowning: . ikinci defa sonraki harf butonuna tıklayınca Process finished with exit code -1073740791 (0xC0000409) hatası ile pencere kapanıyor.

    def sonraki(self):
        self.secilen = random.choice(harfler)
        self.sonrakiHarf.setEnabled(False)

        self.yazi.setText("Harf: %s" % self.secilen)

        for n in self.butonum.items():
            if n[1] == self.basilan:
                self.atilacak = n[0]

        self.butonum.pop(self.atilacak)

döngüde bir hata olup olmadığını kontrol etmek için aşağıdaki kodu yazdım, çalışıyor.

sozluk = dict()
harfler = "ABCDE"
no = 1
for i in range(5):
    sozluk[no] = "buton %s" % harfler[i]
    no += 1

for a in sozluk.items():
    if a[1] == "buton D":
        b = a[0]

sozluk.pop(b)

print(sozluk)

döngüyü on_click metoduna yerleştirmeyi de denedim, sonuç alamadım.

Kaldırmak yerine, bu sıraya None yerleştirin ve harflere " " yerleştirirken None olup olmadığını kontrol edin. Bir bakın isterseniz

#coding:utf-8

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import pyqtSlot
import random

harfler = "ABCÇDEFGĞHIİJKLMNOÖPRSŞTUÜVYZ"

class App(QWidget):

    def __init__(self):
        super().__init__()

        self.title = '5Kare'
        self.left = 300
        self.top = 300
        self.width = 420
        self.height = 300
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        self.sonrakiHarf = QPushButton("Sonraki Harf", self)
        self.sonrakiHarf.move(260, 90)
        self.sonrakiHarf.setEnabled(False)

        self.secilen = random.choice(harfler)

        self.yazi = QLabel(self)
        self.yazi.setText("Harf: %s" % self.secilen)
        self.yazi.move(280, 60)

        butonNo = 1
        self.butonum = dict()
        for satir in range(5):
            for sutun in range(5):
                self.butonum[butonNo] = QPushButton("", self)
                self.butonum[butonNo].setToolTip("secilen")
                self.butonum[butonNo].move(50 + sutun * 31, 50 + satir * 22)
                self.butonum[butonNo].clicked.connect(self.on_click)
                butonNo += 1

        self.show()

    @pyqtSlot()
    def on_click(self):
        self.basilan = self.sender()

        for i in self.butonum:
            if(self.butonum[i] != None):
                self.butonum[i].setText(" ")

        self.basilan.setText(self.secilen)

        self.sonrakiHarf.setEnabled(True)
        self.sonrakiHarf.clicked.connect(self.sonraki)

    def sonraki(self):
        self.secilen = random.choice(harfler)
        self.sonrakiHarf.setEnabled(False)

        self.yazi.setText("Harf: %s" % self.secilen)

        for n in self.butonum.items():
            if n[1] == self.basilan:
                print("Buton bulundu")
                self.atilacak = n[0]

        self.butonum[self.atilacak] = None

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())
1 Beğeni

tekrar çok teşekkür ederim. fakat aklıma takılan iki nokta var:

  1. neden aynı konumda self.butonum[self.atilacak] = None işlemini yaptığı halde self.butonum.pop(self.atilacak) işlemini yapmıyor?

  2. sonraki metodunda ikinci satıra, yani self.secilen = random.choice(harfler) satırının hemen altına print(self.secilen) şeklinde bir ifade eklediğimizde bu ifade, “sonraki harf” butonuna n. defa basıyorsak n defa çalışıyor. halbuki sizin eklediğiniz print("Buton bulundu") her seferinde sadece bir defa çalışıyor. bunun nedeni nedir?

Programı şimdi biraz inceledim ve gözüme şu satır takıldı.

self.sonrakiHarf.clicked.connect(self.sonraki)

Siz bu satırı, on_click() metodu içerisine yazmışsınız. Ve bu metot herhangi bir butına tıklandığı zaman çalışınca, bu satır tekrar tekrar işlenmiş. Yani sonraki butonu için birden fazla işlemi yapılmış. Bu yüzden butona tıkladığınız zaman, kaç kere bağlama yapılmışsa o kadar çalışıyor

Bu yüzden sonraki butonuna tıkladığınız zaman, bu buton birden fazla kez dinlendiği için hepsi aynı anda çalışarak seçilen harfin ekrana birden fazla yazılmasını sağlamış.

Aynı zamanda, self.butonum.pop() kısmı da bu yüzden çalışmıyormuş. Çünkü bu metot birden çok kez aynı anda çalışınca, birinin çıkardığı butona diğeri erişemeyince hata vermiş.

Kısaca tüm olay, bu satırı yanlış yere yazmanız. Bunu initUi() içerisine yazdım. Artık sorunlar ortadan kalktı. Siz de bir deneyin isterseniz.

Kodun son hali

#coding:utf-8

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import pyqtSlot
import random

harfler = "ABCÇDEFGĞHIİJKLMNOÖPRSŞTUÜVYZ"

class App(QWidget):

    def __init__(self):
        super().__init__()

        self.title = '5Kare'
        self.left = 300
        self.top = 300
        self.width = 420
        self.height = 300
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        self.sonrakiHarf = QPushButton("Sonraki Harf", self)
        self.sonrakiHarf.move(260, 90)
        self.sonrakiHarf.setEnabled(False)

        self.secilen = random.choice(harfler)

        self.yazi = QLabel(self)
        self.yazi.setText("Harf: %s" % self.secilen)
        self.yazi.move(280, 60)

        butonNo = 1
        self.butonum = dict()
        for satir in range(5):
            for sutun in range(5):
                self.butonum[butonNo] = QPushButton("", self)
                self.butonum[butonNo].setToolTip("secilen")
                self.butonum[butonNo].move(50 + sutun * 31, 50 + satir * 22)
                self.butonum[butonNo].clicked.connect(self.on_click)
                butonNo += 1

        self.sonrakiHarf.clicked.connect(self.sonraki)
        self.show()

    @pyqtSlot()
    def on_click(self):
        self.basilan = self.sender()

        for i in self.butonum:
            self.butonum[i].setText(" ")

        self.basilan.setText(self.secilen)

        self.sonrakiHarf.setEnabled(True)
        

    def sonraki(self):
        self.secilen = random.choice(harfler)
        self.sonrakiHarf.setEnabled(False)
        print("Test")
        self.yazi.setText("Harf: %s" % self.secilen)
        
        for n in self.butonum.items():
            if n[1] == self.basilan:
                print("Buton bulundu")
                self.atilacak = n[0]

        self.butonum.pop(self.atilacak)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())

sağolun, şimdi kafam rahatladı :slight_smile: . ben de birkaç düzenleme yaptım:

  • daha önceden harf yerleştirilmiş butonlara tekrar tıklanmasını engellemek için sonraki harf butonuna tıklandığında onları ‘disabled’ hale getiren bir satır ekledim.
  • kaçıncı harfi yerleştirdiğimizi sayan bir sayaç; ve son harfe geldiğinde “sonraki harf” butonunu “bitir” butonuna dönüştüren birkaç satır ekledim. ayrıca “bitir” butonuna basıldığında geçerli harfi gösteren label da kayboluyor.(" " değerini alıyor.)
  • türkçe kelimelerde harflerin kullanım sıklığını gösteren bir tabloya bakarak harfler listesini ona uygun şekilde düzenledim.
  • bazı değişken isimlerini değiştirdim. test için kullandığımız print komutlarını kaldırdım. pencere boyutlarını değiştirdim. butonların üzerine gelindiğinde çıkacak ipucu yazılarını düzenledim.

son halini aşağıda paylaşıyorum. şimdi sıra satır ve sütunları tarayarak anlamlı bir kelime var mı diye kontrol etmek için bir veritabanına bağlanıp sonuçlara göre puan hesaplamakta :slight_smile: . benim için biraz uzun bir öğrenme dönemi gerektirecek bu kısım. bir gelişme kaydedersem paylaşırım. buraya kadarki ilginiz ve sabrınız için çok çok minnettarım @coderistan.

#coding:utf-8

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import pyqtSlot
import random

harfler = "AAAAAAAAAAAABBCCÇÇDDEEEEEEEEEFGĞHIIIIİİİİİİİJKKKKKLLLLLLMMMMNNNNNNNOOOÖPRRRRRRRSSSŞŞTTTTTUUUÜÜVYYYZZ"

class App(QWidget):

    def __init__(self):
        super().__init__()

        self.title = '5Kare'
        self.left = 300
        self.top = 200
        self.width = 400
        self.height = 220
        self.initUI()

    def initUI(self):
        self.sayac = 0

        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        self.sonrakiHarf = QPushButton("Sonraki Harf", self)
        self.sonrakiHarf.move(260, 90)
        self.sonrakiHarf.setEnabled(False)
        self.sonrakiHarf.setToolTip("Geçerli harfi kutucuklardan birine yerleştirin")
        self.sonrakiHarf.clicked.connect(self.sonraki)

        self.secilenHarf = random.choice(harfler)

        self.yazi = QLabel(self)
        self.yazi.setText("Harf: %s " % self.secilenHarf)
        self.yazi.move(280, 60)

        butonNo = 1
        self.butonlar = dict()
        for satir in range(5):
            for sutun in range(5):
                self.butonlar[butonNo] = QPushButton("", self)
                self.butonlar[butonNo].setToolTip("Harfi yerleştirmek için tıklayın")
                self.butonlar[butonNo].move(50 + sutun * 31, 50 + satir * 22)
                self.butonlar[butonNo].clicked.connect(self.on_click)
                butonNo += 1

        self.show()

    @pyqtSlot()
    def on_click(self):
        self.basilanButon = self.sender()

        for i in self.butonlar:
            self.butonlar[i].setText(" ")

        self.basilanButon.setText(self.secilenHarf)

        self.sonrakiHarf.setEnabled(True)

        if self.sayac == 24:
            self.sonrakiHarf.setText("Bitir")

    def sonraki(self):
        self.secilenHarf = random.choice(harfler)
        self.sonrakiHarf.setEnabled(False)
        self.basilanButon.setEnabled(False)

        if self.sayac == 24:
            self.yazi.setText("")
        else:
            self.yazi.setText("Harf: %s " % self.secilenHarf)

        for n in self.butonlar.items():
            if n[1] == self.basilanButon:
                self.atilacakButonunNo = n[0]

        self.butonlar.pop(self.atilacakButonunNo)
        self.sayac += 1

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())

oyunun kağıt kalemle oynanan aslı çok oyunculu. oyuncular kendilerine sıra geldiğinde bir harf söylüyorlar ve kendileri de dahil herkes o harfi bir kutucuğa yerleştiriyor. kim bilir belki çok oyunculu haliyle dijitale aktarmak da nasip olur :slight_smile: .

2 Beğeni