Sıkça Sorulan Sorular (SSS)

Sıkça sorulan sorular aşağıda gruplandırılmıştır. Her bir grup daha önce açılmış benzer konu başlıklarını içermektedir.

Eğer forum kullanıcıları sıkça sorulan sorular tespit ederlerse ve bu sorularla alakalı bir gruplandırma henüz yapılmamışsa, bu mesajı düzenleyerek aşağıdaki gruplar gibi yeni bir grup oluşturup, benzer soruları yeni grubun altına ekleyebilirler. Yeni bir grup eklerken buradaki ufak Python kodundan faydalanabilirsiniz:

Kodu ve kullanımını görmek için tıklayın

Kodu bir Python dosyasına yazdıktan sonra bu dosya ile aynı dizinde links.txt adlı bir dosya oluşturun. Bu dosyasının ilk satırı konunun ismi, diğer satırları da konunun içereceği başlıkların linklerinden oluşacak. Örnek bir links.txt dosyası:

Python socket modülü hakkında
https://forum.yazbel.com/t/socket-kaynak-onerisi/326
https://forum.yazbel.com/t/python-socket-modulu/1737
https://forum.yazbel.com/t/python3-chat-uygulamasi/504
https://forum.yazbel.com/t/network-kodlama-hakkinda-bilgiye-ihtiyacim-var-d/6484
https://forum.yazbel.com/t/python-server-client-iletisimi/6564
https://forum.yazbel.com/t/python-ile-mesajlasma-uyqulamasi-yazmak/740
https://forum.yazbel.com/t/windows-server-hakkinda-soru/6226
https://forum.yazbel.com/t/bilgisayar-sunucu-bilgisayar-iletisimini-saglama/3132
https://forum.yazbel.com/t/mesajlasma-uygulamasi/1739
https://forum.yazbel.com/t/kendi-mesaj-uygulamami-nasil-yaparim/3251
https://forum.yazbel.com/t/socket-hakkinda/4363

Bu dosyayı hazırladıktan sonra kodu çalıştırarak ekrana verilen çıktının tamamını kopyalayıp bu gönderinin sonuna ekleyebilirsiniz.

Kod:

from random import choice
from string import ascii_letters

with open("links.txt", "r", encoding = "utf-8") as f:
    veri = f.read().split("\n")

veri = [i for i in veri if i]

başlık, *linkler = veri

anchor_name = "".join(choice(ascii_letters) for i in range(10))

anchor = '<h3 id="heading--{}"></h3>'.format(anchor_name)

çıktı = ['[details="{}"]'.format(başlık), "[¶](#heading--{})".format(anchor_name)]

for link in linkler:
    çıktı.append('* {}'.format(link))

çıktı.append("[/details]")
print(anchor + "\n\n" + "\n".join(çıktı))
input()

Eğer sıkça sorulmuş bir soruyla ilgili bir grup olduğu halde yeni bir konu açılmışsa, bu durumu fark eden kullanıcılar, yeni konuyu ilgili grup başlığına ekleyip, açılmış olan bu yeni konuya grubun başlığını adres olarak gönderebilirler.

Soru sorarken dikkat edilmesi gerekenler

Python'a yeni başlayanlar için

Python: Değişkenlerimi kalıcı olarak kaydetmek istiyorum

Kivy Paketleme

PyAudio Kurulumu

Python socket modülü hakkında

Python kod dosyasına çift tıklayınca çalışmıyor/açılıp hemen kapanıyor

Python dosyasını exe dosyasına dönüştürmek hakkında

Python threading modülü hakkında

Python multiprocessing modülü hakkında

os.system fonksiyonu

GitHub Hakkında


Sıkça karşılaşılan problemler ve cevapları aşağıda listelenmiştir, isteyenler yeni problemleri ve çözümlerini aşağıya ekleyebilir. Yeni bir başlık eklerken çözümünüzde hata bulunmadığına emin olun.

Tkinter: Oluşturduğum widgeti kullanamıyorum

Sorun: Python’un tkinter modülü ile bir widget oluşturuyorum ve bu widgeti bir değişkene atıyorum. Daha sonra bu değişkeni kullanmaya çalıştığımda, mesela get metodunu çağırdığımda, hata alıyorum.

Örnek kod:

from tkinter import *

root = Tk()

def kayıt_yap():
    girdi = entry.get() # hata verilen yer
    print("Kayıt yapılıyor:", repr(girdi))

entry = Entry().pack()
buton = Button(text = "Kaydet", command = kayıt_yap).pack()

root.mainloop()

Çözüm: Oluşturulan widget bir değişkene atanmadan önce pack metodu çağırılıyor:

entry = Entry().pack()

Bu sebepten dolayı entry değişkenine atanan değer bir tkinter.Entry örneği değil, None oluyor. entry değişkeni Entry()'nin döndürdüğü değere değil, Entry().pack()'taki pack fonksiyonunun dönüş değeri olan None'a sahip oluyor. pack metodunun sonradan çağırılması lazım.

Doğru kod:

from tkinter import *

root = Tk()

def kayıt_yap():
    girdi = entry.get()
    print("Kayıt yapılıyor:", repr(girdi))

entry = Entry()
buton = Button(text = "Kaydet", command = kayıt_yap)

entry.pack()
buton.pack()

root.mainloop()

Böyle bir hata yaptığımı nasıl anlarım?
Oluşturduğunuz widget’leri atadığınızı düşündüğünüz değişkenleri ekrana yazdırarak:

