python - 在 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 开始的,否则会出现乱码。并且不应用旋转框值。我很想知道哪个部分需要更正。
解决方案
推荐阅读
- linux - 为什么我的 httpd.conf 设置路由到 https?
- java - 如何在银行程序中打印余额(Java)
- php - 在 WordPress 中以编程方式一次删除一个文件
- kotlin - Kotlin null propagation syntax not working
- python - 如何使用 Python 在远程服务器上启动异步服务器?
- ios - iOS VPN 自动断开连接,Algo VPN
- tcl - 如何创建一个列表,从其他列表的特定索引中取出值然后进行排序?
- java - 在启动时使用谷歌计费检查购买
- java - Logback 和 Graylog 无法在 Mac 上使用 syslog 进行通信
- python - Selenium WebDriver 异常:消息:未知错误:无法创建 Chrome 进程