【问题标题】:Python/Tkinter: Stretch an image horizontally?Python/Tkinter:水平拉伸图像?
【发布时间】:2011-05-04 07:39:21
【问题描述】:

是否可以水平拉伸图像?

用例:我有一个 1 像素宽(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()

【问题讨论】:

    标签: python image user-interface tkinter


    【解决方案1】:

    不,没有办法拉伸图像以填充容器。但是,您可以检测小部件何时更改大小,并且可以“重新绘制”渐变。使用画布,并创建与绘制渐变的<Configure> 的绑定。这听起来很慢,但假设你没有数百个这样的东西,它已经足够快了。

    【讨论】:

    • Bryan:当你说绘制我的渐变时,你是否建议我使用 create_line() 之类的东西来绘制渐变的每一行而不是使用图像?聪明的!如果我这样做,我可以将我的彩色线条集合(作为一个标记组?)并将它们移动到另一个画布,或者我可以将我的画布(带有彩色线条)移动到另一个容器,以便我可以重新使用我的渐变背景影响?我的困惑在于画布和框架如何协同工作,例如。我可以在画布上放置(透明)框架和/或可以在现有框架后面放置画布吗? (或者我必须为这些使用 create_window 吗?)
    • @Malcolm:是的,绘制渐变的每一行。您可以使用画布代替框架(而不是在画布上放置透明框架,这是不可能的)。
    • 感谢您的耐心等待 - 我以前从未使用过 Tkinter Canvas,尽管我今天已多次阅读有关此小部件的 effbot 文档 :) 当您说我可以使用画布代替框架,这是否意味着我可以使用完全相同的网格/打包/放置语法和行为将我的子小部件网格/打包/放置到画布与框架中?可以说 Canvas 就像一个增强的框架,我可以在其背景上绘制形状和图像吗?如果这一切都是真的,那么我为什么要使用 create_window() 而不是传统的 grid/pack/layout 来放置我的子小部件?谢谢布莱恩!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    • 2017-11-09
    • 1970-01-01
    • 2020-01-25
    相关资源
    最近更新 更多