溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PyQt5中QTableWidget如何彈出菜單的示例代碼

發布時間:2020-10-06 22:05:02 來源:腳本之家 閱讀:171 作者:qq_45690024 欄目:開發技術

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 彈出菜單內容請搜索億速云以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持億速云!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女