【问题标题】:wxPython print string with formattingwxPython 打印带格式的字符串
【发布时间】:2014-06-10 18:30:46
【问题描述】:

所以我有下面的类,它打印你用它调用的文本和标题。我还提供了用于调用 Print 函数的代码。我有一个字符串“输出字符串”,其中包含我要打印的文本。我的预期输出低于,我的实际输出低于。它似乎正在删除适当易读性所需的空格。如何在保留空格的同时进行打印?

类:

#Printer Class
class Printer(HtmlEasyPrinting):
    def __init__(self):
        HtmlEasyPrinting.__init__(self)

    def GetHtmlText(self,text):
        "Simple conversion of text.  Use a more powerful version"
        html_text = text.replace('\n\n','<P>')
        html_text = text.replace('\n', '<BR>')
        return html_text

    def Print(self, text, doc_name):
        self.SetHeader(doc_name)
        self.PrintText(self.GetHtmlText(text),doc_name)

    def PreviewText(self, text, doc_name):
        self.SetHeader(doc_name)
        HtmlEasyPrinting.PreviewText(self, self.GetHtmlText(text))

预期打印:

+-------------------+---------------------------------+------+-----------------+-----------+
|      Domain:      |           Mail Server:          | TLS: | # of Employees: | Verified: |
+-------------------+---------------------------------+------+-----------------+-----------+
| bankofamerica.com |    ltwemail.bankofamerica.com   |  Y   |      239000     |     Y     |
|                   |    rdnemail.bankofamerica.com   |  Y   |                 |     Y     |
|                   |    kcmemail.bankofamerica.com   |  Y   |                 |     Y     |
|                   |    rchemail.bankofamerica.com   |  Y   |                 |     Y     |
|   citigroup.com   |        mx-b.mail.citi.com       |  Y   |      248000     |     N     |
|                   |        mx-a.mail.citi.com       |  Y   |                 |     N     |
|   bnymellon.com   |  cluster9bny.us.messagelabs.com |  ?   |      51400      |     N     |
|                   | cluster9bnya.us.messagelabs.com |  Y   |                 |     N     |
|     usbank.com    |         mail1.usbank.com        |  Y   |      65565      |     Y     |
|                   |         mail2.usbank.com        |  Y   |                 |     Y     |
|                   |         mail3.usbank.com        |  Y   |                 |     Y     |
|                   |         mail4.usbank.com        |  Y   |                 |     Y     |
|    us.hsbc.com    |       vhiron1.us.hsbc.com       |  Y   |      255200     |     Y     |
|                   |       vhiron2.us.hsbc.com       |  Y   |                 |     Y     |
|                   |       njiron1.us.hsbc.com       |  Y   |                 |     Y     |
|                   |       njiron2.us.hsbc.com       |  Y   |                 |     Y     |
|                   |       nyiron1.us.hsbc.com       |  Y   |                 |     Y     |
|                   |       nyiron2.us.hsbc.com       |  Y   |                 |     Y     |
|      pnc.com      |   cluster5a.us.messagelabs.com  |  Y   |      49921      |     N     |
|                   |   cluster5.us.messagelabs.com   |  ?   |                 |     N     |
|     tdbank.com    |   cluster5.us.messagelabs.com   |  ?   |        0        |     N     |
|                   |   cluster5a.us.messagelabs.com  |  Y   |                 |     N     |
+-------------------+---------------------------------+------+-----------------+-----------+

实际打印:

与预期相同,但删除了空格,使其非常难以阅读。

函数调用:

def printFile():
    outputstring = txt_tableout.get(1.0, 'end')
    print(outputstring)
    app = wx.PySimpleApp()
    p = Printer()
    p.Print(outputstring, "Data Results")

【问题讨论】:

  • 为什么会有 tkinter 标签?这个问题似乎与 tkinter 完全无关。我建议删除标签,除非有充分的理由保留它。
  • 我的 txt_tableout.get() 来自 tkinter,觉得它可能有用吗?

标签: python printing tkinter wxpython


【解决方案1】:

对于其他苦苦挣扎的人,这是我用来生成包含所有行和列的漂亮表的修改后的类函数。

def GetHtmlText(self,text):
    html_text = '<h3>Data Results:</h3><p><table border="2">'
    html_text += "<tr><td>Domain:</td><td>Mail Server:</td><td>TLS:</td><td># of Employees:</td><td>Verified</td></tr>"
    for row in root.ptglobal.to_csv():
        html_text += "<tr>"
        for x in range(len(row)):
            html_text += "<td>"+str(row[x])+"</td>"
        html_text += "</tr>"
    return html_text + "</table></p>"

【讨论】:

    【解决方案2】:

    可以试试

    `html_text = text.replace(' ','&nbsp;').replace('\n','<br/>')`
    

    这将用 html 空格字符替换你的空格......但它仍然看起来不正确,因为它不是等宽字体......这将很难自动化......你真的想把它放在一个表结构......但这需要一些工作

    您可能想在您的 html 转换上投入更多时间......也许是(根据您展示的内容做出假设

    def GetHtmlText(self,text):
        "Simple conversion of text.  Use a more powerful version"
        text_lines = text.splitlines()
        html_text = "<table>"
        html_text += "<tr><th> + "</th><th>".join(text_lines[0].split(":")) + "</th></tr>
        for line in text_lines[1:]:
           html_text += "<tr><td>"+"</td><td>".join(line.split()) +"</td></tr>
        return html_text + "</table>"
    

    【讨论】:

    • 感谢您的回复。我认为这一行的方式是: html_text += " + " "。可能是错的吗?你会想要类似 " "?因为现在问题有点偏离,它导致 .join 语句被视为文字字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多