右鍵點擊表格的選項,然后彈出響應的菜單
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_())

