如何在 Qt 应用程序中呈现 Jira 问题
How to render a Jira Issue in Qt Application
我正在使用 Jira Python API 并且有一个 PySide2 (Qt5) 应用程序 需要在用户从视图中选择项目。
如果可能,我想在您浏览任何问题时准确显示它的样子,减去问题侧面和顶部的导航栏。屏幕空间是这个应用程序的一个问题,所以这很重要。
我不太清楚执行此操作的最佳方法。在我看来,我有两个选择:
- 使用
QWebEngineView
直接显示URL。但是我目前找不到任何关于如何在没有导航栏的情况下检索 URL 的文档。对我来说,这是最简单的选择,也是更可取的。
- 我自己在
QLabel
、QTextEdit
或一些自定义小部件中呈现问题。
#1 更可取,原因有很多,那么有没有 URL 我可以提供给 QWebEngineView
,它可以在没有导航栏的情况下呈现?
from PySide2.QtWebEngineWidgets import QWebEngineView
url = 'https://jira.atlassian.com/browse/JRASERVER-26418'
view = QWebEngineView()
view.load(url)
view.show()
如果这不可能,那么在类似布局中自己呈现问题的最直接方法是什么?
有没有我没有考虑的更简单的第三种选择?
我将添加免责声明 - 我从事更多的桌面应用程序开发,并且在 Web 开发方面的经验有限。因此,我将不胜感激关于我需要在 python/PySide/Qt.
之外使用的任何细节
正如 OP 指出的那样,一种可能的选择是使用 QWebEngineView 并且 javascript 可用于删除导航栏等组件:
from PySide2 import QtCore, QtWidgets, QtWebEngineWidgets
class QJiraViewer(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.view = QtWebEngineWidgets.QWebEngineView()
self.setCentralWidget(self.view)
self.resize(640, 480)
source_code = """
// @include https://jira.atlassian.com/browse/JRASERVER-*
var target = document.getElementById("page");
var e = document.getElementById("header");
e.hidden = true;
if( target != null){
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
var elements = mutation.target.getElementsByClassName("aui-sidebar projects-sidebar fade-in");
for (var i = 0; i < elements.length; i++) {
var e = elements.item(i);
e.hidden = true;
e.parentNode.removeChild(e);
}
});
});
var config = {
childList: true,
subtree: true
};
observer.observe(target, config);
}
"""
script = QtWebEngineWidgets.QWebEngineScript()
script.setInjectionPoint(QtWebEngineWidgets.QWebEngineScript.DocumentReady)
script.setName("remove_elements")
script.setRunsOnSubFrames(False)
script.setSourceCode(source_code)
self.view.page().profile().scripts().insert(script)
def load(self, url):
self.view.load(url)
def main():
import sys
app = QtWidgets.QApplication(sys.argv)
view = QJiraViewer()
view.load(QtCore.QUrl("https://jira.atlassian.com/browse/JRASERVER-26418"))
view.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
我正在使用 Jira Python API 并且有一个 PySide2 (Qt5) 应用程序 需要在用户从视图中选择项目。
如果可能,我想在您浏览任何问题时准确显示它的样子,减去问题侧面和顶部的导航栏。屏幕空间是这个应用程序的一个问题,所以这很重要。
我不太清楚执行此操作的最佳方法。在我看来,我有两个选择:
- 使用
QWebEngineView
直接显示URL。但是我目前找不到任何关于如何在没有导航栏的情况下检索 URL 的文档。对我来说,这是最简单的选择,也是更可取的。 - 我自己在
QLabel
、QTextEdit
或一些自定义小部件中呈现问题。
#1 更可取,原因有很多,那么有没有 URL 我可以提供给 QWebEngineView
,它可以在没有导航栏的情况下呈现?
from PySide2.QtWebEngineWidgets import QWebEngineView
url = 'https://jira.atlassian.com/browse/JRASERVER-26418'
view = QWebEngineView()
view.load(url)
view.show()
如果这不可能,那么在类似布局中自己呈现问题的最直接方法是什么?
有没有我没有考虑的更简单的第三种选择?
我将添加免责声明 - 我从事更多的桌面应用程序开发,并且在 Web 开发方面的经验有限。因此,我将不胜感激关于我需要在 python/PySide/Qt.
之外使用的任何细节正如 OP 指出的那样,一种可能的选择是使用 QWebEngineView 并且 javascript 可用于删除导航栏等组件:
from PySide2 import QtCore, QtWidgets, QtWebEngineWidgets
class QJiraViewer(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.view = QtWebEngineWidgets.QWebEngineView()
self.setCentralWidget(self.view)
self.resize(640, 480)
source_code = """
// @include https://jira.atlassian.com/browse/JRASERVER-*
var target = document.getElementById("page");
var e = document.getElementById("header");
e.hidden = true;
if( target != null){
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
var elements = mutation.target.getElementsByClassName("aui-sidebar projects-sidebar fade-in");
for (var i = 0; i < elements.length; i++) {
var e = elements.item(i);
e.hidden = true;
e.parentNode.removeChild(e);
}
});
});
var config = {
childList: true,
subtree: true
};
observer.observe(target, config);
}
"""
script = QtWebEngineWidgets.QWebEngineScript()
script.setInjectionPoint(QtWebEngineWidgets.QWebEngineScript.DocumentReady)
script.setName("remove_elements")
script.setRunsOnSubFrames(False)
script.setSourceCode(source_code)
self.view.page().profile().scripts().insert(script)
def load(self, url):
self.view.load(url)
def main():
import sys
app = QtWidgets.QApplication(sys.argv)
view = QJiraViewer()
view.load(QtCore.QUrl("https://jira.atlassian.com/browse/JRASERVER-26418"))
view.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()