我有一个关于使用Tkinter画布对象在Python中制作GUI的问题。
在创建frame对象时,您可以为它提供您希望它具有的宽度和高度。有没有一种方法可以检测它的容器的大小并使用它来确定它的宽度和高度?
例如,假设您想创建一个画布,它将始终占用与整个屏幕右上角相等的空间,即使您的窗口要调整大小,或者您要在另一个程序中使用它包含的框架,该程序可能会有另一个框架占用其他屏幕空间。
以此为例:
import tkinter as tk
root = tk.Tk()
root.geometry("800x480")
container = tk.Frame(root, bg = "yellow")
container.pack(expand = True, fill = "both")
drawArea = tk.Canvas(container, bg = "red")
drawArea.pack()在上面的代码中,画布不会占据它所在的整个黄色框架。我知道如果要将它设置为黄色边框的完整大小,可以在.pack()语句中添加expand = True, fill = "both"。但是,如果我只希望它是帧的2/3,该怎么办?或者是框架宽度和高度的一半?这样做有可能吗?
也许我在谷歌搜索上很烂,但我似乎在网上找不到任何信息:\
发布于 2017-08-03 00:07:23
在代码中,当您在框架中打包画布时,将"expand“关键字设置为True,将"fill”关键字设置为"both“(或tkinter.BOTH)。如果您使用的是网格,则需要使用以下代码(将名称"f“作为框架:
f.grid_rowconfigure(0, weight=1)
f.grid_columnconfigure(0, weight=1)然后,当您栅格画布时,将"sticky“关键字设置为"nsew”(或tkinter.NSEW)。在上面的代码中,如果您将0替换为画布所在的行号和网格号,以及希望画布填充的GUI的任何部分的权重。这应该是可行的。
发布于 2017-08-03 03:07:32
在你写的一条评论中:
我特别问的是如何制作像画布这样的东西,只占用容器的一部分,它被放在容器里。,
。
有很多方法可以做到这一点。正如您猜测的那样,一种方法是获取容器的尺寸,然后相应地设置小部件的尺寸。
您还可以使用几何管理器来为您管理此功能。例如,您可以使用grid将画布放置在特定的行和列中,然后安排该行和/或列的高度和/或宽度恰好是容器高度和/或宽度的四分之一。
您也可以使用place而不是grid或pack。相对于其他小部件,place非常擅长调整小部件的大小和放置小部件。例如,可以将relwidth设置为.25,以使小部件的宽度为父部件宽度的1/4。
哪个选择是正确的选择取决于许多因素,主要与屏幕上的其他小部件以及它们应该如何交互有关。如果不了解整个应用程序的更多细节,而不只是一个窗口,就不可能给出更具体的建议。
发布于 2017-08-03 01:03:59
我做了一点猜测工作,但我成功地完成了我想要做的事情。
import tkinter as tk
root = tk.Tk()
container = tk.Frame(root, bg = "yellow")
container.pack(expand = true, fill = "both")
drawArea = tk.Canvas(container, bg = "red")
drawArea.update()
drawArea.configure(width = container.winfo_width(), height = winfo_height())
drawArea.pack()winfo_height和winfo_width包含用作画布容器的内容的宽度和高度。因此,执行类似于winfo_width / 2的操作将使容器的宽度减半。但是,您需要首先更新画布对象,以使调整大小生效。
https://stackoverflow.com/questions/45465722
复制相似问题