PyQt5中QTablewidget生成右键菜单

QTablewidget生成右键菜单,需要自定义一个QTablewidget类

import sys
from PyQt5.QtWidgets import QApplication, QTableWidget, QTableWidgetItem, QMenu, QAction, QDialog
from PyQt5.QtCore import Qt
from PyQt5 import QtCore

class CustomTableWidget(QTableWidget): 
    def __init__(self, parent=None):
        super(CustomTableWidget, self).__init__( parent)
        self.setRowCount(10)
        self.setColumnCount(2)

        # 初始化表格数据
        self.setHorizontalHeaderLabels(['姓名','班别']) #水平标题
        names = ['小天','小米','小云','小月','小芳','小贝','小美','小亮','小欢','小阳']
        classes = ['一班','一班','一班','二班','二班','二班','二班','三班','三班','三班']
        
        i = 0
        for item in names:
            self.setItem(i,0, QTableWidgetItem(item))#添加内容到表格中
            self.setItem(i,1, QTableWidgetItem(classes[i]))
            i += 1
        
        # 创建右键菜单
        self.popup_menu = QMenu(self)
        self.action1 = QAction("显示", self)#生成一个选项
        self.popup_menu.addAction(self.action1)#将选项添加到菜单中

        # 连接动作到槽函数(可选)
        self.action1.triggered.connect(self.on_action1_triggered)

    def mousePressEvent(self, event):#重写mousePressEvent
        if event.button() == Qt.RightButton:
            # 获取点击的单元格位置
            self.row = self.rowAt(event.y())#行
            self.column = self.columnAt(event.x())#列
            super().mousePressEvent(event)#调用父类的mousePressEvent处理其他事件
            
            # 显示右键菜单
            self.popup_menu.exec_(event.globalPos())
        else:
            super().mousePressEvent(event)#调用父类的mousePressEvent处理其他事件

    def on_action1_triggered(self):
        # 菜单选项action1的动作
        print(f"行:{self.row}  列:{self.column}")

if __name__ == '__main__':
    app = QApplication(sys.argv)
    dialog = QDialog()
    dialog.resize(400, 300)
    table = CustomTableWidget(dialog)  # 创建一个表格
    table.setGeometry(QtCore.QRect(70, 50, 256, 192))
    dialog.show()
    sys.exit(app.exec_())

按F5运行,在界面的表格中按右键时,显示菜单
在这里插入图片描述
选中显示是,控制台输出选中的行数和列数
在这里插入图片描述
QAction的信号

信号内容
triggered点击或回车键触发时
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在QTableWidget实现右键菜单功能,可以使用QMenu和contextMenuEvent()事件。具体实现步骤如下: 1.创建QMenu对象并添加菜单项。 ```python menu = QMenu(self) menu.addAction("Copy") menu.addAction("Paste") ``` 2.在QTableWidget的contextMenuEvent()事件,设置菜单的位置,并显示菜单。 ```python def contextMenuEvent(self, event): menu = QMenu(self) menu.addAction("Copy") menu.addAction("Paste") if self.itemAt(event.pos()): menu.exec_(event.globalPos()) ``` 完整代码如下: ```python from PyQt5.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem, QMenu from PyQt5.QtCore import Qt class MainWindow(QMainWindow): def __init__(self): super().__init__() self.table = QTableWidget(self) self.table.setRowCount(4) self.table.setColumnCount(2) self.table.setHorizontalHeaderLabels(["Name", "Age"]) self.table.setItem(0, 0, QTableWidgetItem("Tom")) self.table.setItem(0, 1, QTableWidgetItem("20")) self.table.setItem(1, 0, QTableWidgetItem("Jerry")) self.table.setItem(1, 1, QTableWidgetItem("18")) self.table.setItem(2, 0, QTableWidgetItem("Lucy")) self.table.setItem(2, 1, QTableWidgetItem("22")) self.table.setItem(3, 0, QTableWidgetItem("John")) self.table.setItem(3, 1, QTableWidgetItem("25")) self.setCentralWidget(self.table) def contextMenuEvent(self, event): menu = QMenu(self) menu.addAction("Copy") menu.addAction("Paste") if self.table.itemAt(event.pos()): menu.exec_(event.globalPos()) if __name__ == "__main__": app = QApplication([]) window = MainWindow() window.show() app.exec_() ``` 这样就可以在QTableWidget实现右键菜单功能了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值