首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何检测QTableView行单元格中的按钮单击

在QTableView中检测行单元格中的按钮单击,可以通过以下步骤实现:

  1. 创建一个自定义的按钮委托类(ButtonDelegate),继承自QItemDelegate。在该类中重写createEditor()方法,创建一个QPushButton作为编辑器,并连接按钮的clicked信号到自定义的槽函数。
  2. 在自定义的按钮委托类中,重写setEditorData()方法和setModelData()方法,用于设置编辑器的数据和将编辑器的数据保存到模型中。
  3. 在自定义的按钮委托类中,定义一个信号buttonClicked(),用于在按钮被点击时发射信号。
  4. 在QTableView中,使用setCellWidget()方法将按钮委托类设置为某一列的委托,以显示按钮。
  5. 在QTableView所在的窗口类中,连接按钮委托类的buttonClicked()信号到槽函数,用于处理按钮点击事件。

下面是一个示例代码:

代码语言:txt
复制
from PyQt5.QtWidgets import QApplication, QTableView, QPushButton, QWidget, QVBoxLayout, QMessageBox, QMainWindow
from PyQt5.QtCore import Qt, QModelIndex, pyqtSignal, QAbstractTableModel, QVariant, QSize
from PyQt5.QtGui import QStandardItemModel, QStandardItem, QIcon
from PyQt5.QtWidgets import QStyledItemDelegate

class ButtonDelegate(QStyledItemDelegate):
    buttonClicked = pyqtSignal(int, int)

    def __init__(self, parent=None):
        super(ButtonDelegate, self).__init__(parent)

    def createEditor(self, parent, option, index):
        button = QPushButton(parent)
        button.clicked.connect(lambda: self.buttonClicked.emit(index.row(), index.column()))
        return button

    def setEditorData(self, editor, index):
        pass

    def setModelData(self, editor, model, index):
        pass

    def updateEditorGeometry(self, editor, option, index):
        editor.setGeometry(option.rect)

class MyTableModel(QAbstractTableModel):
    def __init__(self, data, headers):
        super(MyTableModel, self).__init__()
        self._data = data
        self._headers = headers

    def rowCount(self, parent=QModelIndex()):
        return len(self._data)

    def columnCount(self, parent=QModelIndex()):
        return len(self._headers)

    def data(self, index, role=Qt.DisplayRole):
        if not index.isValid():
            return QVariant()
        elif role == Qt.DisplayRole:
            return self._data[index.row()][index.column()]
        return QVariant()

    def headerData(self, section, orientation, role=Qt.DisplayRole):
        if role == Qt.DisplayRole and orientation == Qt.Horizontal:
            return self._headers[section]
        return QVariant()

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()

        self.table_view = QTableView()
        self.setCentralWidget(self.table_view)

        data = [
            ['John', 'Doe', 'Edit'],
            ['Jane', 'Smith', 'Edit'],
            ['Bob', 'Johnson', 'Edit']
        ]
        headers = ['First Name', 'Last Name', 'Action']

        model = MyTableModel(data, headers)
        self.table_view.setModel(model)

        delegate = ButtonDelegate(self.table_view)
        delegate.buttonClicked.connect(self.handleButtonClicked)
        self.table_view.setItemDelegateForColumn(2, delegate)

    def handleButtonClicked(self, row, column):
        QMessageBox.information(self, 'Button Clicked', f'Button clicked at row {row}, column {column}')

if __name__ == '__main__':
    app = QApplication([])
    window = MainWindow()
    window.show()
    app.exec_()

在上述示例代码中,我们创建了一个自定义的按钮委托类ButtonDelegate,用于在QTableView中显示按钮。在MainWindow类中,我们连接了按钮委托类的buttonClicked信号到handleButtonClicked槽函数,用于处理按钮点击事件。当按钮被点击时,会弹出一个消息框显示按钮所在的行和列。

这个示例中使用了PyQt5库来实现,你可以根据自己的需求选择其他的GUI库。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Python Qt GUI设计:QTableView、QListView、QListWidet、QTableWidget、QTreeWidget和QTreeWidgetltem表格和树类(提升篇—1)

