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