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
Post a Comment