【问题标题】:Qt/pyQt/PySide - Create document template for printingQt/pyQt/PySide - 创建用于打印的文档模板
【发布时间】:2014-07-21 11:08:42
【问题描述】:


你好
我是新手,这是我的第一个小项目,所以要理解。 我需要为将用作模板的文档创建布局,最后将填充从数据库收集并打印的数据。尚未创建数据库 所以,就目前而言,我已经设置了本地变量来解决这个问题。我想要每一个 数据块放在非常特定的位置。我检查了 QTextDocument 文档,它看起来像 这项工作的好工具,但我不知道如何为它创建布局。
非常感谢任何指针。

编辑:网上关于这个主题的内容不多。虽然我能找到this thread

这几乎就是我要找的。但是,我希望将许多变量放入 html 中,因此“.format”选项似乎并没有压倒性优势。有人知道更好的解决方案吗?

【问题讨论】:

    标签: python c++ qt pyqt pyside


    【解决方案1】:

    Qt 中有许多支持 HTML 的小部件。 QTextDocument 应该可以工作,还有 QLabel。 在我的项目中,我使用了 QtWebKit.QWebView,因为我需要表格,而我认为其他小部件没有这样做(但我不太确定,如果需要,请查看文档)。

    在我看来,如果您使用命名参数,“.format”并不会压倒一切,并且对于我的目的来说已经足够了。为参数值使用字典也可能会有所帮助

    示例代码:

    from PyQt4 import QtGui
    from PyQt4 import QtWebKit
    
    class DisplayHTML(QtWebKit.QWebView):
    
        def __init__(self, html, parent=None):
            super().__init__(parent)
            self.setHtml(html)
    
    if __name__ == '__main__':
        import sys
        app = QtGui.QApplication(sys.argv)
        html_template = "<html><p>Hello, {first}, how {second} you {third}?</p></html>"
        values_dict = {
            'first': 'Joe',
            'second': 'are',
            'third': 'today',
        }
        html_ready_to_render = html_template.format(**values_dict)
        window = DisplayHTML(html_ready_to_render)
        window.show()
        sys.exit(app.exec_())
    

    编辑:你不需要创建一个新类来做这样简单的事情,只需使用 QWebView() 并在其上调用 setHtml()...

    【讨论】:

    • 这很有帮助。老实说,我不知道我可以使用命名参数和 dict 选项,太棒了。只是一个问题,是否必须保留参数序列?或者我可以只使用 'third' 'first' 'second' 并获得相同的输出?哦,非常感谢!
    • 不客气。顺序在关键字参数中并不重要(即 myfunc(first='Joe', second='something');在位置参数中很重要(即 myfunc('Joe', 'something'))。这是 python 语言的特性, 不是特定于格式函数的东西,你可以选择使用关键字或位置参数。使用 myfunc(**some_dict) 将 some_dict 解包为函数的关键字参数。参数解包也是一种语言特性,使用 *my_list 解包列表或元组或类似的可迭代对象,以及 **my_dict 用于解压 dict 等哈希表类型。
    【解决方案2】:
    from PyQt4 import QtGui
    from PyQt4 import QtWebKit
    
    class DisplayHTML(QtWebKit.QWebView):
    
        def __init__(self, html, parent=None):
            super().__init__(parent)
            self.setHtml(html)
    
    if __name__ == '__main__':
        import sys
        app = QtGui.QApplication(sys.argv)
        html_template = "<html><p>Hello, {first}, how {second} you {third}?</p></html>"
        values_dict = {
            'first': 'Joe',
            'second': 'are',
            'third': 'today',
        }
        html_ready_to_render = html_template.format(**values_dict)
        window = DisplayHTML(html_ready_to_render)
        window.show()
        sys.exit(app.exec_())
    

    【讨论】:

    • 你应该添加一些描述
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 2018-03-05
    • 2023-04-02
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    相关资源
    最近更新 更多