postscript() erstellt "leere" Datei

Fragen zu Tkinter.
HannesKlarner
User
Beiträge: 7
Registriert: Montag 4. Mai 2009, 11:16
Wohnort: Berlin

postscript() erstellt "leere" Datei

Beitragvon HannesKlarner » Montag 4. Mai 2009, 18:27

Noch eine kurze Frage zu der Methode postscript(), mit der ich einen Schnappschuß des canvas speichern möchte.

so sieht der Code aus:

Code: Alles auswählen

p = app.CAN.postscript(file = "chart_from_method.ps")
f = open("chart.ps", "wb")
f.write(p)
f.close()


Das Canvas ist gefüllt mit Linien und Text, aber beiden Dateien sehen, wenn man sie öffnet aus, wie 1x1 weiße pixl Dateien.

Fällt euch was dazu ein?

Grüße,
Hannes.
BlackJack

Beitragvon BlackJack » Montag 4. Mai 2009, 19:04

@HannesKlarner: Du musst es zum richtigen Zeitpunkt aufrufen, also erst dann, wenn die Grafik auch wirklich komplett gezeichnet ist und angezeigt wird.
4bit
User
Beiträge: 113
Registriert: Dienstag 5. Mai 2009, 11:27

Beitragvon 4bit » Freitag 8. Mai 2009, 15:33

irgendwelche anderen Vorschläfe? postscript() erzeugt bei mir einfach eine leere ps Datei.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Beitragvon numerix » Freitag 8. Mai 2009, 15:55

4bit hat geschrieben:Vorschläfe?


Falls du Vorschläge meinst: Der von BlackJack ist schon der richtige ... :wink:
4bit
User
Beiträge: 113
Registriert: Dienstag 5. Mai 2009, 11:27

Beitragvon 4bit » Freitag 8. Mai 2009, 16:04

Ich rufe postscript() erst ganz zum Schluß auf, trotzdem entsteht eine "leere" Datei.

Hat jemand andere Erfahrungen gemacht?

Grüße,
4bit.
4bit
User
Beiträge: 113
Registriert: Dienstag 5. Mai 2009, 11:27

Beitragvon 4bit » Freitag 8. Mai 2009, 16:12

Ah, jetzt gehts. Man muß height und width mit angeben. Dachte die Angaben wären nur wichtig, wenn man einen Teilbereich auswählen möchte.
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Beitragvon yipyip » Freitag 8. Mai 2009, 16:21

Also bei mir funktionierts, wenn ich
das 'file'-Argument *nicht* angebe,
erst dann wird der Postscript-String
in meiner Variablen 'pic' gespeichert.
So steht es auch in
http://www.tcl.tk/man/tcl8.4/TkCmd/canvas.htm#M60

Code: Alles auswählen

#!/usr/bin/env python

from __future__ import with_statement

####

import Tkinter as tk

####
 
class Gui(object):


  def __init__(self, width=400, height=400):

    self.root = tk.Tk()
    self.canvas = tk.Canvas(self.root, width=width, height=height, bg='white',
                            highlightthickness=None)
       
    self.canvas.pack(fill=tk.BOTH, expand=True)
    self.button = tk.Button(self.root, text='Print', command=self.print_out)
    self.button.pack()

    self.item1 = self.canvas.create_rectangle(33, 33, 99, 99, fill='red')
    self.canvas.itemconfig(self.item1, tags=('a', 'x', 't42'))

    self.item2 = self.canvas.create_rectangle(222, 222, 333, 333, fill='yellow')
    self.canvas.itemconfig(self.item2, tags=('b', 'x', 't42'))
   

  def print_out(self):

    pic = self.canvas.postscript()
    #print pic
    with open('canvas.ps', 'w') as fp:
      fp.write(pic)

     
  def run(self):

    self.root.mainloop()

####

if __name__ == '__main__':

  Gui().run()
 


(Hatte das auch noch nie ausprobiert...)

:wink:
yipyip
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Beitragvon yipyip » Freitag 8. Mai 2009, 16:26

Ansonsten reicht einfach ein

Code: Alles auswählen

self.canvas.postscript(file='c3.ps')


ohne weitere File-Operationen.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Beitragvon numerix » Freitag 8. Mai 2009, 16:49

Wie BlackJack schon sagte: Es kommt auf den richtigen Zeitpunkt an ... :wink:

So funktioniert das einwandfrei:

Code: Alles auswählen

import Tkinter as tk

root = tk.Tk()
canv = tk.Canvas(root, width=200, height=200)
canv.create_line(10,10,190,190)
canv.pack()
tk.Button(root, text="Postscript", command=lambda :canv.postscript(file="canv.ps")).pack()
root.mainloop()

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder