Первое, что мы делаем это отключить редактирование элементов с
{your treeview}.setEditTriggers(QAbstractItemView.NoEditTriggers)
Затем мы подключаем Clicked событие в слот (в моем случае on_clicked), из QModelIndex мы получаем деталь, и, следовательно, текст, связанный с последним, мы затем запустить открытие Url с:
QDesktopServices.openUrl(QUrl({your url}))
Полный код:
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_()
QTreeView находится на левой стороне, поле URL находится на правой стороне в QTableView. Вы хотите, чтобы можно было щелкнуть по полю в QTableView, не так ли? – Trilarion
Прости, я пропустил это. Оба они являются QTreeView. –