PyQt5: "'NoneType' object has no attribute 'clicked'" hatası

Merhabalar,

import sys

from PyQt5.QtCore import QLine

from PyQt5.QtWidgets import QApplication, QDialogButtonBox, QFormLayout, QGridLayout, QLineEdit

from PyQt5.QtWidgets import QHBoxLayout, QVBoxLayout

from PyQt5.QtWidgets import QLabel

from PyQt5.QtWidgets import QPushButton

from PyQt5.QtWidgets import QWidget

def tiklandi():

    print("Tıkladı")

def genel():

    girisyap = QApplication(sys.argv)

    pencere = QWidget()

    pencere.setWindowTitle("Giriş yap")

    kayitolform = QFormLayout()

    kayitolform.addRow("Kullanıcı adı:", QLineEdit())

    kayitolform.addRow("Şifre:", QLineEdit())

    gg = kayitolform.addRow(QPushButton("Kayıt ol"))    

    gg.clicked.connect(tiklandi)

    pencere.setLayout(kayitolform)

    pencere.show()

    sys.exit(girisyap.exec_())

genel()

Amacım kayıt sistemi yapmak. Kullanıcı bilgileri girerek kayıt olacak. Fakat
gg.clicked.connect(tiklandi) kısmında hata veriyor.

Nasıl çözebilirim?

Merhaba,

hatayı okursanız gg nin None olduğunu söylüyor.

addRow fonksiyonu zannettiğinizin aksine herhangi bir değer return etmiyor.

:x:

gg = kayitolform.addRow(QPushButton("Kayıt ol"))    

gg.clicked.connect(tiklandi)

:white_check_mark:

kayit_butonu = QPushButton("Kayıt Ol")
kayit_butonu.clicked.connect(tiklandi)
kayitolform.addRow(kayit_butonu)    

Bir şey daha sorabilir miyim?

import sys

from PyQt5.QtCore import QLine

from PyQt5.QtWidgets import QApplication, QDialogButtonBox, QFormLayout, QGridLayout, QLineEdit

from PyQt5.QtWidgets import QHBoxLayout, QVBoxLayout

from PyQt5.QtWidgets import QLabel

from PyQt5.QtWidgets import QPushButton

from PyQt5.QtWidgets import QWidget

def genel(kadi, sifre):

    girisyap = QApplication(sys.argv)

    pencere = QWidget()

    pencere.setWindowTitle("Giriş yap")

    kayitolform = QFormLayout()

    kadi = kayitolform.addRow("Kullanıcı adı:", QLineEdit())

    sifre = kayitolform.addRow("Şifre:", QLineEdit())

    kayitb = QPushButton("Kayıt Ol")

    kayitb.clicked.connect(tiklandi)

    kayitolform.addRow(kayitb)   

    pencere.setLayout(kayitolform)

    pencere.show()

    sys.exit(girisyap.exec_())

def tiklandi():

    

    a = kadi.text()

    print("Tıkladı")

genel()

Girilen kullanıcı adını başka bir fonksiyonda çekmek istiyorum fakat değişkeni bulamıyor. Neden olabilir?


Böyle bir yöntem denedim fakat QWidget: Must construct a QApplication before a QWidget hatası alıyorum. Ve hatayı çözebilmiş değilim.

Denediğim yöntem:

kadi = QLineEdit("Kullanıcı adı:")

sifre = QLineEdit("Şifre:")

def genel():

    girisyap = QApplication(sys.argv)

    pencere = QWidget()

    pencere.setWindowTitle("Giriş yap")

    kayitolform = QFormLayout()

    kayitolform.addRow(kadi)

    kayitolform.addRow(sifre)

Merhaba, class kullanmak isteyebilirsin. class bu iş için çok kullanışlı. global falan da kullanabilirsin ama global yerine class en mantıklısı

import sys
from PyQt5.QtCore import QLine
from PyQt5.QtWidgets import QApplication, QDialogButtonBox, QFormLayout, QGridLayout, QLineEdit
from PyQt5.QtWidgets import QHBoxLayout, QVBoxLayout
from PyQt5.QtWidgets import QLabel
from PyQt5.QtWidgets import QPushButton
from PyQt5.QtWidgets import QWidget

class MyWidget(QWidget):

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

    def init_ui(self):
        self.setWindowTitle("Giriş Yap")
        self.kayit_ol_form = QFormLayout()
        
        self.kullanici_adi = QLineEdit()
        self.kayit_ol_form.addRow("Kullanıcı Adı:", self.kullanici_adi)
        
        self.sifre = QLineEdit()
        self.kayit_ol_form.addRow("Şifre:", self.sifre)

        self.kayit_butonu = QPushButton("Kayit Ol")
        self.kayit_butonu.clicked.connect(self.kayit_yap)
        self.kayit_ol_form.addRow(self.kayit_butonu)

        self.setLayout(self.kayit_ol_form)
        

    def kayit_yap(self):
        kullanici_adi = self.kullanici_adi.text()
        print(kullanici_adi)

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

edit: değişkenler laçka luçka isimlendirildi, sen daha güzel ismlendirmeler bulabilirsin.

1 Beğeni

Teşekkür ederim destek için.