<p>正如tk canvas manpage指定的那样,在postscript调用之前需要update()函数。在</p>
<p>路径名postscript?选项值选项值。。。?在</p>
<p>注意:默认情况下,Postscript只为出现在屏幕上画布窗口中的信息生成。如果画布是新创建的,它的初始大小可能仍为1x1像素,因此Postscript中不会出现任何内容。要解决这个问题,要么调用“update”命令等待画布窗口达到其最终大小,要么使用-width和-height选项指定要打印的画布区域。在</p>
<p>我将其标记为修复,因为PS文件是首选的保存格式,并且质量比screengrab方法高很多。在</p>
<p>工作代码现在变成:</p>
<pre><code>def drawCircles(MasterList,buildlist):
master = Tk()
w = Canvas(master, width=1000, height=1000)
w.config(bg='white')
coordsMain = MasterList[6:]
textMain = MasterList[0:2]
w.pack()
w.create_oval(*coordsMain, width=3, fill = "ivory3")
masterLabel = "Source PUID\n" + str(MasterList[3]) + "\nFiles = " + str(MasterList[4])
w.create_text(*textMain, text=masterLabel, justify = "center", font=("Helvetica", 16))
for i in buildlist:
coordsSet = i[6:10]
w.create_oval(*coordsSet, width=3, fill = i[5])
set_label = i[3] + "\n" + str(i[4]) + "%"
l=w.create_text(4,4, text=set_label, justify = "center", fill="white", font=("Helvetica", 16))
a,b,c,d= (w.bbox(l))
bboxArea =(c-a)*(d-b)
a,b,c,d = i[6:10]
circleArea = (c-a)*(d-b)
if bboxArea>circleArea:
textSet = i[10:]
j=w.create_text(*textSet, text=set_label, justify = "center", font=("Helvetica", 16))
r=w.create_rectangle(w.bbox(j),fill="white", width=0)
else:
textSet = i[:2]
j=w.create_text(*textSet, text=set_label, justify = "center", font=("Helvetica", 16))
r=w.create_rectangle(w.bbox(j),fill=i[5], width=0)
w.tag_lower(r,j)
PUID = str(MasterList[3])
PUID = PUID.replace('/', '-')
filename = "\images\\" + PUID + ".PS"
w.update()
mainloop()
</code></pre>