画布用窗口调整大小 - 这样做的好方法?

时间:2018-04-09 12:17:17

标签: python python-3.x performance user-interface tkinter

我在里面创建了一个带有画布的窗口。画布包含一个矩形。两者都通过回调和窗口大小来改变它们的大小。

所以我的初学者问题是:它工作正常,但这是一个好的或常见的方法吗?还是有更高效/通用的方式?

view.safeAreaLayoutGuide.trailingAnchor.constraintEqualToSystemSpacingAfter(statusLabel.trailingAnchor, multiplier: 1).isActive = true

1 个答案:

答案 0 :(得分:0)

不,这不是让画布调整大小的好方法。你几乎不应该使用placegridpack可以更轻松地创建自动调整大小的小部件。

例如,如果您希望画布始终为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()