代码之家  ›  专栏  ›  技术社区  ›  JokerMartini

从qtableview cell displayrole填充上下文菜单

  •  0
  • JokerMartini  · 技术社区  · 7 年前

    如何用qtableview中右键单击的单元格中的显示文本填充上下文菜单操作“search:”。理想情况下,我希望菜单项显示单元格的文本。在本例中,它会说“search:45”,如果用户单击操作,它会设置qlineedit的文本。

    导入系统 从Pyside导入qtcore,qtgui 类示例(qtgui.qwidget): 定义初始化(self,*args,**kwargs): super(例如,self)。初始化(*args,**kwargs) #控制 型号=qtgui.qstandarditemmodel(5,3) model.setHorizontalHeaderLabels(['name'、'age'、'career']) 人=[ '姓名':'凯文','年龄':5,'职业':'运动员', 'name':'maggie','age':13,'career':'banker', 'name':'leslie','age':32,'career':'banker', '姓名':'艾米丽','年龄':45,'职业':'运动员', 'name':'david','age':27,'career':'banker', 'name':'marie','age':63,'career':'secretary' ] 对于行,枚举中的obj(人): model.setItem(行,0,项) item=qtgui.qstandarditem(str(obj[‘age’)) model.setitem(行,1,项) item=qtgui.qstandarditem(obj[职业]) model.setitem(行,2,项) proxy_model=qtgui.qsortfilterproxymodel()。 proxy_model.setSourceModel(模型) #控制 self.ui_table=qtgui.qtableview()。 self.ui_table.setEditTriggers(qtgui.qabstratemView.noEditTriggers) self.ui_table.setSelectionBehavior(qtgui.qabstratemView.selectRows) self.ui_table.setselection模式(qtgui.qabstratemview.singleselection) self.ui_table.setmodel(代理\u模型) self.ui_table.setContextMenuPolicy(qtcore.qt.customContextMenu) self.ui_search=qtgui.qlineedit()。 #行动 self.act_search_keyword=qtgui.qaction('search',self) 菜单菜单 self.context_menu=qtgui.qmenu('file') self.context_menu.addaction(self.act_search_关键字) #敷设总管 lay_main=qtgui.qvboxlayout()。 lay_main.addwidget(self.ui_搜索) lay_main.addwidget(self.ui_表格) 自设置布局(主布局) #连接 self.ui_table.customContextMenuRequested.connect(self.open_context_菜单) def打开上下文菜单(self,point): self.context_menu.exec_uu(qtgui.qcursor.pos()) 如果“名称”= app=qtgui.qapplication(系统argv) ex=示例() 例如,show()) 系统退出(app.exec_u())

    enter image description here

    import sys
    from PySide import QtCore, QtGui
    
    
    class Example(QtGui.QWidget):
    
        def __init__(self, *args, **kwargs):
            super(Example, self).__init__(*args, **kwargs)
    
            # controls
            model = QtGui.QStandardItemModel(5, 3)
            model.setHorizontalHeaderLabels(['NAME', 'AGE', 'CAREER'])
    
            people = [
                {'name': 'Kevin', 'age': 5, 'career': 'athlete'},
                {'name': 'Maggie', 'age': 13, 'career': 'banker'},
                {'name': 'Leslie', 'age': 32, 'career': 'banker'},
                {'name': 'Emily', 'age': 45, 'career': 'athlete'},
                {'name': 'David', 'age': 27, 'career': 'banker'},
                {'name': 'Marie', 'age': 63, 'career': 'secretary'}
            ]
            for row, obj in enumerate(people):
                item = QtGui.QStandardItem(obj['name'])
                model.setItem(row, 0, item)
    
                item = QtGui.QStandardItem(str(obj['age']))
                model.setItem(row, 1, item)
    
                item = QtGui.QStandardItem(obj['career'])
                model.setItem(row, 2, item)
    
            proxy_model = QtGui.QSortFilterProxyModel()
            proxy_model.setSourceModel(model)
    
            # controls
            self.ui_table = QtGui.QTableView()
            self.ui_table.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
            self.ui_table.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
            self.ui_table.setSelectionMode(QtGui.QAbstractItemView.SingleSelection)
            self.ui_table.setModel(proxy_model)
            self.ui_table.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
    
            self.ui_search = QtGui.QLineEdit()
    
            # actions
            self.act_search_keyword = QtGui.QAction('Search:', self)
    
            # menu
            self.context_menu = QtGui.QMenu('File')
            self.context_menu.addAction(self.act_search_keyword)
    
    
            # lay main
            lay_main = QtGui.QVBoxLayout()
            lay_main.addWidget(self.ui_search)
            lay_main.addWidget(self.ui_table)
            self.setLayout(lay_main)
    
            # connections
            self.ui_table.customContextMenuRequested.connect(self.open_context_menu)
    
    
        def open_context_menu(self, point):
            self.context_menu.exec_(QtGui.QCursor.pos())
    
    
    if __name__ == '__main__':
        app = QtGui.QApplication(sys.argv)
        ex = Example()
        ex.show()
        sys.exit(app.exec_())
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   eyllanesc Yonghwan Shin    7 年前

    您必须在插槽中创建菜单,并使用该位置通过 indexAt() 返回 QModelIndex

        ...
        self.ui_search = QtGui.QLineEdit()
    
        # lay main
        lay_main = QtGui.QVBoxLayout()
        lay_main.addWidget(self.ui_search)
        lay_main.addWidget(self.ui_table)
        self.setLayout(lay_main)
    
        # connections
        self.ui_table.customContextMenuRequested.connect(self.open_context_menu)
    
    def open_context_menu(self, point):
        context_menu = QtGui.QMenu()
        ix = self.ui_table.indexAt(point)
        val = ix.data()
        context_menu.addAction("Search: {}".format(val))
        action = context_menu.exec_(self.ui_table.mapToGlobal(point))
        if action:
            self.ui_search.setText(val)
    
    推荐文章