ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

PyQt5基础学习-QMenu(右键菜单) 1.QTableWidget().selectionModel().selection().indexes(获得右键选择的索引值) 2.QTableWidg

2022-02-05 12:34:52  阅读:206  来源: 互联网

标签:selection rowIndex text self QTableWidget item tableWidget 右键 newItem


右键点击表格的选项,然后弹出响应的菜单

TableWidgetContextMenu.py 

"""
在表格中显示上下文菜单

1.如何弹出菜单
2.在满足条件下弹出菜单

QMenu.exec_
"""

import sys
from PyQt5.QtWidgets import *

from PyQt5.QtCore import *

class TableWidgetContextMenu(QWidget):

    def __init__(self):
        super(TableWidgetContextMenu, self).__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle("在表格中显示上下文菜单")
        self.resize(500, 300)
        layout = QHBoxLayout()
        self.tableWidget = QTableWidget()
        self.tableWidget.setRowCount(5)
        self.tableWidget.setColumnCount(3)
        layout.addWidget(self.tableWidget)

        self.tableWidget.setHorizontalHeaderLabels(['姓名', '性别', '身高'])

        newItem = QTableWidgetItem('张三')
        self.tableWidget.setItem(0, 0, newItem)

        newItem = QTableWidgetItem('男')
        self.tableWidget.setItem(0, 1, newItem)

        newItem = QTableWidgetItem('160')
        self.tableWidget.setItem(0, 2, newItem)

        newItem = QTableWidgetItem('李四')
        self.tableWidget.setItem(1, 0, newItem)

        newItem = QTableWidgetItem('女')
        self.tableWidget.setItem(1, 1, newItem)

        newItem = QTableWidgetItem('170')
        self.tableWidget.setItem(1, 2, newItem)

        newItem = QTableWidgetItem('李')
        self.tableWidget.setItem(2, 0, newItem)

        newItem = QTableWidgetItem('女')
        self.tableWidget.setItem(2, 1, newItem)

        newItem = QTableWidgetItem('170')
        self.tableWidget.setItem(2, 2, newItem)
        #允许单机右键响应
        self.tableWidget.setContextMenuPolicy(Qt.CustomContextMenu)
        #构建右键的点击事件
        self.tableWidget.customContextMenuRequested.connect(self.generateMenu)
        self.setLayout(layout)

    def generateMenu(self, pos):
        print(pos)
        #获得右键所点击的索引值
        for i in self.tableWidget.selectionModel().selection().indexes():
            #获得当前的行数目
            rowIndex = i.row()
            #如果选择的索引小于2, 弹出上下文菜单
            if rowIndex < 2:
                #构造菜单
                menu = QMenu()
                #添加菜单的选项
                item1 = menu.addAction("菜单项1")
                item2 = menu.addAction("菜单项2")
                item3 = menu.addAction("菜单项3")
                #获得相对屏幕的位置
                screenPos = self.tableWidget.mapToGlobal(pos)
                #被阻塞, 执行菜单
                action = menu.exec(screenPos)
                if action == item1:
                    print("选择了第一个菜单项", self.tableWidget.item(rowIndex, 0).text(),
                                            self.tableWidget.item(rowIndex, 1).text(),
                                            self.tableWidget.item(rowIndex, 2).text())
                elif action == item2:
                    print("选择了第二个菜单项", self.tableWidget.item(rowIndex, 0).text(),
                                            self.tableWidget.item(rowIndex, 1).text(),
                                            self.tableWidget.item(rowIndex, 2).text())
                elif action == item3:
                    print("选择了第三个菜单项", self.tableWidget.item(rowIndex, 0).text(),
                                            self.tableWidget.item(rowIndex, 1).text(),
                                            self.tableWidget.item(rowIndex, 2).text())
            else:
                return

if __name__ == "__main__":
    app = QApplication(sys.argv)
    main = TableWidgetContextMenu()
    main.show()

    sys.exit(app.exec_())

 

标签:selection,rowIndex,text,self,QTableWidget,item,tableWidget,右键,newItem
来源: https://www.cnblogs.com/hyq-lst/p/15864054.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有