PyQT5 Tabloya item nasıl eklenir?

2

Arkadaşlar merhaba. Barkodsuz ürün ekleme kısmına gereken bilgileri girdiğimde altındaki tabloya yazılsın istiyorum. textBox’lara girilenleri falan çekebildim ama tabloya eklemeyi nasıl yapacağımı bilmiyorum. Nasıl yapabilirim?

Tabloyu yapma kodum:

        self.arayuz.satisVeKasa_alisverisListesiListBox.clear()
        self.arayuz.satisVeKasa_alisverisListesiListBox.setColumnCount(6)
        self.arayuz.satisVeKasa_alisverisListesiListBox.setHorizontalHeaderLabels(("Ürün Barkodu", "Ürün Adı", "Ürün Markası", "Kategori", "Birim", "Ödenecek"))
        self.arayuz.satisVeKasa_alisverisListesiListBox.horizontalHeader().setSectionResizeMode(QtWidgets.QHeaderView.Stretch)

        self.arayuz.satisVeKasa_alisverisListesiListBox.setRowCount(5)

nedir bu kulandığın widget ?

Nasıl yani? Normal tableWidget?

setItem(row, column, item) ile yapabilirsin.

self.ListBox.setItem(0,0, QTableWidgetItem("00001011"))
self.ListBox.setItem(0,1, QTableWidgetItem("Canga"))
self.ListBox.setItem(0,2, QTableWidgetItem("Eti"))
self.ListBox.setItem(0,3, QTableWidgetItem("Çikolata"))
self.ListBox.setItem(0,4, QTableWidgetItem("1"))
self.ListBox.setItem(0,5, QTableWidgetItem("2.5 TL"))

ListBox kısmını kendine göre ayarlaman gerekiyor.

1 Beğeni

Hocam peki bunu nasıl otomatik hale getiririm? Mesela tabloda 2 tane row varsa, sonradan eklenen row u nasıl otomatik olarak 3. row a verebilirim?

obje adına satisVeKasa_alisverisListesiListBox listbox demişsin ondan kafam karıştı,

şöyle bir metodu varmış :

QtWidgets.QTableWidget.rowCount()

şurada lsiteli metodları buradan bakaiblirsin: QTableWidget — Qt for Python

3 Beğeni

rowCount() ile row sayısını çekebiliyorsun.
Fakat bu en son eklenen row değeri yerine toplam row değerini veriyor.
Bunun yerine sınıf içerisinde değişken kullanarak bunu kontrol etmen daha doğru olur diye düşünüyorum.
mesela en başta self.row = 0 diye değişken tanımlarsın.
Sonrasında yeni bir row eklersin,

self.row += 1
self.ListBox.setRowCount(self.row)
self.ListBox.setItem(self.row, 0, item)
.
.
.

şeklinde ilerleyebilirsin. Bunları fonksiyon içerisinde oluşturabilirsen çok daha pratik olur diye düşünmekteyim.

1 Beğeni

eğer row dinamik artıyorsa benim dediğim iş görür ama row sayısı önceden veriliyorsa senin dediğin doğru.

2 Beğeni

Hocam merhaba. Kusura bakmayın rahatsız ediyorum.

       self.arayuz.satisVeKasa_alisverisListesiListBox.setItem(0, 0, QTableWidgetItem(urunAdi))
       self.arayuz.satisVeKasa_alisverisListesiListBox.setItem(0, 1, QTableWidgetItem(urunAdetGram))
       self.arayuz.satisVeKasa_alisverisListesiListBox.setItem(0, 2, QTableWidgetItem(urunFiyat))
       self.arayuz.satisVeKasa_alisverisListesiListBox.setItem(0, 3, QTableWidgetItem(urunFiyat))
       self.arayuz.satisVeKasa_alisverisListesiListBox.setItem(0, 4, QTableWidgetItem(urunFiyat))
       self.arayuz.satisVeKasa_alisverisListesiListBox.setItem(0, 5, QTableWidgetItem(urunFiyat))

Dediğiniz gibi yaptım fakat tabloya eklemiyor.

Neden olabilir?

def barkodsuzUrunEkleme(self):

       urunAdi = self.arayuz.satisVeKasa_barkodsuzUrunEkleme_urunAdiTextBox.text()

       urunAdetGram = self.arayuz.satisVeKasa_barkodsuzUrunEkleme_adetGramTextBox.text()

       urunFiyat = self.arayuz.satisVeKasa_barkodsuzUrunEkleme_fiyatTextBox.text()

             

       self.arayuz.satisVeKasa_alisverisListesiListBox.setItem(0, 0, QTableWidgetItem(urunAdi))

       self.arayuz.satisVeKasa_alisverisListesiListBox.setItem(0, 1, QTableWidgetItem(urunAdetGram))

       self.arayuz.satisVeKasa_alisverisListesiListBox.setItem(0, 2, QTableWidgetItem(urunFiyat))

       self.arayuz.satisVeKasa_alisverisListesiListBox.setItem(0, 3, QTableWidgetItem(urunFiyat))

       self.arayuz.satisVeKasa_alisverisListesiListBox.setItem(0, 4, QTableWidgetItem(urunFiyat))

       self.arayuz.satisVeKasa_alisverisListesiListBox.setItem(0, 5, QTableWidgetItem(urunFiyat))

       self.formYukle()
