1. 程式人生 > 程式設計 >PyQt5中QTableWidget如何彈出選單的示例程式碼

PyQt5中QTableWidget如何彈出選單的示例程式碼

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,Item1)

    Item2 = QTableWidgetItem("男")
    self.tableWidget.setItem(0,1,Item2)

    Item3 = QTableWidgetItem("30")
    self.tableWidget.setItem(0,2,Item3)

    # 第二行
    Item1 = QTableWidgetItem("小王")
    self.tableWidget.setItem(1,Item1)

    Item2 = QTableWidgetItem("男")
    self.tableWidget.setItem(1,Item2)

    Item3 = QTableWidgetItem("28")
    self.tableWidget.setItem(1,Item3)

    # 第三行
    Item1 = QTableWidgetItem("小紅")
    self.tableWidget.setItem(2,Item1)

    Item2 = QTableWidgetItem("女")
    self.tableWidget.setItem(2,Item2)

    Item3 = QTableWidgetItem("18")
    self.tableWidget.setItem(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',0).text())
      if action == item3:
        print('選擇選單3',0).text())
      else:
        return



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

到此這篇關於PyQt5中QTableWidget如何彈出選單的示例程式碼的文章就介紹到這了,更多相關PyQt5 QTableWidget 彈出選單內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!