首页 > 解决方案 > 在 pyqt q 标准中使用 append 时如何找到行值?

问题描述

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

class Widget(QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(500,500,500,500)
        self.list1 = [['a1','a2','a3'], ['b1','b2','b3'], ['c1','c2','c3']]
        self.list2 = [['d1','d2','d3'], ['e1','e2','e3'], ['f1','f2','f3']]
        self.table1()
        self.table2()
        self.layout()

    def table1(self):
        self.table1_model = QStandardItemModel()
        self.table1_view = QTableView()
        self.table1_view.setEditTriggers(QTableView.NoEditTriggers)
        self.table1_view.setSelectionBehavior(QTableView.SelectRows)
        self.table1_view.doubleClicked.connect(self.table1_double)
        for row in range(len(self.list1)):
            for column in range(len(self.list1)):
                table = QStandardItem(str(self.list1[row][column]))
                self.table1_model.setItem(row, column, table)
                table.setTextAlignment(Qt.AlignCenter)
        self.table1_view.setModel(self.table1_model)

    def table1_double(self):
        index = self.table1_view.selectionModel().currentIndex().row()
        self.modelRow = self.get_items_by_row(index, self.table1_model)
        self.table2_model.appendRow([QStandardItem(text) for text in self.modelRow])
        self.qSpinbox = QSpinBox()
        self.qSpinbox.setRange(0, 1000)
        self.qSpinbox.setValue(0)
        self.qSpinbox.valueChanged.connect(self.table2_Spinbox)
        ix = self.table2_model.index(self.table2_model.rowCount() - 1, 2)
        self.table2_view.setIndexWidget(ix, self.qSpinbox)

    def table2_Spinbox(self, s):
        index = self.table1_view.selectionModel().currentIndex().row()
        print(index, s)

    def get_items_by_row(self, row, model):
        return [model.data(model.index(row, col)) for col in range(model.columnCount())]

    def table2(self):
        self.table2_model = QStandardItemModel()
        self.table2_view = QTableView()
        self.table2_view.setEditTriggers(QTableView.NoEditTriggers)
        self.table2_view.setSelectionBehavior(QTableView.SelectRows)
        self.table2_view.setModel(self.table2_model)
        self.table2_button = QPushButton('test button')
        self.table2_button.clicked.connect(self.t2button)

    def t2button(self):
        self.table2_model.clear()
        for row in range(len(self.list2)):
            for column in range(len(self.list2)):
                table = QStandardItem(str(self.list2[row][column]))
                self.table2_model.setItem(row, column, table)
                table.setTextAlignment(Qt.AlignCenter)
                spinbox = QSpinBox()
                spinbox.valueChanged.connect(self.talbe2_Spinbox2)
                i = self.table2_view.model().index(row, 2)
                self.table2_view.setIndexWidget(i, spinbox)
                self.modelRow = self.get_items_by_row(row, self.table2_model)
                self.table2_model.item(row, column).setBackground(QColor('lightblue'))

    def talbe2_Spinbox2(self,s):
        index = self.table2_view.selectionModel().currentIndex().row()
        print(index, s)

    def layout(self):
        layout = QVBoxLayout()
        layout.addWidget(self.table1_view)
        layout.addWidget(self.table2_view)
        layout.addWidget(self.table2_button)
        self.setLayout(layout)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = Widget()
    w.show()
    sys.exit(app.exec_())

在上面的代码中,有两个视图屏幕,如果双击第一个视图屏幕,则在第二个视图屏幕中输入选定的值。我很想知道添加的 spinbox 值如何表示正常值。

让我用一个例子来解释。

按下测试按钮 有 3 个值。

ʻindex' 的值是0 value 1 value 2 values(添加append 时) ʻindex' 的值应该是4,但它是从0 开始的,否则会出现乱码。并且不应用旋转框值。我很想知道哪个部分需要更正。

标签: pythonpython-3.xpyqt

解决方案


推荐阅读