from tkinter import *

root = Tk()

def kayıt_yap():
    girdi = entry.get() # hata verilen yer
    print("Kayıt yapılıyor:", repr(girdi))

entry = Entry().pack()
buton = Button(text = "Kaydet", command = kayıt_yap).pack()

print(entry, buton) # None None

root.mainloop()

Tkinter: Oluşturduğum butonun komutu sadece program başladığında çalışıyor

Sorun: Python’un tkinter modülü ile bir Button oluşturuyorum ve bu butona bir command parametresi veriyorum. command parametresi olarak verdiğim fonksiyonun butona basıldığında çalışması lazım ama sadece program başladığında hemen çalışıyor ve daha sonra butona basıldığında çalışmıyor.

Örnek kod:

from tkinter import *

root = Tk()

def yaz():
    print("Merhaba dünya!")

buton = Button(text = "Yaz", command = yaz())
buton.pack()

root.mainloop()

Çözüm: command parametresi olarak yaz() veriliyor. command parametresinin bir fonksiyon olması lazım, yaz bir fonksiyon iken yaz() bir fonksiyon çağrısıdır. command = yaz() bölümü işlendiğinde yaz() ifadesi işlenerek dönüş değeri olan None, command parametresi olarak kullanılır. Bu yüzden buton oluşturulurken yaz fonksiyonu bir defa çağırılıyor ve döndürdüğü None değeri command parametresi oluyor. command'ın None olması butona basıldığında hiçbir şey olmamasına sebep oluyor. command parametresi olarak fonksiyonun kendisi olan yaz verilmeli.

Doğru kod:

from tkinter import *

root = Tk()

def yaz():
    print("Merhaba dünya!")

buton = Button(text = "Yaz", command = yaz)
buton.pack()

root.mainloop()

Böyle bir hata yaptığımı nasıl anlarım?
Butonun command özelliğini ekrana yazdırarak, yazan değerin sadece sayılardan oluşmadığına veya boş bir str ('') olmadığına emin olun:

from tkinter import *

root = Tk()

def yaz():
    print("Merhaba dünya!")

buton = Button(text = "Yaz", command = yaz())
buton.pack()

print(repr(buton["command"])) # ''

root.mainloop()

Python: Benzer adlara sahip değişkenler oluşturmak istiyorum

Sorun: Python’da benzer adlara sahip değişkenleri döngü ile oluşturmak ve daha sonra bunları kullanmak istiyorum, mesela girdi_1, girdi_2 ve girdi_3 gibi.

Örnek kod:

for i in range(3):
    girdi_i = input(str(i)+". giriş: ")

for i in range(3):
    print(girdi_i)

Çözüm: Böyle bir durumda farklı değişkenler yerine liste gibi veri yapılarını kullanmalısın.

Doğru Kod:

liste = []
for i in range(3):
    liste.append(input(str(i)+". giriş: "))

for i in liste:
    print(i)

PyQt vs: 100 tane widget oluşturmak istiyorum ama 100 tane değişken tanımlamadan bunu nasıl yapabilirim?


Sorun: 100 tane widget oluşturmam lazım ama 100 tane değişken ismi yazmak da istemiyorum. 100 tane widgeti 100 tane değişken kullanmadan tanımlayıp kullanmak istiyorum. Bu sorunu nasıl çözebilirim.

Örnek Kod:

from PyQt5.QtWidgets import QPushButton, QApplication, QWidget, QVBoxLayout
import sys

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.butonlar = []

        self.vbox = QVBoxLayout()
        self.setLayout(self.vbox)

 
        self.pencereye_50_buton_ekle()
        self.secilen_butonun_rengini_degistir(25)

    def pencereye_50_buton_ekle(self):
        self.buton1 = QPushButton(self)
        self.buton1.setText("1 butonu")
        self.vbox.addWidget(self.buton1)

        self.buton2 = QPushButton(self)
        self.buton2.setText("2 butonu")
        self.vbox.addWidget(self.buton2)

        self.buton3 = QPushButton(self)
        self.buton.setText("3 butonu")
        self.vbox.addWidget(self.buton3)

        # ...
        # ...

        self.buton100 = QPushButton(self)
        self.buton100.setText("100 butonu")
        self.vbox.addWidget(self.buton100)

    def secilen_butonun_rengini_degistir(self, i):
        if i == 1:
            self.buton1.setStyleSheet("background-color : yellow")
        elif i == 2:
            self.buton2.setStyleSheet("background-color : yellow")

        #....

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

Çözüm:

Aslında bu sorun, şu soruya çok benziyor. 100 tane değişken tanmlamak yerine liste gibi veri yapılarını kullanmalısın.

Örnek Kod:

from PyQt5.QtWidgets import QPushButton, QApplication, QWidget, QVBoxLayout
import sys

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.butonlar = []

        self.vbox = QVBoxLayout()
        self.setLayout(self.vbox)

 
        self.pencereye_50_buton_ekle()
        self.secilen_butonun_rengini_degistir(25)

    def pencereye_50_buton_ekle(self):
        for i in range(50):
            buton = QPushButton(self)
            buton.setText(f"{i} butonu")

            self.vbox.addWidget(buton)
            self.butonlar.append(buton) 

    def secilen_butonun_rengini_degistir(self, i):
        self.butonlar[i].setStyleSheet("background-color : yellow")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

İsterseniz aşağıdaki linkteki cevaplara da göz atabilirsiniz.

25 Beğeni