PyQt ToolTip for QTreeView -


please axplain how enable , show tooltip each item in qtreeview. found sample of code class treemodel(qabstractitemmodel) due beginner's level can't understand how apply needs.

data tooltip should taken value of key "note" in dictionary data_for_tree.

#!/usr/bin/env python -tt # -*- coding: utf-8 -*-  pyqt5.qtgui import * pyqt5.qtcore import * pyqt5.qtwidgets import *  import sys reload(sys) sys.setdefaultencoding('utf8')  data_for_tree = {"tomato":{"color":"red","ammount":"10", "note":"a note tomato"},"banana":{"color":"yellow","ammount":"1", "note":"b note banana"}, "some fruit":{"color":"unknown","ammount":"100", "note":"some text"}}  class treemodel(qabstractitemmodel):      def data(self, index, role=qt.displayrole):         #...         if role == qt.tooltiprole:             return 'tooltip'      def flags(self, index):         if not index.isvalid():             return qt.noitemflags # 0         return qt.itemisselectable # or qt.itemisenabled              class proxymodel(qsortfilterproxymodel):      def __init__(self, parent=none):         super(proxymodel, self).__init__(parent)      def lessthan(self, left, right):         leftdata = self.sourcemodel().data(left)         rightdata = self.sourcemodel().data(right)         try:             return float(leftdata) < float(rightdata)         except valueerror:             return leftdata < rightdata  class mainframe(qwidget):     def __init__(self):         qwidget.__init__(self)          self.mytreeview = qtreeview()         self.mytreeviewmodel = qstandarditemmodel()         self.mytreeview.setmodel(self.mytreeviewmodel)         self.most_used_cat_header = ['name', "ammount", "color"]         self.mytreeviewmodel.sethorizontalheaderlabels(self.most_used_cat_header)         self.mytreeview.setsortingenabled(true)         self.mytreeview_fill()          mainwindow = qhboxlayout(self)             mainwindow.addwidget(self.mytreeview)         self.setlayout(mainwindow)      def mytreeview_fill(self):         k in data_for_tree:             name = qstandarditem(k)             ammount = qstandarditem(data_for_tree[k]["ammount"])             note = qstandarditem(data_for_tree[k]["color"])             tooltip = data_for_tree[k]["note"]             item = (name, ammount, note)             self.mytreeviewmodel.appendrow(item)         self.mytreeview.sortbycolumn(1, qt.descendingorder)         proxymodel = proxymodel(self)         proxymodel.setsourcemodel(self.mytreeviewmodel)         self.mytreeview.setmodel(proxymodel)          c = 0         while c < len(self.most_used_cat_header):             self.mytreeview.resizecolumntocontents(c)             c=c+1  if __name__ == "__main__":     app = qapplication(sys.argv)     main = mainframe()     main.show()     main.move(app.desktop().screen().rect().center() - main.rect().center()) sys.exit(app.exec_()) 

as using qstandarditem , qstandarditemmodel classes (which recommend!) don't need bother treemodel class have found. creating own model necessary, reason tutorials encourage so. if find encouraging subclass qabstractitemmodel, suggest check on stack overflow first see if there simpler way it! in case, there simple way add tooltips.

if @ c++ documentation (which find more useful pyqt documentation finding out methods available), see qstandarditem has method called settooltip().

so need call method on each of items add model. example, inside loop in mytreeview_fill method:

name = qstandarditem(k) ammount = qstandarditem(data_for_tree[k]["ammount"]) note = qstandarditem(data_for_tree[k]["color"]) tooltip = data_for_tree[k]["note"] name.settooltip(tooltip) ammount.settooltip(tooltip) note.settooltip(tooltip) 

here i've set tooltip same every cell in row (name, amount , note) change have different tooltip 1 of cells (hopefully obvious how that)


Comments

Popular posts from this blog

python - TypeError: start must be a integer -

c# - DevExpress RepositoryItemComboBox BackColor property ignored -

django - Creating multiple model instances in DRF3 -