Это, безусловно, возможно.
Вот пример кода:
import sys
from PyQt4 import QtGui
from PyQt4 import QtCore
class MainWindow(QtGui.QWidget):
def __init__(self):
super(MainWindow, self).__init__()
main_layout = QtGui.QVBoxLayout()
self.browser = QtGui.QTextBrowser()
self.browser.setHtml('''<html><body>some text<br/><a href="some_special_identifier://a_function">click me to call a function</a><br/>
<a href="#my_anchor">Click me to scroll down</a><br>foo<br>foo<br>foo<br>foo<br>foo<br>foo<br>
foo<a id="my_anchor"></a><br>bar<br>bar<br>bar<br>bar<br>bar<br>bar<br>hello!<br>hello!<br>hello!<br>hello!<br>hello!<br>hello!<br>hello!<br>hello!</body></html''')
self.browser.anchorClicked.connect(self.on_anchor_clicked)
main_layout.addWidget(self.browser)
self.setLayout(main_layout)
def on_anchor_clicked(self,url):
text = str(url.toString())
if text.startswith('some_special_identifier://'):
self.browser.setSource(QtCore.QUrl()) #stops the page from changing
function = text.replace('some_special_identifier://','')
if hasattr(self,function):
getattr(self,function)()
def a_function(self):
print 'you called?'
app = QtGui.QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
Любая ссылка с URL-адресом, начинающимся с «some_special_identifier://», будет выбрана, а текст после этого будет использоваться для поиска и вызова функции с тем же именем. Обратите внимание, что это может быть немного рискованно, поскольку существует возможность вызова всех видов функций, которые, возможно, вы не намерены использовать, если пользователь имеет какой-либо контроль над тем, что отображается в TextBrowser. Возможно, лучше разрешить запуск только определенных функций и, возможно, только в определенное время. Это, конечно, зависит от вас, чтобы обеспечить соблюдение!
P.S. мой код написан для Python 2.7 (я вижу, вы используете Python 3). Так что я думаю, вам нужно как минимум изменить print 'text'
на print('text')
!
person
three_pineapples
schedule
20.10.2013