【问题标题】:Can't set frame background image without frame resizing to fit image无法在没有调整框架大小以适合图像的情况下设置框架背景图像
【发布时间】:2017-05-05 19:55:17
【问题描述】:

我可以设置主窗口的背景,我不必担心窗口会试图适应背景图像或将小部件推开的图像。

但是,当我尝试对框架做同样的事情时,它变得一团糟......

我已经尝试了一些东西,但一切似乎都与调整图像本身的大小有关,我不想扭曲图像。我希望图像在框架中,而不是调整框架大小以适应图像。

有没有办法将图像放置在框架的背景中而不改变框架的大小?

编辑:注意:我使用的图像足够大,可以填满屏幕,所以如果用户正在调整大小,图像将覆盖所有额外的空间。

这就是我向主窗口添加背景图像的方式:

bgImage=PhotoImage(file="./Colors/bgImage.png")
bgLable = Label(root,image = bgImage)
bgLable.image = bgImage
bgLable.grid(row=0,column=0,columnspan=3,rowspan=8)

但是,当我尝试对框架做同样的事情时,它也会调整框架的大小:

FrameTL = Frame(root, width = 100)
FrameTL.grid(row = 0, column = 0, rowspan = 20, columnspan = 1, sticky = W+N+S)
TLbg = Label(FrameTL,image = bgImage)
TLbg.image = bgImage
TLbg.grid(row=0,column=0)

我尝试了其他一些方法,但它们会扭曲图像以适应窗口/框架,我不想扭曲图像。

编辑:

我找到了一种解决方法。我没有使用框架,而是将 .grid 用于我的所有小部件,除了我需要在我的侧面菜单上的小部件。侧面菜单小部件并没有与窗口的左上角疏远,所以我试图使用框架来解决问题(现在使用 .place)。框架可以工作,但我找不到使框架透明的方法,这样我就可以将背景从我的根窗口中保留下来。这就是为什么我一直在尝试将背景图像添加到我的框架但没有调整框架大小以适应图像。

【问题讨论】:

  • 当我在主窗口中为背景图像(我的屏幕大小)运行您的第一个 sn-p 时,它会调整窗口大小。
  • 我的主窗口有一个设定的起始尺寸,打开程序后我可以调整它。

标签: python image tkinter frame


【解决方案1】:

有没有办法在不改变框架大小的情况下将图像置于框架的背景中?

是的。将place 与相对坐标一起使用。以下会将带有您图像的标签放置在根窗口的中心,并且不会影响任何其他小部件。

some_frame = tk.Frame(root, borderwidth=2, relief="raised", width=200, height=200)
...
background = tk.Label(some_frame, text="I am in the center", background="pink")
background.place(relx=.5, rely=.5, anchor="c")

这是我认为place 优于使用gridpack 的少数情况之一。这就是官方文档对place的说法:

与许多其他几何管理器(例如打包器)不同,布局器不会尝试操纵主窗口或从属窗口的父窗口的几何形状(即,它不会设置其请求的大小)。要控制这些窗口的大小,请将它们设为类似框架和画布的窗口,以便为此提供配置选项。

【讨论】:

  • 我不希望根窗口中的图像。我想要它在框架中。
  • @SierrMountainTech:然后让它成为框架的子节点。
  • TLbg = Label(FrameTL,image = bgImage) 会将图像放入框架中,但随后框架会调整大小以适合图像。
  • @SierrMountainTech:不,不会。这是place 的好处之一——它不会改变包含框架的大小。
  • 感谢您对此的帮助。我会一直在寻找一段时间。我不知道.place 会是解决方案,或者.place 不会像其他选项那样操纵任何几何图形。令我惊讶的是,我找不到任何其他关于此的问题。也许我的措辞对我的问题不准确。
猜你喜欢
  • 2012-05-05
  • 1970-01-01
  • 2014-11-08
  • 2020-08-09
  • 2020-08-22
  • 1970-01-01
  • 2011-04-17
  • 1970-01-01
  • 2013-02-25
相关资源
最近更新 更多