QLineEdit'ten Text Çekmek


#1

PyQt5’te QLineEdit widget’inden kullanıcının girdiği text’i çekip basit bir karşılaştırma yapmaya çalışıyorum.

from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QApplication, QWidget
import sys

from logscreen import Ui_Form

class LoginScreen(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)

        #Makes the window from imported "Ui_Form"
        self.ui = Ui_Form()
        self.ui.setupUi(self)

        self.usr_name = self.ui.lineEdit.text()
        self.usr_pass = self.ui.lineEdit_2.text()

        #Signals and Slots
        self.ui.button_login.clicked.connect(self.checkCredentials)
        self.ui.button_exit.clicked.connect(sys.exit)

    #Our main functions
    def checkCredentials(self):
        if (self.usr_name == "furkan") and (self.usr_pass == "123"):
            print(self.usr_name)
            print(self.usr_pass)

        else:
            sys.exit()

    def test(self):
        self.ui.label_3.setText(str(self.usr_name))

if __name__ == "__main__":
    
    
    app = QApplication(sys.argv)
    window = LoginScreen()
    window.show()   #Pushes created objects
    sys.exit(app.exec_())

Eğer button_login’i "checkCredentials"a bağlarsam print fonksiyonları boş çıktı veriyor. Eğer "test"e bağlarsam bu sefer Label’i boş çıktıyla değiştiriyor.

Nerede hata yapıyorum acaba? Teşekkürler :blush:


#2

Sorunu çözdüm.

self.usr_name = self.ui.lineEdit.text()
self.usr_pass = self.ui.lineEdit_2.text()

Bu iki ifadeyi şuraya taşıdım:

def checkCredentials(self):
    self.usr_name = self.ui.lineEdit.text()
    self.usr_pass = self.ui.lineEdit_2.text()
        if (self.usr_name == "furkan") and (self.usr_pass == "123"):
            print(self.usr_name)
            print(self.usr_pass)

Ama hâlâ nedeni tam olarak anlayamadım.


#3

@equinox Merhaba, aslında sorununuzun cevabı çok basit. Aşağıdaki satırları inceleyelim:

        self.usr_name = self.ui.lineEdit.text()
        self.usr_pass = self.ui.lineEdit_2.text()

        #Signals and Slots
        self.ui.button_login.clicked.connect(self.checkCredentials)

Kodunuzda mantık hatası var, button_login’i checkCredentials fonksiyonuna atamışsınız. Bu, ben button_login’e bastığımda checkCredentials fonksiyonunu çağır demek.

Hatanın olduğu kısım ise, karşılaştırma yaptığınız usr_name ve usr_pass değişkenlerini daha kullanıcının giriş yapacağı ekran gelmeden belirliyor olmanız. Eh, haliyle bu değişkenler boş değer alıyor. Bunu önlemek için, button_login’e basıldığı vakit, checkCredentials fonksiyonu lineEdit’ten güncel içeriği çekmesi gerekiyor. Bu sayede o anki veriye ulaşıp doğru bir kontrol yapabilirsiniz.


#4

Teşekkür ederim açıklamanız için :blush: