Das erste, was wir tun, ist die Bearbeitung der Elemente deaktivieren mit
{your treeview}.setEditTriggers(QAbstractItemView.NoEditTriggers)
Dann haben wir das Klickereignis zu einem Schlitz (in meinem Fall on_clicked) verbinden, aus dem QModelIndex wir den Artikel erhalten, und folglich der Text mit diesem verbunden sind, starten wir dann die Öffnung URL mit:
QDesktopServices.openUrl(QUrl({your url}))
komplette Code:
import sys
from PyQt5.QtCore import QFile, QIODevice, QUrl
from PyQt5.QtGui import QDesktopServices, QStandardItem, QStandardItemModel
from PyQt5.QtWidgets import QAbstractItemView, QApplication, QTreeView
from PyQt5.QtXml import QDomDocument
class CustomTreeView(QTreeView):
def __init__(self, parent=None):
super(CustomTreeView, self).__init__(parent=parent)
self.mdl = QStandardItemModel()
self.mdl.setHorizontalHeaderLabels(["tag", "value"])
self.setModel(self.mdl)
self.readXML('item.xml')
self.clicked.connect(self.on_clicked)
self.setEditTriggers(QAbstractItemView.NoEditTriggers)
def on_clicked(self, index):
text = self.mdl.itemFromIndex(index).text()
QDesktopServices.openUrl(QUrl(text))
def readXML(self, filename):
doc = QDomDocument("doc")
file = QFile(filename)
if not file.open(QIODevice.ReadOnly):
return
if not doc.setContent(file):
file.close()
return
file.close()
rootNode = self.mdl.invisibleRootItem()
docElem = doc.documentElement()
node = docElem.firstChild()
while not node.isNull():
element = node.toElement()
if not element.isNull():
tag = QStandardItem(element.tagName())
value = QStandardItem(element.text())
# tag.setEditable(False)
# value.setEditable(False)
rootNode.appendRow([tag, value])
node = node.nextSibling()
if __name__ == '__main__':
app = QApplication(sys.argv)
w = CustomTreeView()
w.show()
app.exec_()
Die QTreeView auf der linken Seite ist, ist das Feld URL auf der rechten Seite in der QTableView. Sie möchten es ermöglichen, auf ein Feld in einer QTableView zu klicken, oder? – Trilarion
Entschuldigung, das habe ich verpasst. Beide sind QTreeView. –