我在里面创建了一个带有画布的窗口。画布包含一个矩形。两者都通过回调和窗口大小来改变它们的大小。
所以我的初学者问题是:它工作正常,但这是一个好的或常见的方法吗?还是有更高效/通用的方式?
view.safeAreaLayoutGuide.trailingAnchor.constraintEqualToSystemSpacingAfter(statusLabel.trailingAnchor, multiplier: 1).isActive = true
答案 0 :(得分:0)
不,这不是让画布调整大小的好方法。你几乎不应该使用place
。 grid
和pack
可以更轻松地创建自动调整大小的小部件。
例如,如果您希望画布始终为100像素高并填充窗口的整个宽度,则可以将其添加到obj
,如下所示:
w = Canvas(obj, width=x_size, height=100)
w.pack(side="bottom", fill="x")
对于绿色矩形,如果希望矩形随着画布一起增长和缩小,则别无选择,只能在<Configure>
上使用绑定。
但是,每次调用时,您的回调都会创建一个新矩形,而不是修改现有矩形的坐标。这是内存泄漏,因为程序运行的时间越长,内存越多,窗口调整的次数越多。 w.create_rectangle
将返回一个标识符;您可以使用该标识符稍后修改矩形。
这是您的代码的简化版本。我已经更改了变量名,使其更易于理解。
from tkinter import *
window = Tk()
window.title("MyFirst Window - WOW")
x_size = 1200
y_size = 600
window.geometry(str(x_size)+"x"+str(y_size))
window.update_idletasks()
canvas = Canvas(window, width=x_size, height=100, background="bisque")
canvas.pack(side="bottom", fill="x")
rect = canvas.create_rectangle(0, 0, window.winfo_width(), 100, fill="#476042")
def callback(event):
canvas.coords(rect, 0, 0, canvas.winfo_width(), 100)
canvas.bind("<Configure>", callback)
window.mainloop()