[英]How can I print values from "QTableWidget" to another "QTableWidget"?
我正在嘗試編寫一個足球運動員選擇程序。 該程序由 2 個窗口組成。 該程序根據他們的標准衡量球員,並顯示誰是最佳選擇。
談到我的問題,我無法打印在第一個窗口(在主頁上)中輸入的球員姓名,其中球員的姓名寫在第二個窗口(在結果窗口中)。
同樣,結果也是如此,我在控制台中得到輸出作為結果,但我無法在將寫入結果的第二個窗口(結果窗口)中打印該輸出。
我在兩個窗口中都使用了 QTableWidget。 結果窗口中不會有任何操作,只有結果。 如果您有任何其他小部件建議來展示它們,我也願意接受它們。
當您單擊此處的“Hesapla”(計算)按鈕時,會在后台進行計算並打開第二個窗口。
我想將第一個窗口中的“İsim”(姓名)列打印到第二個窗口中的“Futbolcular”(足球運動員)列,並將我的結果打印在第二列中。
那是我的主窗口:
class AnaPencere(QMainWindow,QTableWidget,QTableWidgetItem):
def __init__(self):
super().__init__()
self.ui = Ui_AnaSayfa()
self.ui.setupUi(self)
self.futbolcular = [[],[]]
self.ui.pushButton_futbolcuekle.clicked.connect(self.futbolcuekle)
self.ui.pushButton_futbolcucikar.clicked.connect(self.futbolcucikar)
self.ui.pushButton_hesapla.clicked.connect(self.hesapla)
self.ui.pushButton_hesapla.clicked.connect(self.ac_sonuc_penceresi)
self.topsis_sonuc = SonucPencere()
def futbolcuekle(self):
satirsayimi = self.ui.tableWidget.rowCount()
self.ui.tableWidget.insertRow(satirsayimi)
self.topsis_sonuc.ui_snc.tableWidget_sonuc.insertRow(satirsayimi)
self.futbolcular.append([])
self.ui.statusBar.showMessage(" Futbolcu sayısı artırıldı.",1500)
def futbolcucikar(self):
if self.ui.tableWidget.rowCount() > 2:
self.ui.tableWidget.removeRow(self.ui.tableWidget.rowCount() - 1)
if self.topsis_sonuc.ui_snc.tableWidget_sonuc.rowCount() > 2:
self.topsis_sonuc.ui_snc.tableWidget_sonuc.removeRow(self.topsis_sonuc.ui_snc.tableWidget_sonuc.rowCount() - 1)
if len(self.futbolcular) > 2:
self.futbolcular.pop()
self.ui.statusBar.showMessage(" Futbolcu sayısı azaltıldı.",1500)
else:
QMessageBox.information(self, "Bilgi Mesajı", "Futbolcu sayısı en az 2 olmalıdır.")
def hesapla(self):
weights = np.array([[0.25, 0.55, 0.40, 0.30, 0.20, 0.10, 0.05]])
criterion_type = ['max', 'max', 'max', 'max', 'max', 'max', 'max']
satirlistesi = [i for i in (range(self.ui.tableWidget.rowCount()))]
for i in range(self.ui.tableWidget.rowCount()):
for j in range(1,self.ui.tableWidget.columnCount()):
for k in satirlistesi:
if i == k:
a = self.ui.tableWidget.item(i, j)
veri = int(a.text())
self.futbolcular[i].append(veri)
#print(self.futbolcular)
dataset = np.array(self.futbolcular)
yakinlik_katsayilari = topsis_method(dataset, weights, criterion_type, graph=False)
for i in range(0, yakinlik_katsayilari.shape[0]):
print('futbolcu' + str(i + 1) + ' = ', round(yakinlik_katsayilari[i], 4))
for i in range(self.ui.tableWidget.rowCount()):
topcu = self.ui.tableWidget.item(i, 0)
topcu_isim = (topcu.text())
self.topsis_sonuc.ui_snc.tableWidget_sonuc.setItem(i, 0, topcu)
sonuc_topcu = self.topsis_sonuc.ui_snc.tableWidget_sonuc.item(i, 0)
sonuc_topcu.setText(topcu_isim)
sonuc_topcu_isim = (sonuc_topcu.text())
print(sonuc_topcu_isim)
for i in range(self.ui.tableWidget.rowCount()):
yks = self.topsis_sonuc.ui_snc.tableWidget_sonuc.item(i, 1)
yks.setText(yakinlik_katsayilari)
def ac_sonuc_penceresi(self):
self.topsis_sonuc.show()
在這里,我使用了最后兩個 for 循環來打印,但它不會在我的第二個窗口中的表內打印,而是返回 None...
它說:
sonuc_topcu.setText(topcu_isim)
AttributeError: 'NoneType' object has no attribute 'setText'
Selam,實際上這是非常基本的,首先,使用循環從數據表中獲取數據。 self.ui.tableWidget.item(row, column).text()
。 基本上 :
for r in range(self.ui.tableWidget.rowCount()):
for c in range(self.ui.tableWidget.columnCount()):
data.loc[r, c] = self.ui.tableWidget.item(r, c).text()
在這里,我添加到 pandas 數據框,但您可以添加 dict、list 或任何您想要的。 二、獲取數據並放入另一個數據表
for c in range(len(data.columns)):
for r, row in data.iterrows():
self.ui.tableWidget.setItem(c, r, QtWidgets.QTableWidgetItem(str(data.iloc[r, c])))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.