我正在尝试使用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()