- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
双击表 1
的值会将值复制到表 2
。在Table 2
上按鼠标右键可从“删除”菜单中删除Table 2
中的列表。问题是,如果再次从table 1
列表中选择已删除的值,则不会重复,无法选择。 (如果table 1
列表在table 2
中重复,则不会选择它。)
有没有一种简单的方法可以在保留数据的同时删除和查看数据?现在当我将按钮和QMenu运行到代码中时,我修改单元格并在删除table1列表或table2数据时重新接收数据,并且qtableview单元格值被初始化
def Table2_CustomContextMenu(self,position):
if delete == action:
清除条件发生时索引的 self.modelListSave
值,并删除 self.mainTable2.model()。 removeRow(indexRow[0], self.mainTable2.rootIndex())
self.modelListSave
重置self.mainTable2_model
我不明白的是, self.modelListSave
和 self.mainTable2.model()
重复。
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.resize(500, 500)
self.Table1()
self.Table2()
self.Layout()
def Table1(self):
self.select_guorpbox = QGroupBox()
self.select_guorpbox.setTitle("Article 1")
self.rowcount = 10
self.columncount = 10
self.mainTable1_model = QStandardItemModel(self.rowcount, self.columncount)
# self.mainTable1_model.setHorizontalHeaderLabels(['a', 'b', 'c', 'd'])
for i in range(self.rowcount):
for j in range(self.columncount):
table = QStandardItem("TEST[{},{}]".format(i,j))
self.mainTable1_model.setItem(i, j, table)
table.setTextAlignment(Qt.AlignCenter)
self.textFilter = QSortFilterProxyModel()
self.textFilter.setSourceModel(self.mainTable1_model)
self.textFilter.setFilterKeyColumn(2)
self.SerchLineEdit = QLineEdit()
self.SerchLineEdit.textChanged.connect(self.textFilter.setFilterRegExp)
self.mainTable1 = QTableView()
self.mainTable1.setModel(self.textFilter)
self.mainTable1.setColumnWidth(1, 150)
self.mainTable1.setColumnWidth(2, 300)
self.mainTable1.setEditTriggers(QTableView.NoEditTriggers)
self.mainTable1.setSelectionBehavior(QTableView.SelectRows)
# self.mainTable1.setContextMenuPolicy(Qt.CustomContextMenu)
self.mainTable1.doubleClicked.connect(self.Table1_DoubleClicked)
# self.mainTable1.customContextMenuRequested.connect(self.table1_CustomContextMenu)
# column auto sort
# self.mainTable1.setSizeAdjustPolicy(QAbstractScrollArea.AdjustToContents)
# self.mainTable1.resizeColumnsToContents()
v = QVBoxLayout()
v.addWidget(self.mainTable1)
self.select_guorpbox.setLayout(v)
def Table2(self):
self.serch_groupbox = QGroupBox()
self.serch_groupbox.setTitle("Article 2")
lable = QLabel("~")
lable.setFixedWidth(10)
lable.setAlignment(Qt.AlignCenter)
insertbutton = QPushButton("insert")
self.startdate = QDateEdit()
self.startdate.setDate(QDate.currentDate())
self.startdate.setFixedWidth(150)
self.startdate.setCalendarPopup(True)
self.enddate = QDateEdit()
self.enddate.setDate(QDate.currentDate())
self.enddate.setFixedWidth(150)
self.enddate.setCalendarPopup(True)
self.article_serch_button = QPushButton("ARTICL SERTCH")
self.article_serch_button.setFixedWidth(250)
self.mainTable2_model = QStandardItemModel()
self.mainTable2 = QTableView()
self.mainTable2.setSelectionBehavior(QTableView.SelectRows)
self.mainTable2.setContextMenuPolicy(Qt.CustomContextMenu)
self.mainTable2.customContextMenuRequested.connect(self.Table2_CustomContextMenu)
h1 = QHBoxLayout()
h1.addWidget(insertbutton)
h1.addWidget(self.startdate)
h1.addWidget(lable)
h1.addWidget(self.enddate)
h1.addWidget(self.article_serch_button)
h2 = QHBoxLayout()
h2.addWidget(self.mainTable2)
v = QVBoxLayout()
v.addLayout(h1)
v.addLayout(h2)
self.modelListSave = []
self.codeSave = []
self.serch_groupbox.setLayout(v)
def Table1_DoubleClicked(self):
row = []
select_row = self.mainTable1.selectedIndexes()
for row_value in range(len(select_row)):
row.append(self.mainTable1.model().data(select_row[row_value]))
if not self.codeSave:
self.modelListSave.append(row)
for i in range(len(self.modelListSave)):
for j in range(self.columncount):
self.mainTable2_model.setItem(i, j, QStandardItem(self.modelListSave[i][j]))
self.mainTable2.setModel(self.mainTable2_model)
self.codeSave.append(row[0])
spinBox = QSpinBox()
mainTable2_ModelIndex = self.mainTable2.model().index(0, 4)
self.mainTable2.setIndexWidget(mainTable2_ModelIndex, spinBox)
elif row[0] in self.codeSave:
QMessageBox.about(self, " ", "overlap.")
else:
self.modelListSave.append(row)
for i in range(len(self.modelListSave)):
for j in range(self.columncount):
self.mainTable2_model.setItem(i, j, QStandardItem(self.modelListSave[i][j]))
self.mainTable2.setModel(self.mainTable2_model)
self.codeSave.append(row[0])
for k in range(5):
spinBox = QSpinBox()
mainTable2_ModelIndex = self.mainTable2.model().index(k, 4)
self.mainTable2.setIndexWidget(mainTable2_ModelIndex, spinBox)
def Table2_CustomContextMenu(self, position):
menu = QMenu()
delete = menu.addAction("delete")
action = menu.exec_(self.mainTable2.mapToGlobal(position))
indexRow = [index.row() for index in self.mainTable2.selectionModel().selectedRows()]
if delete == action:
del self.modelListSave[indexRow[0]]
self.mainTable2.model().removeRow(indexRow[0], self.mainTable2.rootIndex())
for i in range(len(self.modelListSave)):
for j in range(self.columncount):
self.mainTable2_model.setItem(i, j, QStandardItem(self.modelListSave[i][j]))
self.mainTable2.setModel(self.mainTable2_model)
for k in range(5):
spinBox = QSpinBox()
mainTable2_ModelIndex = self.mainTable2.model().index(k, 4)
self.mainTable2.setIndexWidget(mainTable2_ModelIndex, spinBox)
def Layout(self):
self.vbox = QVBoxLayout()
self.vbox.addWidget(self.SerchLineEdit)
self.vbox.addWidget(self.select_guorpbox)
self.vbox.addWidget(self.serch_groupbox)
self.setLayout(self.vbox)
if __name__ == "__main__":
app = QApplication(sys.argv)
fream = MainWindow()
fream.show()
app.exec_()
最佳答案
根据您的逻辑,您将有关复制行的信息存储在列表中,但是当您从复制表中删除行时,不要将其从该行中删除。此外,如果模型消除了某些元素,则不会通知该列表,这就是错误的原因。
相反,最好不要使用该列表,因为必须通过迭代复制表的行来完成验证。
from PyQt5 import QtCore, QtGui, QtWidgets
class Widget(QtWidgets.QWidget):
def __init__(self, parent=None):
super(Widget, self).__init__(parent)
self.create_table_1()
self.create_table_2()
self.create_layout()
def create_table_1(self):
self.search_lineedit = QtWidgets.QLineEdit()
self.select_groupbox = QtWidgets.QGroupBox(title="Article 1")
self.main_table1_model = QtGui.QStandardItemModel(10, 10, self)
for i in range(self.main_table1_model.rowCount()):
for j in range(self.main_table1_model.columnCount()):
table = QtGui.QStandardItem("TEST[{},{}]".format(i,j))
self.main_table1_model.setItem(i, j, table)
table.setTextAlignment(QtCore.Qt.AlignCenter)
self.textfilter = QtCore.QSortFilterProxyModel(self, filterKeyColumn=2)
self.textfilter.setSourceModel(self.main_table1_model)
self.search_lineedit.textChanged.connect(self.textfilter.setFilterRegExp)
self.main_table1 = QtWidgets.QTableView()
self.main_table1.setModel(self.textfilter)
self.main_table1.setColumnWidth(1, 150)
self.main_table1.setColumnWidth(2, 300)
self.main_table1.setEditTriggers(QtWidgets.QTableView.NoEditTriggers)
self.main_table1.setSelectionBehavior(QtWidgets.QTableView.SelectRows)
self.main_table1.doubleClicked.connect(self.on_table1_doubleClicked)
v = QtWidgets.QVBoxLayout()
v.addWidget(self.main_table1)
self.select_groupbox.setLayout(v)
@QtCore.pyqtSlot(QtCore.QModelIndex)
def on_table1_doubleClicked(self, index):
row = index.row()
filters_row = self.get_items_by_row(row, self.textfilter)
for rowX in range(self.main_table2_model.rowCount()):
table_2_row = self.get_items_by_row(rowX, self.main_table2_model)
if all([item1 == item2 for item1, item2 in zip(filters_row, table_2_row)]):
QtWidgets.QMessageBox.about(self, " ", "overlap.")
return
self.main_table2_model.appendRow([QtGui.QStandardItem(text) for text in filters_row])
spinbox = QtWidgets.QSpinBox()
ix = self.main_table2_model.index(self.main_table2_model.rowCount()-1, 4)
self.main_table2.setIndexWidget(ix, spinbox)
def get_items_by_row(self, row, model):
return [model.data(model.index(row, col)) for col in range(model.columnCount())]
def create_table_2(self):
self.search_groupbox = QtWidgets.QGroupBox(title="Article 2")
label = QtWidgets.QLabel("~")
label.setFixedWidth(10)
label.setAlignment(QtCore.Qt.AlignCenter)
insertbutton = QtWidgets.QPushButton("insert")
self.startdate = QtWidgets.QDateEdit(calendarPopup=True)
self.startdate.setDate(QtCore.QDate.currentDate())
self.startdate.setFixedWidth(150)
self.enddate = QtWidgets.QDateEdit(calendarPopup=True)
self.enddate.setDate(QtCore.QDate.currentDate())
self.enddate.setFixedWidth(150)
self.article_serch_button = QtWidgets.QPushButton("ARTICL SERTCH")
self.article_serch_button.setFixedWidth(250)
self.main_table2_model = QtGui.QStandardItemModel(0, 10)
self.main_table2 = QtWidgets.QTableView()
self.main_table2.setModel(self.main_table2_model)
self.main_table2.setSelectionBehavior(QtWidgets.QTableView.SelectRows)
self.main_table2.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.main_table2.customContextMenuRequested.connect(self.table2_customcontextmenu)
h1 = QtWidgets.QHBoxLayout()
h1.addWidget(insertbutton)
h1.addWidget(self.startdate)
h1.addWidget(label)
h1.addWidget(self.enddate)
h1.addWidget(self.article_serch_button)
h2 = QtWidgets.QHBoxLayout()
h2.addWidget(self.main_table2)
v = QtWidgets.QVBoxLayout()
v.addLayout(h1)
v.addLayout(h2)
self.search_groupbox.setLayout(v)
@QtCore.pyqtSlot(QtCore.QPoint)
def table2_customcontextmenu(self, position):
ix = self.main_table2.indexAt(position)
if not ix.isValid():
return
menu = QtWidgets.QMenu()
delete_action = menu.addAction("delete")
action = menu.exec_(self.main_table2.viewport().mapToGlobal(position))
if action == delete_action:
self.main_table2_model.removeRow(ix.row())
def create_layout(self):
vbox = QtWidgets.QVBoxLayout(self)
vbox.addWidget(self.search_lineedit)
vbox.addWidget(self.select_groupbox)
vbox.addWidget(self.search_groupbox)
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())
关于python - pyqt QStandardItemModel 有没有办法从模型中完全删除值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55254944/
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
在现代 IDE 中,有一个键盘快捷键可以通过键入文件名称来打开文件,而无需将手放在鼠标上。例如: Eclipse:Cmd|Ctrl + Shift + R -> 打开资源 IntelliJ:Cmd|C
有什么东西会等待事件发生(我正在等待的是 WebBrowser.DocumentCompleted),然后执行代码吗?像这样: If (WebBrowser.DocumentCompleted) 不会
我使用 PHP Minify,它很棒。但我的问题是,是否有任何 PHP 插件或其他东西可以自动检测 javascript/css 代码并自动缩小它?谢谢。 最佳答案 Javascript 压缩器? 看
有没有一种语言,类似什么CoffeeScript是JavaScript,编译成windows batch|cmd|command line的语言? 我指的cmd版本是基于NT的,尤其是XP sp3及以
我知道我可以 ,但是,我真的宁愿有一个任务,我可以从任何可以使用所有(或至少大部分)属性的操作系统调用 copy ,但这并没有消除 unix 上的权限。 我想知道是否已经有解决方案,或者我必须自己编
我正在使用 Vuejs(不使用 jQuery)开发一个项目,该项目需要像 jvectormap 这样的 map 但正如我所说,我没有使用 jQuery,那么是否有任何其他库可以在不使用 jQuery
想要进行一个简单的民意调查,甚至不需要基于 cookie,我不在乎投了多少票。有没有类似的插件或者简单的东西? 最佳答案 这是一个有用的教程 - 让我知道它是否适合您 using jQuery to
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
var FileBuff: TBytes; Pattern: TBytes; begin FileBuff := filetobytes(filename); Result := Co
我想要一个 vqmod xml 文件来添加一次上传多个图像的功能。身边有这样的事吗? 编辑:Opencart版本:2.1.0.1 最佳答案 最后我写了一个xml来添加到opencart 2.1.0.1
所以考虑这样的函数: public void setTemperature(double newTemperatureValue, TemperatureUnit unit) 其中Temperatur
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我是 ggplot2 的新手,一直在尝试找到一个全面的美学列表。我想我理解它们的目的,但很难知道哪些可以在各种情况下使用(主要是几何图形?)。 Hadley 的网站偶尔会在各个几何图形的页面上列出可用
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
是否有任何 PHP 函数可以将整数转换为十万和千万? 900800 -> 9,00,800 500800 -> 5,00,800 最佳答案 由于您已在问题标签中添加了 Yii,因此您可以按照 Yii
使用 Clojure 一段时间后,我积累了一些关于它的惰性的知识。我知道诸如map之类的常用API是否是惰性的。然而,当我开始使用一个不熟悉的API(例如with-open)时,我仍然感到怀疑。 是否
我的项目需要一个像 AvalonDock 这样的对接系统,但它的最后一次更新似乎是在 2013 年 6 月。是否有更多...积极开发的东西可以代替它? 最佳答案 AvalonDock 实际上相当成熟并
我正在寻找一个可以逆转 clojure 打嗝的函数 所以 turns into [:html] 等等 根据@kotarak的回答,这现在对我有用: (use 'net.cgrand.enliv
我是一名优秀的程序员,十分优秀!