PyQt5 ile oluşturduğum tabloda, düzenlenebilirliği etkinleştirmek

Merhaba. Qt Designer’da tasarladığım küçük bir uygulama var. PyQt yoluyla işlevselleştirmeye uğraşıyorum ancak genel olarak etkinsizleştirdiğim çift tıklamayla tablo düzenleme özelliğini bir düğme aracılığıyla yeniden etkin duruma getiremedeim. Bunun yanında SqLite ile bağlantılama hakkında da yardımcı olabilecek olan olursa sevinirim.
İlgili kod bu şekildedir:

import sys 
from PyQt5 import QtWidgets, QtGui, QtCore
from acustu import Ui_AnaPencere

class Uygulama(QtWidgets.QMainWindow):
    def __init__(self):
        super(Uygulama, self).__init__()

        self.arayuz = Ui_AnaPencere()
        self.arayuz.setupUi(self)

        self.urunleriYukle()
        self.arayuz.dgmEkle.clicked.connect(self.urunEkle)
        self.arayuz.dgmDuzenle.clicked.connect(self.urunDuzenle)
        self.arayuz.dgmSil.clicked.connect(self.urunSil)
        self.arayuz.tabloStok.doubleClicked.connect(self.ciftTiklanan)
        self.arayuz.dgmKapat.clicked.connect(self.uygKapat)

    def urunleriYukle(self):
        urunler = [
            {"kimlik": "1234", "ad": "abcçd", "fiyat": 7000},
            {"kimlik": "2355, "ad": "defgğ", "fiyat": 7500},
            {"kimlik": "3789", "ad": "uüvyz", "fiyat": 7200},
            {"kimlik": "1254", "ad": "klmns", "fiyat": 6600}
        ]

        self.arayuz.tabloStok.setRowCount(len(urunler))
        self.arayuz.tabloStok.setColumnCount(3)
        self.arayuz.tabloStok.setHorizontalHeaderLabels(("Kimlik", "Ad", "Fiyat"))

        satirIndisi = 0
        for urun in urunler:
            self.arayuz.tabloStok.setItem(satirIndisi, 0, QtWidgets.QTableWidgetItem(str(urun["kimlik"])))
            self.arayuz.tabloStok.setItem(satirIndisi, 1, QtWidgets.QTableWidgetItem(urun["ad"]))
            self.arayuz.tabloStok.setItem(satirIndisi, 2, QtWidgets.QTableWidgetItem(str(urun["fiyat"])))
            satirIndisi += 1

    def urunEkle(self):
        kimlik = self.arayuz.grdUrunKimlik.text()
        ad = self.arayuz.grdUrunAdi.text()
        fiyat = self.arayuz.grdUrunFiyati.text()

        if kimlik and ad and fiyat is not None:
            satirSayaci = self.arayuz.tabloStok.rowCount()
            self.arayuz.tabloStok.insertRow(satirSayaci)
            self.arayuz.tabloStok.setItem(satirSayaci, 0, QtWidgets.QTableWidgetItem(kimlik))
            self.arayuz.tabloStok.setItem(satirSayaci, 1, QtWidgets.QTableWidgetItem(ad))
            self.arayuz.tabloStok.setItem(satirSayaci, 2, QtWidgets.QTableWidgetItem(fiyat))

    def urunDuzenle(self):
        pass

    def urunSil(self):
        satir = self.arayuz.tabloStok.currentRow()
        soru = QtWidgets.QMessageBox.question(self, "Kaldır", "Seçtiğiniz ürünü silmek istiyor musunuz?", QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No)
        if soru == QtWidgets.QMessageBox.Yes:
            self.arayuz.tabloStok.removeRow(satir)

    def ciftTiklanan(self):
        self.arayuz.tabloStok.setEditTriggers(QtWidgets.QTableWidget.NoEditTriggers)

    def uygKapat(self):
        quit()

def uygulama():
    uyg = QtWidgets.QApplication(sys.argv)
    pencere = Uygulama()
    pencere.show()
    sys.exit(uyg.exec_())
uygulama()

Vay arkadaş, bir yanıt verebilecek kişi çıkmadı!

Öncelikle,aramıza hoş geldiniz.

Cevap veren biri olmadığına göre bu sorunun cevabını bilmiyoruzdur.2 gün boyunca beklemek yerine nazikçe konuyu üste taşımak için “Yardımcı olabilecek kimse yok mu?” diyebilirsiniz.“Etkinsizleştirmek” yerine “pasif” kelimesini kullanmanızı öneririm.Konu hakkında bilgim olmadığı için sizi çözüme ulaştıracak bir şey söyleyemiyorum.

Merhaba;

Sanırım sorunuz gözümüzden kaçmış, 2 gündür yardımcı olmadığımız için üzgünüm.

Bunu yapamadığınıza göre yüksek ihtimalle, bir yerlerden copy-paste yapmışsınızdır. Düzenlemeyi tetikleyen bayrakları (edit trigger flags) devre dışı bırakmak yerine bir çok sınıf içerisinde bulunan standart nesne metodlarından setEditable metodunu kullanabilirdiniz.

Düzenlemeyi tetikleme bayraklarını tekrar aktif etmek için AllEditTriggers bayrağını kullanabilirsiniz.

Örnek;

self.arayuz.tabloStok.setEditTriggers(QtWidgets.QTableWidget.AllEditTriggers)

Merhaba hoş bulduk, kabaca davrandığımı düşünmenize neden olacak birşey dediğimi sanmıyorum ancak, iki gündür yanıt almayı bekliyordum, malum ümidi kestim zaten. Ayrıca, Türkçe yazmayı tercih ettiğim için “etkinsiz” veya “edilgen” dedim, “pasif” demeden anlaşılmıyor mu acaba?
Lütfen bu, bir yargılama olarak anlaşılmasın, zira başka bir itham istemem.
İlginiz için teşekkürler.

Yardımınız işime yaradı sağ olun. Konuda uzman değilim, kendimi geliştirmeye çalışıyorum. Kodu kopyala-yapıştır yöntemiyle oluşturmadım ancak yararlandığım yerler var tabii ki. İleride yeni yardım taleplerimin olması kuvvetle muhtemeldir.

Buna sevindim

Elbette, hepimiz buradayız :slight_smile:

1 Beğeni