2010-11-03 124 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