Tuşa Basınca Karakter Silme

Merhaba.

Bir lineEdit ve bir pushButton var.
Line içine yazılan yazının tuşa basılınca karakterin silinmesini istiyorum. Yani tuşa her bastığımızda yazılan metinden bir karakter silinecek.
Bunu nasıl yapabiliriz?

Karakter.py

from PyQt5.QtWidgets import *
from KarakterUi import *

class Pencere(QMainWindow,Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.Init_Ui()

    def Init_Ui(self):
        self.btnKarakterSil.clicked.connect(self.Sil)
        self.show()

    def Sil(self):
        self.lineKarakter.text()

main.py

import sys
import Karakter
from PyQt5.QtWidgets import *

def main():
    uygulama = QApplication(sys.argv)
    pencere = Karakter.Pencere()
    sys.exit(uygulama.exec_())

if __name__ == "__main__":
    main()

KarakterUi.py

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(241, 145)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.lineKarakter = QtWidgets.QLineEdit(self.centralwidget)
        self.lineKarakter.setGeometry(QtCore.QRect(30, 30, 181, 31))
        self.lineKarakter.setObjectName("lineKarakter")
        self.btnKarakterSil = QtWidgets.QPushButton(self.centralwidget)
        self.btnKarakterSil.setGeometry(QtCore.QRect(130, 70, 81, 41))
        self.btnKarakterSil.setObjectName("btnKarakterSil")
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.btnKarakterSil.setText(_translate("MainWindow", "Sil"))
1 Beğeni

Merhaba hocam.

Son karakteri bu kodla çekebiliriz: text = yazi[-1]

Silmek için ise bu yöntemi kullanabilirsiniz:

icerik = self.arayuz.lineKarakter.text()
self.arayuz.lineKarakter.clear()
silinmeIslemi = icerik[:-1]
self.arayuz.lineKarakter.setText(silinmeIslemi)
3 Beğeni

Teşekkür ederim hocam.

1 Beğeni

@Grata hocam bir soru daha sormak istiyorum. Çok kısa
Butona tıklayınca fonksiyona nasıl parametre gönderebilirim?
Aşağıdaki amacım şu.
Mesela btn1 adında bir buton var. Ben btn1’e tıklayınca butonun text’ini alıp linedit içerisine yazdırmak.

Aşağıdaki gibi yaptım ama program kilitlenip kapanıyor.

self.btn1.clicked.connect(self.KarakterGir(self.btn1.text()))

def KarakterGir(self,i):
    self.lineEditSifre.setText(i)

Parametreleri o şekilde giremezsiniz.
connect() kullanırken lambda ile parametre girebilirsiniz.
connect(lambda: self.KarakterGir(self.btn1.text()))
Fakat parametrenin her zaman btn1’in text’i olacağını düşünürsek, çok daha mantıklı bir yol izleyebiliriz.
Mesela (self.sender()).text() ile de amacınıza ulaşabilirsiniz.

def KarakterGir(self):
    self.lineEditSifre.setText((self.sender()).text())
3 Beğeni

Hocam peki şöyle bir kullanım var mı?

Mesel ben btn1 e tıkladım diyelim.
bunu btn1 şeklinde belirtmek yerine tıklanan eleman şeklinde algılamak mümkün mü?

self.tıklanan_eleman.clicked.connect(self.KarakterGir)

Mesela jquery’de this.clicked şeklinde bir kullanım var. Anlatmak istediğim olay bu.

Eğer yanlış anlamamışsam, self.sender() sizin bahsini ettiğiniz şey.

1 Beğeni

Olabilir hocam.
Ama sanırım self.sender.clicked.connect() şeklinde bir kullanımı yok.
Teşekkür ederim.

1 Beğeni