Your code is very unclear, because you are editing the file generated by pyuic
, rather than importing it into your main application.
I have re-structured your code, and used an event filter to handle the context-menu, which helps simplify the code a little. I have also used lambda
functions to handle the menu actions. The code below assumes the file from pyuic
is saved as mainwindow_ui.py
(which you will obviously need to re-generate).
from PyQt4 import QtCore, QtGui
from mainwindow_ui import Ui_MainWindow
class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.setupUi(self)
self.buildingTree(
"default,default:cluster1,default:cluster1:clusterA,"
"default:cluster2,default:cluster2:clusterA"
)
self.treeWidget.viewport().installEventFilter(self)
def eventFilter(self, target, event):
if (event.type() == QtCore.QEvent.ContextMenu and
target is self.treeWidget.viewport()):
item = self.treeWidget.itemAt(event.pos())
if item is not None:
menu = QtGui.QMenu()
menu.addAction(
"New", lambda: self.new_cluster(item))
menu.addAction(
"Rename", lambda: self.rename_cluster(item))
menu.addSeparator()
menu.addAction(
"Delete", lambda: self.delete_cluster(item))
menu.exec_(event.globalPos())
return True
return super(MainWindow, self).eventFilter(target, event)
def new_cluster(self, item):
print "New Cluster", item.text(0)
def rename_cluster(self, item):
print "Rename cluster", item.text(0)
def delete_cluster(self, item):
print "Delete cluster", item.text(0)
def buildingTree(self, string):
arrTree = []
arrPath = []
arrString = []
arrString = string.split(",")
root = QtGui.QTreeWidgetItem(self.treeWidget)
root.setText(0,arrString[0])
arrTree.append(root)
arrString.pop(0)
for path in arrString:
arrPath = path.split(":")
nameOfFather = arrPath[len(arrPath)-2]
arrTree.reverse()
for node in arrTree:
nameOfNode = node.text(0)
if nameOfNode == nameOfFather:
sonNode = QtGui.QTreeWidgetItem(node)
sonNode.setText(0,arrPath[len(arrPath)-1])
arrTree.insert(0,sonNode)
arrTree.reverse()
break
self.treeWidget.setSortingEnabled(False)
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())