制作具有等宽字体Wxpython的表

问题描述 投票:1回答:1

我正在尝试使用Wxpython中的字符创建表。类型的东西:

┌─────────┬──────────┐
│columna1 │ columna2 │
├─────────┼──────────┤
│dato1    │ dato2    │
├─────────┼──────────┤
│dato3    │ dato4    │
└─────────┴──────────┘

我使用代码dc.SetFont(wx.Font(12, wx.TELETYPE, wx.NORMAL, wx.NORMAL))

但是等距似乎不适用于表中的行,因此导致类似于以下内容:

┌─────────┬──────────┐
│columna1  │ columna2 │
├─────────┼──────────┤
│dato1      │ dato2    │
├─────────┼──────────┤
│dato3   │ dato4    │
└─────────┴──────────┘

我计划将字体应用于将要发送到打印机的文本。谢谢。

这是一个有错误的示例代码:

import wx

class TextDocPrintout(wx.Printout):

    """

    A printout class that is able to print simple text documents.

    Does not handle page numbers or titles, and it assumes that no

    lines are longer than what will fit within the page width.  Those

    features are left as an exercise for the reader. ;-)

    """

    def __init__(self):#, text, title, margins):

        wx.Printout.__init__(self)#, title)

    def HasPage(self, page):

        return page <= self.numPages



    def GetPageInfo(self):

        return (1, self.numPages, 1, self.numPages)

    def CalculateScale(self, dc):

        # Scale the DC such that the printout is roughly the same as

        # the screen scaling.

        ppiPrinterX, ppiPrinterY = self.GetPPIPrinter()

        ppiScreenX, ppiScreenY = self.GetPPIScreen()

        logScale = float(ppiPrinterX)/float(ppiScreenX)



        # Now adjust if the real page size is reduced (such as when

        # drawing on a scaled wx.MemoryDC in the Print Preview.)  If

        # page width == DC width then nothing changes, otherwise we

        # scale down for the DC.

        pw, ph = self.GetPageSizePixels()

        dw, dh = dc.GetSize()

        scale = logScale * float(dw)/float(pw)



        # Set the DC's scale.

        dc.SetUserScale(scale, scale)



        # Find the logical units per millimeter (for calculating the

        # margins)

        self.numPages = 1
        self.logUnitsMM = float(ppiPrinterX)/(logScale*25.4)

    def OnPreparePrinting(self):

        # calculate the number of pages

        dc = self.GetDC()

        self.CalculateScale(dc)

    def OnPrintPage(self, page):
        dc = self.GetDC()
        dc.SetFont(wx.Font(12, wx.TELETYPE, wx.NORMAL, wx.NORMAL))

        texto  = "┌─────────┬──────────┐\n"
        texto += "│columna1 │ columna2 │\n"
        texto += "├─────────┼──────────┤\n"
        texto += "│dato1    │ dato2    │\n"
        texto += "├─────────┼──────────┤\n"
        texto += "│dato3    │ dato4    │\n"
        texto += "└─────────┴──────────┘"

        dc.DrawText(texto, self.logUnitsMM*15, self.logUnitsMM*15)

        return True

class PrintFrameworkSample(wx.Frame):

    def __init__(self):

        wx.Frame.__init__(self)

        # initialize the print data and set some default values

        self.pdata = wx.PrintData()

        self.pdata.SetPaperId(wx.PAPER_A4)

        self.pdata.SetOrientation(wx.PORTRAIT)


    def OnPrint(self):#, evt):

        data = wx.PrintDialogData(self.pdata)

        printer = wx.Printer(data)

        printout = TextDocPrintout()

        useSetupDialog = True

        if not printer.Print(self, printout, useSetupDialog) and printer.GetLastError() == wx.PRINTER_ERROR:

            wx.MessageBox(

                "Hubo un problema al imprimir.\n"

                "Su impresora está configurada correctamente?",

                "Error al Imprimir", wx.OK)

        else:
            data = printer.GetPrintDialogData()

            self.pdata = wx.PrintData(data.GetPrintData()) # force a copy

        printout.Destroy()

app=wx.App(False)
PrintFrameworkSample().OnPrint()
app.MainLoop()
python fonts wxpython
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.