2010-11-03 90 views
2

是否可以水平拉伸图像?Python/Tkinter:水平拉伸图像?

用例:我有一个像素宽(60像素高)图像,我想水平拉伸以填充其父容器。拉伸这个图像的目的是为有问题的容器提供渐变背景的外观。

这是我尝试没有成功(梯度图像显示出来,只是中心本身对拉伸):

import Tkinter as tkinter 
root = tkinter.Tk() 

image = tkinter.PhotoImage(file='gradient1.gif') 
imgBackground = tkinter.Label(image=image) 
imgBackground.pack(side='top', fill='x', expand=True) 

root.mainloop() 

回答

1

没有,有没有办法拉伸图片填充容器。但是,您可以检测小部件更改大小的时间,并且可以“重绘”渐变。使用画布,并创建一个绑定到绘制渐变的<Configure>。这听起来很慢,但假设你没有成百上千个,它足够快。

+0

Bryan:当你说绘制我的渐变时,你是否建议我使用类似create_line()的东西绘制渐变的每一行与使用图像?聪明!如果我这样做,是否可以将我的彩色线条集合(作为标记的组?)并将它们移动到另一个画布,或者可以将画布(用彩色线条)移动到另一个容器,以便我可以重新使用渐变背景影响?我的困惑在于画布和画框如何协同工作,例如。我可以在画布上放置一个(透明)框架和/或可以将画布放在现有框架后面吗? (或者我必须使用create_window来做这些吗?) – Malcolm 2010-11-03 15:02:12

+1

@Malcolm:是的,绘制梯度的每一行。您可以使用画布代替框架(与在画布上放置透明框架相比,这是不可能的)。 – 2010-11-03 15:21:33

+0

感谢您的耐心 - 我从未使用过Tkinter帆布,尽管我今天多次阅读了这个Widget上的effbot文档:)当您说我可以使用帆布代替框架,这是否意味着我可以网格/包/使用完全相同的网格/包/位置语法和行为将我的子窗口小部件放入画布与帧中?说Canvas就像是一个增强的Frame,其背景我可以在上面绘制形状和图像,这是否公平?如果这是真的,那么为什么我会使用create_window()与传统的网格/包/布局来放置我的子部件?谢谢布莱恩! – Malcolm 2010-11-03 15:35:13