使用Python在QT6的tableWidget组件添加内容

发布于:2024-07-22 ⋅ 阅读:(157) ⋅ 点赞:(0)
from PySide6.QtWidgets import QApplication,QWidget,QMainWindow,QVBoxLayout,QTextEdit,QPlainTextEdit,QPushButton,QLineEdit,QAbstractItemView,QTableWidgetItem,QTableWidget,QGridLayout,QCheckBox

# 关键字选择页面
  def openSelectkeyWordPage(self):
    self.keyPage = keyWordSelectPage()
    self.keyPage.show()
    self.keyPage.tableWidget.setRowCount(10)
    self.keyPage.tableWidget.setColumnCount(4)
    
    # self.keyPage.tableWidget.setSelectionBehavior(QAbstractItemView.SelectionMode)
    # self.keyPage.tableWidget.setSelectionMode(QAbstractItemView.)
    # self.keyPage.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
  # 设置表头
    item = QTableWidgetItem("是否选择")
    # item.setTextAlignment(Qt.AlignmentFlag(20))
    self.keyPage.tableWidget.setItem(0, 0, item)
    item = QTableWidgetItem("log关键字")
    self.keyPage.tableWidget.setItem(0, 1, item)
    item = QTableWidgetItem("日志描述")
    self.keyPage.tableWidget.setItem(0, 2, item)
  # 填充表格数据
    row = 1
    col = 1
    for name, score in self.mode_keyWord.items():

      # 创建QCheckBox
      checkBox = QCheckBox()
      # 创建一个QWidget,并把QCheckBox作为子控件添加进去
      widget = QWidget()
      layout = QVBoxLayout(widget)
      layout.addWidget(checkBox)
      layout.setContentsMargins(0, 0, 0, 0)
      widget.setLayout(layout)
                
      # 创建一个QTableWidgetItem,并设置其数据为QWidget
      item = QTableWidgetItem()
      self.keyPage.tableWidget.setItem(row, 0, item)
      # 将QWidget设置为表格的单元格的QWidget
      self.keyPage.tableWidget.setCellWidget(row, 0, widget)
      
      item = QTableWidgetItem(name)
      self.keyPage.tableWidget.setItem(row, col, item)
      item = QTableWidgetItem(score)
      self.keyPage.tableWidget.setItem(row, col+1, item)
      row += 1

      # 检查复选框是否被选中
      checkbox = tableWidget.cellWidget(row, 0)  # 获取特定行的复选框
      is_checked = checkbox.isChecked()  # 检查复选框是否选中

    # 设置表格不可编辑
    # self.keyPage.tableWidget.closePersistentEditor(False)
    self.keyPage.tableWidget.closeEditor(True)
    # self.keyPage.tableWidget.setEditTriggers(QTableWidget.editItem(False))
    # self.keyPage.tableWidget.setEditTriggers(QTableWidget.setEditTriggers(True))

class keyWordSelectPage(QWidget,Ui_Form):
  def __init__(self):
    super().__init__()
    self.setupUi(self)
    self.bind()

  def bind(self):
    self.pushButton_2.clicked.connect(self.cancel)

  def cancel(self):
    self.keyWordPage = keyWordSelectPage()
    self.close()

pyqt5 tableWidget 筛选及排序功能实现(亲测可用)_pyqt5 tableview 搜索-CSDN博客

列表数据筛选


Python 实现tablewidget列表筛选
在Python中,使用PyQt5库可以实现QTableWidget的筛选功能。以下是一个简单的例子,展示了如何根据条件筛选QTableWidget中的数据。

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
 
class TableFilterProxyModel(QSortFilterProxyModel):
    def __init__(self, parent=None):
        super(TableFilterProxyModel, self).__init__(parent)
        self.filter_text = ""
 
    def setFilterText(self, text):
        self.filter_text = text
        self.invalidateFilter()
 
    def filterAcceptsRow(self, row, parent):
        model = self.sourceModel()
        index = model.index(row, 0, parent)
        return self.filter_text in model.data(index).text()
 
class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.table_widget = QTableWidget()
        self.setCentralWidget(self.table_widget)
        self.filter_proxy_model = TableFilterProxyModel(self)
        self.line_edit = QLineEdit()
        self.line_edit.textChanged.connect(self.filter_proxy_model.setFilterText)
 
        self.table_widget.setModel(self.filter_proxy_model)
        self.filter_proxy_model.setSourceModel(self.table_widget.model())
 
        layout = QVBoxLayout()
        layout.addWidget(self.line_edit)
        layout.addWidget(self.table_widget)
        central_widget = QWidget()
        central_widget.setLayout(layout)
        self.setCentralWidget(central_widget)
 
        # 填充TableWidget数据
        self.table_widget.setRowCount(10)
        for row in range(self.table_widget.rowCount()):
            for column in range(3):
                item = QTableWidgetItem("Item %d" % row)
                self.table_widget.setItem(row, column, item)
 
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()
在这个例子中,我们定义了一个TableFilterProxyModel类,它继承自QSortFilterProxyModel。我们重写了setFilterText和filterAcceptsRow方法来实现自定义的筛选逻辑。filterAcceptsRow方法检查每行的第一列是否包含筛选文本。

在MainWindow中,我们创建了一个QTableWidget和一个QLineEdit,用于输入筛选文本。我们将QLineEdit的textChanged信号连接到自定义筛选模型的setFilterText方法。然后,我们设置QTableWidget的模型为我们自定义的筛选代理模型。

最后,我们填充了QTableWidget的数据,并设置了它的中央部件。当在QLineEdit中输入文本时,QTableWidget会实时更新显示筛选后的结果。


网站公告

今日签到

点亮在社区的每一天
去签到