PySide/PyQt 中 QTableWidget 的 QMenu

Posted

技术标签:

【中文标题】PySide/PyQt 中 QTableWidget 的 QMenu【英文标题】:QMenu for QTableWidget in PySide/PyQt 【发布时间】:2012-02-16 15:05:53 【问题描述】:

这是我的问题详情:我有这些小部件 - QMenuBar、QTableWidget 和 QToolbar。这是我的代码示例:

import sys
from PySide import QtGui
class Example(QtGui.QMainWindow):

  def __init__(self):
      super(Example, self).__init__()

      self.header_lbls = ['Name', 'Second Name', 'Surname', 'Birth Date', 'Phone Number', 'Skype', 'E-mail']

      self.table = QtGui.QTableWidget(10, 7)
      self.table.setHorizontalHeaderLabels(self.header_lbls)
      self.setCentralWidget(self.table)

      #ACTIONS
      self.createActions()

      #MENUBAR
      self.createMenus()

      #TOOLBAR
      self.createToolbar()

      #STATUSBAR
      self.creatStatusbar()

def contextMenuEvent(self, event):
     self.menu = QtGui.QMenu(self.table)
     self.menu.addAction(self.aboutAct)
     self.menu.exec_(QtGui.QCursor.pos())

def createActions(self):
     self.exitAct = QtGui.QAction('E&xit', self, shortcut='Ctrl+Q',
        statusTip='Exit the application', triggered=app.exit)

def createMenus(self):
    self.menubar = self.menuBar()
    self.fileMenu = self.menuBar().addMenu("&File")
    self.fileMenu.addAction(self.exitAct)

def createToolbar(self):
    self.toolbar = self.addToolBar('Toolbar')
    self.toolbar.addAction(self.settingsAct)
    self.toolbar.addSeparator()
    self.toolbar.addAction(self.exitAct)

def creatStatusbar(self):
    self.statusBar()

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    window = Example()
    window.setGeometry(80, 80, 800, 600)
    window.show()
    sys.exit(app.exec_())

问题是:例如,如何使 QMenu 像 Microsoft Excel 中一样(我的意思是仅添加/删除行/列)。提前致谢。

【问题讨论】:

您是在谈论行/列标题上的弹出菜单吗? 【参考方案1】:

使用表头视图的customContextMenuRequested 信号:

class Example(QtGui.QMainWindow):
    def __init__(self):
        ...

        header = self.table.horizontalHeader()
        header.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        header.customContextMenuRequested.connect(self.handleHeaderMenu)

    def handleHeaderMenu(self, pos):
        print('column(%d)' % self.table.horizontalHeader().logicalIndexAt(pos))
        menu = QtGui.QMenu()
        menu.addAction('Add')
        menu.addAction('Delete')
        menu.exec_(QtGui.QCursor.pos())

【讨论】:

以上是关于PySide/PyQt 中 QTableWidget 的 QMenu的主要内容,如果未能解决你的问题,请参考以下文章

PySide/pyQt 在 QTableView 中显示数据

模型中 dropActions 的访问值 (PySide/PyQt/Qt)

PySide/PyQt 中 QTableWidget 的 QMenu

如何为布局中的列设置正确的大小 - PySide/PyQt

在 PySide/PyQt 中使用 drawPolyline 制作动画波浪

在 QTextBrowser 中突出显示文本时发送 PySide/PyQt 信号