簡體   English   中英

如何將值從“QTableWidget”打印到另一個“QTableWidget”?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM