如何将 "QTableWidget" 中的值打印到另一个 "QTableWidget"?

How can I print values from "QTableWidget" to another "QTableWidget"?

我正在尝试编写一个足球运动员选择程序。该方案由2windows组成。该程序根据他们的标准衡量球员并显示谁是最佳选择。

关于我的问题,我无法打印第一个 window(在主页上)输入的球员姓名,而第二个 window(在结果 window).

同样,结果也是如此,我在控制台中得到了结果输出,但我无法在我的第二个 window (result window) 中打印输出结果会写的。

我在两个 windows 中都使用了 QTableWidget。结果 window 中不会有任何操作,只有结果。如果您有任何其他小部件建议可以展示给他们,我也欢迎他们。

Photo of the interface

当您单击此处的“Hesapla”(计算)按钮时,会在后台进行计算,然后第二个 window 打开。

我想将第一个 window 中的“İsim”(姓名)列打印到第二个 window 中的“Futbolcular”(足球运动员)列,并在第二列中打印我的结果.

那我主要window:

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循环来打印,但是在我的第二个window里面并没有打印出来,它returns None…

它说:

    sonuc_topcu.setText(topcu_isim)
AttributeError: 'NoneType' object has no attribute 'setText'

塞拉姆, 其实很基础 首先,通过循环从数据表中获取数据。 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 数据框,但你可以添加字典、列表或任何你想要的。 第二, 获取数据并放入另一个数据表

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])))