2012-02-16 2 views
2

вот мои вопросы: у меня есть эти виджеты - QMenuBar, QTableWidget и QToolbar. Вот мой пример кода:QMenu для QTableWidget в PySide/PyQt

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, например, (я имею в виду только добавление/удаление строк/coloumns). Заранее спасибо.

+0

Вы говорите во всплывающем меню по заголовкам строк/столбцов? –

+0

@ Андрейс Кайников, да. – SaulTigh

ответ

7

Используйте 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()) 
Смежные вопросы