Excel'den kopyalanan hücreleri QTableWidget'a sıralı bir şekilde atmak

Merhabalar, excelden kopyaladığım hücreleri, QtableWidget e atarken sıralı şekilde değilde tek bir hücreye alıyor. Bunu sıralı bir şekilde atmanın bir yolu var mı.

Merhaba;

Bu hücreler içerisindeki veriler nerede tutuluyor? Bir veri yapısı içerisinde mi yoksa bir dosyada mı?
Buraya yapıştırma şansınız var mı?

Siz böyle yapmak istediğiniz için Python bunu yapıyor.

Hayır, bunu siz bulacaksınız :slight_smile:

geçen sene statik ödevimde ben de şuan sizin yapmaya çalıştığınız şeyle cebelleşmiştim dolayısıyla ne demek istediğinizi gayet iyi anladım fakat bunu yapamazsınız çünkü, QTableWidget bunun için uygun değil, bütün değerleri tek bir hücreye atar. Bunu çözmenin iki yolu var.

  1. Değerleri tek tek yazmak.
  2. QListWidget kullanmak. Mantıklı olan tabiki de Qlist Widget kullanmak. Bunu araştırırsanız rahat bir şekilde sorununuzu çözersiniz.

Önerinizi deneyeceğim, teşekkürler.

Bunu neye dayanarak söylüyorsunuz?

Bu tamamen sizin elinizde. Isterseniz satır ve sütunlar üzerinde gezinerek veritabanından gelen verileri istediğiniz hücrelere yazdırırsınız.

Bunu biraz daha açmalısınız.

Örneğin veritabanında 5 tane sütun var. Tüm verileri çektiniz ve QListWidget’a eklediniz. Peki hangi verinin hangi sütuna ait olduğunu QListWidget içerisinde nasıl belirtmeyi düşünüyorsunuz?

Doğru olan QTableWidget kullanmak ama arkadaşımız kendisine yardımcı olmamıza izin vermiyor.

Merhaba niye izin vermeyeyim estağfurulllah. Cevabınızdan bunun kolay olmadığını düşündüm ve vazgeçtim çünkü henüz yolun başındayım cevabı ararken bunalmak istemedim çok. Aslında amacım exceldeki hücrelerden fare ile kopyaladığım verileri qtablewidget üzerine aynen excel de olduğu gibi yapıştırmak.

QTableWidget nesnelerini kopyalamak olur ama QTableWidget üzerine yapıştırmak, sanmıyorum :blush: QTableWidget buna izin veriyor mu bilmiyorum. Çünkü daha önce ne ihtiyaç duydum ne de gördüm maalesef.

Excel’den verileri çekip QTableWidget üzerine yazdırmak daha uygun olabilir.

Verileri for döngüsü alıp hücrelere verileri tek tek atman lazım büyük ihtimal sen veriyi atarken sütun satırları sabit bırakıyorsun for döngüsü içinde bunlarıda değiştir

teşekkürler :slight_smile:

merhaba henüz bir döngü yazmadım, amacım kullanıcı açısından kolaylık sağlamaktı. Sanırım çözümü şimdilik yok.

Sanırım bir örnek vermek, daha istekli olmanızı sağlayacak :slight_smile:

import sys
from PySide2.QtWidgets import*
from PySide2.QtCore import*
from PySide2.QtGui import*


class Deneme(QMainWindow):
	def __init__(self):
		super().__init__()
		self.resize(550,400)

		self.widget = QWidget()

		self.tableWidget = QTableWidget() # Tablomuzu oluşturuyoruz.
		self.tableWidget.setRowCount(10) # Tablo satır sayısını 10 yapıyoruz.
		self.tableWidget.setColumnCount(5) # Tablo sütun sayısını 5 yapıyoruz.
		# Yatay düzlemdeki başlıkların etiketlerini (sütun isimlerini) değiştirmek için
		# isimler (string tipinde olmalılar) barındıran bir liste veriyoruz.
		self.tableWidget.setHorizontalHeaderLabels(["a","b","c","d","e"])

		# Döngüye ilk sütundan başlamak için sütun sırasını başlangıçta 0 yapıyoruz.
		sutunSirasi = 0
		# Tablonun sütunlarının sayısı (5) kadar bir döngü oluşturuyoruz.
		for x in range(self.tableWidget.columnCount()):
			# Tüm satırlarda gezinebilmek için satır sırasını kaydırmamız (artırmamız) gerek.
			# 0 dersek her döngüde +1 yapacağımız için başlangıçta satır sırası 1 olur.
			# Bu, ilk satırı kullanamayacağımız anlamına geliyor. Çünkü indexing 0'dan başlıyor.
			satirSirasi = -1
			# Toplam satır sayısını tutuyoruz.
			satirSayisi = self.tableWidget.rowCount()
			# Satır sırası, toplam satır sayısından küçük olduğu sürece bu döngü devam etsin.
			while satirSirasi < satirSayisi:
				# Her döngüde satır sırasını değiştirmek için satır sırasını +1 yapıyoruz.
				satirSirasi += 1
				# Bu döngü çalıştığı sürece her hücreye erişebiliyoruz.
				# Ancak hiçbir hücre içerisinde bir QTableWidgetItem nesnesi olmadan
				# değer alamaz, Widget'ı değiştirilemez.
				# Her hücreye bir QTableWidgetItem nesnesi ekleyip text'ini data+x yapıyoruz.
				# x Integer tipinde olduğu için hata alacağız, almamak için string tipine dönüştürüyoruz.
				item = self.tableWidget.setItem(satirSirasi,sutunSirasi, QTableWidgetItem("data"+str(x)))
			# Satır sırası her döngüde artıyor ve en sonda da toplam satır sayısına denk geliyor.
			# Satır sırası toplam satır sırasına eşitlendiğinde ilk sütundaki tüm
			# satırları gezdik demektir.
			# Diğer sütunun satırlarına geçmek için sütun sırasını kaydırıyoruz (artırıyoruz).
			if satirSirasi >= satirSayisi:
				sutunSirasi += 1

		# Buraları detaylı anlatmaya gerek yok sanırım.
		# Bir dikey yerleşim alanı oluşturup tabloyu üzerine yerleştiriyoruz.
		self.layout = QVBoxLayout()
		self.layout.addWidget(self.tableWidget)
		# Yukarıda oluşturduğumuz QWidget'ın yerleşim alanını
		# self.layout (Vertical Layout) yapıyoruz.
		self.widget.setLayout(self.layout)
		# Merkezi Widget'ı self.widget (QWidget) yapıyoruz.
		self.setCentralWidget(self.widget)


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