PyQt5基礎學習-QMenu(右鍵菜單) 1.QTableWidget().selectionModel().selection().indexes(獲得右鍵選擇的索引值) 2.QTableWidget().setContextMenuPolicy(允許右鍵點擊有反應) 3.QTableWidget.mapToGlobal(獲得相對屏幕的位置信息)


右鍵點擊表格的選項,然后彈出響應的菜單

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_())

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM