QTableWidget是Qt程式中常用的顯示資料表格的控件,類似于c#中的DataGrid。QTableWidget是QTableView的子類,它使用标準的資料模型,并且其單中繼資料是通過QTableWidgetItem對象來實作的,使用QTableWidget時就需要QTableWidgetItem。用來表示表格中的一個單元格,整個表格就是用各個單元格建構起來的
在PyQt5中,常需要對表格進行右擊後彈出菜單,要實作這個操作就是兩個問題:1. 如何彈出菜單。2. 如何在滿足條件的情況下彈出菜單
在本文中簡要介紹了一個方法來解決這個問題(附在代碼中,大約從第60行開始)
from PyQt5 import QtCore
from PyQt5.QtCore import QSize, Qt
from PyQt5.QtGui import *
from PyQt5.QtWidgets 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(['姓名', '性别', '年齡'])
# 第一行
Item1 = QTableWidgetItem("老王")
self.tableWidget.setItem(0, 0, Item1)
Item2 = QTableWidgetItem("男")
self.tableWidget.setItem(0, 1, Item2)
Item3 = QTableWidgetItem("30")
self.tableWidget.setItem(0, 2, Item3)
# 第二行
Item1 = QTableWidgetItem("小王")
self.tableWidget.setItem(1, 0, Item1)
Item2 = QTableWidgetItem("男")
self.tableWidget.setItem(1, 1, Item2)
Item3 = QTableWidgetItem("28")
self.tableWidget.setItem(1, 2, Item3)
# 第三行
Item1 = QTableWidgetItem("小紅")
self.tableWidget.setItem(2, 0, Item1)
Item2 = QTableWidgetItem("女")
self.tableWidget.setItem(2, 1, Item2)
Item3 = QTableWidgetItem("18")
self.tableWidget.setItem(2, 2, Item3)
# 允許彈出菜單
self.tableWidget.setContextMenuPolicy(Qt.CustomContextMenu)
# 将信号請求連接配接到槽(單擊滑鼠右鍵,就調用方法)
self.tableWidget.customContextMenuRequested.connect(self.generateMenu)
self.setLayout(layout)
# pos為點選的位置
def generateMenu(self, pos):
print(pos)
# 得到索引
for i in self.tableWidget.selectionModel().selection().indexes():
rowNum = i.row()
# 如果選擇的行索引小于1,彈出上下文菜單
if rowNum < 3:
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('選擇菜單1', self.tableWidget.item(rowNum, 0).text())
if action == item2:
print('選擇菜單2', self.tableWidget.item(rowNum, 0).text())
if action == item3:
print('選擇菜單3', self.tableWidget.item(rowNum, 0).text())
else:
return
if __name__ == "__main__":
app = QApplication(sys.argv)
main = TableWidgetContextMenu()
main.show()
sys.exit(app.exec_())
到此這篇關于PyQt5中QTableWidget如何彈出菜單的示例代碼的文章就介紹到這了,更多相關PyQt5 QTableWidget 彈出菜單内容請搜尋腳本之家以前的文章或繼續浏覽下面的相關文章希望大家以後多多支援腳本之家!