[Python-es] Impresiones.
Chema Cortes
pych3m4 en gmail.com
Vie Oct 26 12:00:13 CEST 2007
El 26/10/07, Juan Osorio Gonzalez <judaz100 en hotmail.com> escribió:
>
> Me puedes explicar de que manera la verdad no soy muy diestro en en esto
Ante todo decirte que estás pidiéndole al Tkinter más de lo que puede
hacer. Si realmente necesitas que tu aplicación pueda imprimir
deberías considerar utilizar otro GUI. Lo que te indico ahora es una
manera de salir del paso:
1) creación del fichero:
import Tkinter
import tkFileDialog
import math
#parámetros para el dibujado
width = 400
height = 300
center = height//2
x_increment = 1
x_factor = 0.04
y_amplitude = 80
r=Tkinter.Tk()
cv=Tkinter.Canvas(r,width=width,height=height)
cv.pack()
cv.create_text(0,0,anchor='nw',text="Prueba para Python-es")
#generación de las curvas
sine_list = []
for x in range(400):
sine_list.append(x * x_increment)
sine_list.append(int(math.sin(x * x_factor) * y_amplitude) + center)
sin_line = cv.create_line(sine_list, fill='blue')
cos_list = []
for x in range(400):
cos_list.append(x * x_increment)
cos_list.append(int(math.cos(x * x_factor) * y_amplitude) + center)
cos_line = cv.create_line(cos_list, fill='red')
#obtención del nombre del fichero
filename=tkFileDialog.asksaveasfilename(
title="Guardar fichero postscript",
filetypes=(('Fichero Postscript','*.ps'),))
if len(filename)>0:
cv.update() #nos aseguramos que el gráfico está terminado
cv.postscript(file=filename,pageheight=height,x=0,y=100,pagey=200)
#r.mainloop() #no es necesario entrar en mainloop
2) mandar a impresora el fichero: en linux/macos se puede usar el
comando lpr estándar, confiando en que esté bien configurado el
sistema de impresión. En windows habrá que buscar alguna alternativa
en pythonwin.
#sigue del código anterior
import os
import tkMessageBox
command="lpr %s" % filename
pipe=os.popen(command)
output = pipe.read().strip()
status = pipe.close()
if status:
output = "Fallo de impresora (exit status 0x%x)\n" % status +
output
if output:
output = "Comando impresora: %s\n" % repr(command) + output
tkMessageBox.showerror(r,"Print status", output)
Más información sobre la lista de distribución Python-es