1 Beğeni

İtem’leri eklemeden önce setRowCount(1) yapabilir misin?

Bu sefer oldu ama sadece 1 tane row ekleyebiliyoruz hocam.

Evet o yüzden her seferinde setRowCount() ile artırmak gerekiyor, veya ilk başta fazlaca yer oluşturman gerekiyor. Kısayolu var mıdır bilmem ama şurada bahsettiğim gibi yapabilirsin.

Hocam kusura bakmayın cidden bir yerlerde yanlış yapıyorum ama anlamadım.

def barkodsuzUrunEkleme(self):

        self.row = 0

        urunAdi = self.arayuz.satisVeKasa_barkodsuzUrunEkleme_urunAdiTextBox.text()

        urunAdetGram = self.arayuz.satisVeKasa_barkodsuzUrunEkleme_adetGramTextBox.text()

        urunFiyat = self.arayuz.satisVeKasa_barkodsuzUrunEkleme_fiyatTextBox.text()

        self.row += 1

        self.arayuz.gecmisAlisverisler_gecmisAlisverislerListBox.setRowCount(self.row)

       

        self.arayuz.satisVeKasa_alisverisListesiListBox.setItem(self.row, 0, QTableWidgetItem(urunAdi))

        self.arayuz.satisVeKasa_alisverisListesiListBox.setItem(self.row, 1, QTableWidgetItem(urunAdetGram))

        self.arayuz.satisVeKasa_alisverisListesiListBox.setItem(self.row, 2, QTableWidgetItem(urunFiyat))

        self.arayuz.satisVeKasa_alisverisListesiListBox.setItem(self.row, 3, QTableWidgetItem(urunFiyat))

        self.arayuz.satisVeKasa_alisverisListesiListBox.setItem(self.row, 4, QTableWidgetItem(urunFiyat))

        self.arayuz.satisVeKasa_alisverisListesiListBox.setItem(self.row, 5, QTableWidgetItem(urunFiyat))

        self.arayuz.satisVeKasa_alisverisListesiListBox.setItem(self.row, 6, QTableWidgetItem(urunFiyat))

Hatam nerede?

Sanırım farklı bir ListBox’un row sayısını değiştirmişsiniz.

Edit: Ek olarak self.row = 0’ı __init__() içerisinde tanımlasanız daha iyi olur. Yoksa fonksiyon her çağrıldığında self.row = 0 olacak.

1 Beğeni


Hocam bu sefer de sadece 1 tane ekliyor ve boş olarak ekliyor.

Uups, şurada hata yapmışım.

Burada self.row - 1 yapmamız gerekiyor.

Hocam dediğiniz gibi 0 yerine 1’den başlattım. Ama halen aynı.

        urunAdi = self.arayuz.satisVeKasa_barkodsuzUrunEkleme_urunAdiTextBox.text()

        urunAdetGram = self.arayuz.satisVeKasa_barkodsuzUrunEkleme_adetGramTextBox.text()

        urunFiyat = self.arayuz.satisVeKasa_barkodsuzUrunEkleme_fiyatTextBox.text()

        self.row += 1

        self.arayuz.satisVeKasa_alisverisListesiListBox.setRowCount(self.row)

       

        self.arayuz.satisVeKasa_alisverisListesiListBox.setItem(self.row, 1, QTableWidgetItem(urunAdi))

        self.arayuz.satisVeKasa_alisverisListesiListBox.setItem(self.row, 2, QTableWidgetItem(urunAdetGram))

        self.arayuz.satisVeKasa_alisverisListesiListBox.setItem(self.row, 3, QTableWidgetItem(urunFiyat))

        self.arayuz.satisVeKasa_alisverisListesiListBox.setItem(self.row, 4, QTableWidgetItem(urunFiyat))

        self.arayuz.satisVeKasa_alisverisListesiListBox.setItem(self.row, 5, QTableWidgetItem(urunFiyat))

        self.arayuz.satisVeKasa_alisverisListesiListBox.setItem(self.row, 6, QTableWidgetItem(urunFiyat))

Kusura bakmayın uğraştırdıysam.

Yok hayır, oradaki -'yi çıkarma işlemi olarak belirtmiştim.
self.row - 1, 0, QTableWidgetItem()
gibisinden.

1 Beğeni

Vallahi oldu; çok teşekkür ederim.

1 Beğeni