使用PyQt进行前端Web开发

Sad*_*nty 7 python qt pyqt pyqt4 python-2.7

我已经在PyQT中编写了一个单脚本(即全栈)GUI,它可以查询SQL数据库,使用查询输出执行某些功能,然后将这些输出以图形方式显示在QtGui.QApplication。但是,我决定将其转换为可以承载在本地服务器上的Web应用程序。

运行教程中的代码会产生与我想要的类似的东西,但是它在Python启动器中而不是在网页上运行。我想做的-为避免不得不在另一个基于Web的框架中重写所有图形小部件-就是将脚本分成后端,以处理数据库查询以及使用查询结果和前端。用PyQt和HTML编写的结尾(如链接教程中所示),其中包含嵌入的 PyQt小部件到HTML脚本,我可以将其作为网站运行。这可能吗?

如果可能的话,我将如何编写它(例如,如何更改链接教程中的代码),以便可以从浏览器运行/在服务器上托管而不是作为应用程序运行?由于我对Web开发的了解有限,因此该问题可能存在一些技术错误。任何帮助将不胜感激。

为了便于回答,这是链接教程中的联合代码:

import sys
from PyQt4.QtCore import QSize, Qt
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *

html = \
"""<html>
<head>
<title>Python Web Plugin Test</title>
</head>

<body>
<h1>Python Web Plugin Test</h1>
<object type="x-pyqt/widget" width="200" height="200"></object>
<p>This is a Web plugin written in Python.</p>
</body>
</html>
"""

class WebWidget(QWidget):

    def paintEvent(self, event):
        painter = QPainter()
        painter.begin(self)
        painter.setBrush(Qt.white)
        painter.setPen(Qt.black)
        painter.drawRect(self.rect().adjusted(0, 0, -1, -1))
        painter.setBrush(Qt.red)
        painter.setPen(Qt.NoPen)
        painter.drawRect(self.width()/4, self.height()/4,
                         self.width()/2, self.height()/2)
        painter.end()

    def sizeHint(self):
        return QSize(100, 100)

class WebPluginFactory(QWebPluginFactory):

    def __init__(self, parent = None):
        QWebPluginFactory.__init__(self, parent)

    def create(self, mimeType, url, names, values):
        if mimeType == "x-pyqt/widget":
            return WebWidget()

    def plugins(self):
        plugin = QWebPluginFactory.Plugin()
        plugin.name = "PyQt Widget"
        plugin.description = "An example Web plugin written with PyQt."
        mimeType = QWebPluginFactory.MimeType()
        mimeType.name = "x-pyqt/widget"
        mimeType.description = "PyQt widget"
        mimeType.fileExtensions = []
        plugin.mimeTypes = [mimeType]
        print "plugins"
        return [plugin]

if __name__ == "__main__":

    app = QApplication(sys.argv)
    QWebSettings.globalSettings().setAttribute(QWebSettings.PluginsEnabled, True)
    view = QWebView()
    factory = WebPluginFactory()
    view.page().setPluginFactory(factory)
    view.setHtml(html)
    view.show()
    sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)