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

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会实时更新显示筛选后的结果。
class selectKeyWordWidget(QWidget, Ui_Form):
  # sendValueToSubWindow = Signal(str)
  def __init__(self):
    super().__init__()
    self.setupUi(self)
    self.tableInit()
    self.bind()

  def bind(self):
    self.pushButton_close.clicked.connect(self.cancelClose)
    self.pushButton_ok.clicked.connect(self.selectOK)
  
  def tableInit(self):
    self.tableWidget
    self.tableWidget.setSelectionBehavior(QAbstractItemView.SelectRows)
    self.tableWidget.setRowCount(8)
    self.tableWidget.setColumnCount(3)
    self.tableWidget.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)  # 禁止编辑单元格
    self.tableWidget.setAlternatingRowColors(True)  # 使表格颜色交错显示

  # 设置表头
    item = QTableWidgetItem("选择")
    item.setBackground(QBrush(QColor("cyan"))) #设置单元格背景颜色
    item.setFont
    # item.setTextAlignment(Qt.AlignmentFlag(20))
    self.tableWidget.setItem(0, 0, item)
    item = QTableWidgetItem("log关键字")
    item.setBackground(QBrush(QColor("cyan")))
    self.tableWidget.setItem(0, 1, item)
    item = QTableWidgetItem("描述")
    item.setBackground(QBrush(QColor("cyan")))
    self.tableWidget.setItem(0, 2, item)

# 设置字体(字体,字号,颜色)
        # Item.setFont(QFont('Times', 14, QFont.Black))
        # # 另外一种方法设置颜色(该为红色)
        # Item.setForeground(QBrush(QColor(255, 0, 0)))
        # tableWidget.setItem(0, 0, Item)

  # 填充表格数据
    row = 1
    col = 1
    print('更新表格关键字文件:',keyWordFlieDir + module_name)
    module_keyWord = readJsonToDict(keyWordFlieDir + module_name)
    for name, score in module_keyWord.items():
      # 创建QCheckBox
      checkBox = QCheckBox()
      # 将QWidget设置为表格的单元格的QWidget
      self.tableWidget.setCellWidget(row, 0, checkBox)
      checkBox.stateChanged.connect(lambda state, row=row: self.on_checkbox_state_changed(row))
      
      item = QTableWidgetItem(name)
      self.tableWidget.setItem(row, col, item)
      item = QTableWidgetItem(score)
      self.tableWidget.setItem(row, col+1, item)
      row += 1
    self.tableWidget.resizeColumnsToContents() #设置列宽跟随内容改变
 
  def on_checkbox_state_changed(self, row):
    # 获取当前行的QCheckBox
    checkBox = self.tableWidget.cellWidget(row, 0)
    # 根据QCheckBox的状态进行操作
    if checkBox.isChecked():
      selectedKeyWord[self.tableWidget.item(row,1).text()] = self.tableWidget.item(row,2).text()

  def cancelClose(self):
    self.keyWordPage = selectKeyWordWidget()
    self.close()

  def selectOK(self):
    mainWindow = MyWindow()
    for name, scord in selectedKeyWord.items():
      mainWindow.plainTextEdit.appendPlainText(name +':'+ scord)
    mainWindow.plainTextEdit.appendPlainText('已经选择关键字:' + str(selectedKeyWord))

### 回答1: 如果您想在Python使用Qt5开发GUI应用程序并添加表格,可以使用PyQt5模块提供的QTableWidget类。 以下是一个简单的示例代码,它创建了一个包含三列的表格,并向其中添加了一些数据: ```python import sys from PyQt5.QtWidgets import QApplication, QTableWidget, QTableWidgetItem class TableWidget(QTableWidget): def __init__(self, parent=None): super(TableWidget, self).__init__(parent) self.initUI() def initUI(self): self.setWindowTitle("Table Widget Example") self.setGeometry(300, 200, 400, 300) # 设置表格行列数 self.setColumnCount(3) self.setRowCount(4) # 设置表格头 self.setHorizontalHeaderLabels(['姓名', '年龄', '性别']) # 设置表格内容 self.setItem(0, 0, QTableWidgetItem("张三")) self.setItem(0, 1, QTableWidgetItem("20")) self.setItem(0, 2, QTableWidgetItem("男")) self.setItem(1, 0, QTableWidgetItem("李四")) self.setItem(1, 1, QTableWidgetItem("30")) self.setItem(1, 2, QTableWidgetItem("女")) self.setItem(2, 0, QTableWidgetItem("王五")) self.setItem(2, 1, QTableWidgetItem("25")) self.setItem(2, 2, QTableWidgetItem("男")) self.setItem(3, 0, QTableWidgetItem("赵六")) self.setItem(3, 1, QTableWidgetItem("28")) self.setItem(3, 2, QTableWidgetItem("女")) # 自适应列宽 self.resizeColumnsToContents() if __name__ == '__main__': app = QApplication(sys.argv) table_widget = TableWidget() table_widget.show() sys.exit(app.exec_()) ``` 在这个示例中,我们创建了一个TableWidget类,它继承自QTableWidget类,并重写了__init__和initUI方法。在initUI方法中,我们设置了表格的行列数,表格头和表格内容,并调用resizeColumnsToContents方法自适应列宽。最后,我们创建了一个QApplication对象,将TableWidget对象添加到其中并显示它。 您可以根据自己的需求更改表格的设置和添加更多的数据。 ### 回答2: Python Qt5表格是指使用Python编程语言Qt5图形用户界面库创建的用于显示和编辑表格数据的组件Qt5是一个跨平台的应用程序框架,它提供了丰富的图形界面控件和工具,使开发者能够轻松地构建各种各样的用户界面。 在使用Python Qt5创建表格时,通常会使用QTableWidget类来实现。QTableWidget是一个可编辑的二维表格,可以通过添加表头和单元格来显示数据。可以使用addItem()方法向表格中添加项目,可以使用setVerticalHeaderLabels()和setHorizontalHeaderLabels()方法设置行和列的标题。 对于表格的编辑,可以使用setItem()方法将QTableWidgetItem对象添加到表格中的特定位置。可以使用item()方法获取特定单元格中的对象,并使用setText()方法设置文本内容。此外,还可以使用setFont()方法设置字体,使用setAlignment()方法设置对齐方式等。 在表格中,还可以使用信号和槽机制来响应用户的操作和事件。例如,可以使用cellClicked()信号来检测用户单击单元格的事件,并通过连接到槽函数来执行相应的操作。 除了基本的表格功能外,Python Qt5还提供了许多其他功能,例如对单元格进行排序、过滤和搜索等。此外,还可以根据需求自定义表格的外观和样式,以及添加其他控件和功能。 总之,Python Qt5表格是一个功能强大的组件,可以用于显示和编辑表格数据,并具有丰富的功能和灵活性。它为开发者提供了方便和便捷的方式来创建交互性强的用户界面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值