目录 1、QTableView类 2、QListView类 3、QListWidet类 4、QTableWidget类 5、QTreeWidget和QTreeWidgetltem类 ---- 表格与树解决问题是如何在一个控件中有规律地呈现更多数据...信号与自定义对象clicked()槽函数进行绑定,当单击QListView控件里Model一项时会弹出消息框(提示选择是哪─项)。...控件itemClicked信号与自定义对象Clicked()槽函数进行绑定,当单击QListWidget列表一个条目时会弹出消息框,提示选择是哪个条目。...使用QTableWidget时就需要QTableWidgetltem,用来表示表格一个单元格,整个表格就是用各单元格构建起来。...通过示例了解QTableWidget类使用方法,效果如下所示: 示例, 构造了一个QTableWidget对象,并且设置表格为43列。

3.9K30
  • Python Qt GUI设计:QTableView、QListView、QListWidet、QTableWidget、QTreeWidget和QTreeWidgetltem表格和树类(提升篇—1)

    目录 1、QTableView类 2、QListView类 3、QListWidet类 4、QTableWidget类 5、QTreeWidget和QTreeWidgetltem类 ---- 表格与树解决问题是如何在一个控件中有规律地呈现更多数据...信号与自定义对象clicked()槽函数进行绑定,当单击QListView控件里Model一项时会弹出消息框(提示选择是哪─项)。...控件itemClicked信号与自定义对象Clicked()槽函数进行绑定,当单击QListWidget列表一个条目时会弹出消息框,提示选择是哪个条目。...使用QTableWidget时就需要QTableWidgetltem,用来表示表格一个单元格,整个表格就是用各单元格构建起来。...通过示例了解QTableWidget类使用方法,效果如下所示: 示例, 构造了一个QTableWidget对象,并且设置表格为43列。

    3.1K20

    用Qt写软件系列三:一个简单系统工具之界面美化

    前言      在上一篇,我们基本上完成了主要功能实现,剩下一些导出、进程子模块信息等功能,留到后面再来慢慢实现。这一篇来讲述如何对主界面进行个性化定制。...窗口内容布局       由上面的规划图可以看出,内容布局由三个部分组成上方(top layout)编辑框、两个按钮,中间及下面的两个QTableView。...那么就先看看上方top layout怎么个实现。这倒简单,一个编辑框(QLineEdit)、两个下推按钮(QPushButton),用水平布局管理器一拉就完成了。那么如何进行美化了? ...一格格被网格线分开反而觉得被束缚了。其他就是一些常见设置选项,不必多说。另外要注意是,我们总可以看到即便去掉了网格线,当我们鼠标点击某一时,Qt仍然会在鼠标下单元格周围画上一个选线框。...QTableView上下文菜单,则需要重写contextMenuEvent()实现。上下文菜单项背景色仍然可以用QSS进行控制。另外,QTableView还有一个单元格对齐问题。

    6K70

    问与答98:如何根据单元格值动态隐藏指定

    excelperfect Q:我有一个工作表,在单元格B1输入有数值,我想根据这个数值动态隐藏2至行100。...具体地说,就是在工作表中放置一个命令按钮,如果单元格B1数值是10时,当我单击这个命令按钮时,会显示前10,即第2至第11;再次单击按钮后,隐藏全部,即第2至第100;再单击按钮,...则又会显示第2至第11,又单击按钮,隐藏第2至第100……也就是说,通过单击按钮,重复显示第2至第11与隐藏第2至第100操作。...图1 如何实现? 注:这是在chandoo.org论坛上看到一个贴子,有点意思。...,然后将该按钮单击事件关联上述VBA程序,例如: Private Sub cmdButton_Click() HideUnhide End Sub 完成!

    6.3K10

    问与答119:如何使用文件浏览按钮插入文件路径到单元格

    Q:如果我想在包含文件路径单元格右侧添加一个文件浏览按钮,以便直接将所选文件路径输入到该单元格,而无需手动复制粘贴文件路径,该如何实现?...如下图1所示,单元格C3包含完整文件路径和名称,其右侧是一个文件夹图标按钮。 ? 图1 单击该文件夹图标,打开文件打开对话框,如下图2所示,可以从中选取一个文件并单击“打开”按钮。 ?...图2 此时,在单元格C3将输入新文件路径和文件名,如下图3所示。 ? 图3 A:下面是实现方法。 首先,对包含文件路径和文件名单元格定义名称。这虽然不是必需,但能够减小出错风险。...因为如果编写代码中直接引用单元格C3,在插入新或新列后,代码没有改变但可能会引用错误单元格。 我们将包含文件路径和文件名单元格,本例单元格C3,命名为“filePath”。...单击功能区“插入”选项卡“插图”组“图标”按钮,在弹出“插入图标”对话框搜索“文件夹”,然后选择文件夹图标,如下图4所示。 ? 图4 文件夹图标插入到工作表后,调整其位置、大小和颜色。

    1.7K30

    QTableView基本用法讲解,Qt表格控件使用方法

    QTableView是Qt中用来把数据集以表格形式提供给用户一个控件,它与C++BuilderDBGrid作用类似。坦白说,DBGrid使用要比QTableView更容易一些。...但QTableView在使用麻烦同时,也提供了更多灵活性。   ...:   在一个药品划价模块中有这样操作流程:   检索处方项目成功后,把该项目显示到QTableView里,把需要编辑数量字段提供给用户输入,用户输入确认后,该项目留在列表,然后开始下一项目检索录入...实现过程如下:   录入项目保留在临时表tmp,界面上QTableView取名为tbList,与tbList关联Model取名为tb1。...向QTableView添加记录时,字段一定要完整,不能有空白字段,否则结果无法保存。切记。

    15.3K20

    PyQt5 高级界面控制(表格、树、tab、dock、scrollbar、多文档界面)

    表格与树 1.1 QTableView 1.2 QListView 1.3 QListWidget 1.4 QTableWidget 表根据界面宽度自动伸缩 禁止编辑 单击某单元,使之默认选中整行 设置宽高度与内容相匹配...是否显示表头 单元格中放置`控件` 输入行号,快速定位 设置颜色 加粗字体 排序 文本对齐 合并单元格 设置单元格大小 显示网格线 设置图片、更改图片大小 获取单元格内容 右键菜单 1.5 QTreeView...sys.argv) main = listViewDemo() main.show() sys.exit(app.exec_()) 1.3 QListWidget 用于从列表添加删除条目..., "2", "3", "4哦"]) tablewidget.setItem(0, 0, QTableWidgetItem("张三")) tablewidget.setItem...# 合并单元格 tablewidget.setSpan(0, 0, 3, 1) # 0,0 位置 占据 3 1列 tablewidget.setItem(0, 0, QTableWidgetItem

    6.7K20

    Excel实用公式6:求每隔n单元格之和

    学习Excel技术,关注微信公众号: excelperfect 很多时候,我们都可能想要对每隔n单元格求和,其中n是一个整数。如下图1所示,每隔1求和、每隔2求和、每隔3求和,等等。 ?...图1 从图1示例可知,如果我们每隔1求和,有求奇数或者偶数单元格之和两种情况,其中,奇数求和数组公式为: =SUM(IF(MOD(ROW($A$1:$A$15),2)=1,$A$1:$A$15,0...对于每隔2求和,即求第1、4、7、10、13单元格之和,使用数组公式: =SUM(IF(MOD(ROW($A$1:$A$15),3)=1,$A$1:$A$15,0)) 对于每隔3求和,即求第1、...5、9、13单元格之和,使用数组公式: =SUM(IF(MOD(ROW($A$1:$A$15),4)=1,$A$1:$A$15,0)) 我们可以得到一个规律,对于每隔n求和(n>1),其一般公式...: =SUM(IF(MOD(ROW($A$1:$A$15),n+1)=1,$A$1:$A$15,0)) 如果将求和单元格区域命名为Range,那么得到通用公式为: =SUM(IF(MOD(ROW(Range

    3.8K40

    QTableView 一列添加两个按钮

    QTableView一列里添加两个按钮,之前添加一个按钮思路是一样,只是计算了一下按钮宽,放两个按钮而已。...本例源代码:QtTowButtons.rar 看一下列效果 看一下添加两个按钮效果点击第一个按钮弹出 but1 +当前列 点击第二个按钮弹出but2 + 当前行 下面是主要实现 继承自 QItemDelegate...主要是实现 了它painter方法,把两个自定义按钮绘制到视图并保存 还有editorEvent事件,用来处理点击事件,在点击时我们算一下鼠标的坐标在哪个按钮下, 再处理相应点击事件 #ifndef...QStyleOptionButton*, QStyleOptionButton*>* > collButtons; collButtons m_btns; }; #endif // BUTTONDELEGATE_H 按钮具体实现...,此处注释,单元格无法被编辑 return flag; } void TableModel::setHorizontalHeader(const QStringList &headers) {

    3.4K90

    如何统计某单元格数据行数?

    标签:Excel技巧 我们知道,在单元格输入数据时,我们可以通过按Alt+回车键来强制内容换行。然而,在Excel,有没有办法统计单元格究竟有几行数据呢?如下图1所示。...图1 可以使用公式来实现,在单元格B2输入公式: =LEN(A2)-LEN(SUBSTITUTE(A2,CHAR(10),""))+1 其中,CHAR(10)代表换行符。...将上述公式下拉复制,就可以得到其它单元格行数。 你可能会发现,对于空单元格,上述公式会返回结果1。我们可以对公式稍作调整,让其对空单元格返回结果0。...调整后公式如下: =LEN(A2)-LEN(SUBSTITUTE(A2,CHAR(10),""))+(LEN(A2)>1) (感叹)在使用Excel过程,你可能会碰到很多千奇百怪问题,但Excel...我想,这恐怕也是Excel会这么迷人地方之一吧。 朋友们,你有什么使用Excel解决不寻常问题吗?欢迎留言分享。

    42320

    C++ Qt开发:StandardItemModel数据模型组件

    model数据集进行绑定,当绑定后,模型数据发生变化则会自动刷新到View组件,我们就无需关心界面组件如何显示了,这个现实过程交给Model映射吧。...如下所示代码片段是一个使用 QStandardItemModel 例子,演示了如何创建一个带有表头和初始数据 QTableView。...循环添加数据到模型,包括 "20210506"、"lyshark" 和 "24"。 这样,就创建了一个包含表头和数据 QTableView,并将其显示在 MainWindow 。...Item } } 读者可自行运行程序,当程序运行后默认只能点击打开按钮,点击打开按钮后可以选择项目中data.txt文本文件,此时就可以将文本内容映射到组件,其输出效果如下图所示; 1.3...,并将其保存到任意位置,此时打开文件,可看到如下图所示效果; 1.3 插入与删除 首先来解释一下如何添加一,其实添加与插入原理一致,唯一区别在于,添加一数据是在行尾加入,这个可以使用model

    35510

    问与答95:如何根据当前单元格值高亮显示相应单元格

    excelperfect Q:这个问题很奇怪,需要根据在工作表Sheet1输入数值高亮显示工作表Sheet2相应单元格。...具体如下: 在一个工作簿中有两个工作表Sheet1和Sheet2,要求在工作表Sheet1列A单元格输入一个值后,在工作表Sheet2从列B开始相应单元格会基于这个值高亮显示相应单元格。...例如,在工作表Sheet1单元格A2输入值2后,工作表Sheet2单元格B2开始两列单元格将高亮显示,即单元格B2和C2高亮显示;在工作表Sheet1单元格A3输入值3,工作表Sheet2...从B3开始三列单元格将高亮显示,即单元格B3、C3和D3加亮显示,等等。...图1:在工作表Sheet1输入数值 ? 图2:在工作表Sheet2结果 A:可以使用工作表模块事件来实现。

    3.9K20

    PyQt5高级界面控件之QTableWidget(四)

    2 双击单元格 QAbstractItemView.SelectedClicked4Editing 4 单击已经选中内容 QAbstractItemView.EditKeyPressed8Editing...还允许放置控件,通过QTableWidget.setItem()来添加PyQt基本控件 这里把一个下拉列表框和一个按钮加入单元格,设置控件与单元格边距,如为3px像素,代码如下 comBox...(2, 2, newItem) 优化5:合并单元格 将表格第一第一列单元格,更改为占据51列 #合并单元格 tableWidget.setSpan(2,0,5,1) 优化6:设置单元格大小...(0,120) 优化7:在表格不显示分割线 QTableWidget类setShowGrid()函数是从QTableView类继承,用来设置是否显示表格分割线,默认显示分割线 #表格不显示分割线...编辑规则枚举值类型 表格选择行为枚举值 单元格文本水平对齐方式 单元格文本垂直对齐方式 实例:QTableWidget基本用法 代码分析 实例二:在表格快速定位到指定 实例三:QTableWidget

    3.9K10

    Excel小技巧90:快速删除包含指定值所有

    有一个Excel操作问题:我想删除所有包含有“完美Excel”如何快速操作? 我想,你肯定是多么地不想再看“完美Excel”公众号了!...如下图1所示工作表,现在要删除单元格内容为“完美Excel”所在。 ? 图1 首先,选择所有的数据。...图2 单击“查找全部”按钮,在下面的列表框中选中全部查到单元格(先选取第1,按住Shift键,滚动到最后,选取最后1,这将选择所有查找到结果),如下图3所示。 ?...图3 单击“关闭”按钮,此时,工作表中所有含有内容“完美Excel”单元格都被选择。 接下来,按 组合键,弹击“删除”对话框,选取“整行”,如下图4所示。 ?...图4 单击“确定”按钮,即可删除所有含有“完美Excel”内容单元格所在。 详细操作演示见下图5。 ? 图5

    10.3K50

    使用VBA实现数字雨效果

    标签:VBA,条件格式 在Excel,借助于Excel公式、条件格式和一点点VBA代码,也能实现高科技题材电影数字雨效果。如下图1所示。 图1 下面详细讲解如何实现这样效果。...在工作表第一单元格区域A1:AP1,输入0至9之间随机数,可以使用RANDBETWEEN函数来创建随机数,然后调整列宽以方便查看,如下图2所示。...在“新建格式规则”对话框,选择规则类型“使用公式确定要设置格式单元格”,在“为符合此公式值设置格式”输入公式: =MOD($AR$1,15)=MOD(ROW()+A$1,15) 单击“格式”按钮...在“条件格式规则管理器”单击“新建规则”,按上述步骤,选择规则类型“使用公式确定要设置格式单元格”,在“为符合此公式值设置格式”输入公式: =MOD($AR$1,15)=MOD(ROW()+A...在“条件格式规则管理器”单击“新建规则”,按上述步骤,选择规则类型“使用公式确定要设置格式单元格”,在“为符合此公式值设置格式”输入公式: =OR(MOD($AR$1,15)=MOD(ROW(

    1.4K30

    QTableView + QStandardItemModel模式显示表格冻结列(模板)

    使用 QStandardItemModel,你可以轻松地将数据填充到表格,并通过和列索引访问和修改数据。...03、QStandardItemQStandardItem 是 Qt 框架中一个用于表示表格单元格数据对象。...在 QTableView ,QStandardItem 作为数据模型基本元素,负责展示和编辑表格数据。通过操作 QStandardItem,你可以实现对表格数据增删改查等操作。...在 QTableView、QListView 等控件,QModelIndex 用来唯一标识模型一个元素,以便于获取和操作该元素数据。QModelIndex 主要作用包括:1. ...定位元素:通过 QModelIndex 可以获取到模型中指定位置元素,例如获取第一第一个单元格 QModelIndex。2.

    17410
    领券