当我将tkinter窗口的行和列配置为weight = 1,然后在其上覆盖所有行和列的画布上时,画布将响应大小:
win=Tk()
win.geometry("1200x675")
rows=0
while rows<200:
win.rowconfigure(rows,weight=1)
win.columnconfigure(rows,weight=1)
rows+=1
canvas=Canvas(win,bg='white',width=1200,height=675)
canvas.grid(sticky='nesw',rowspan=200,columnspan=200)
但是在画布中特定坐标处放置的小部件仍保持相同的大小和位置,例如一个按钮:
but=Button(text="Calculate")
canvas.create_window(100,100,window=but)
因此,任何人都可以提供有关如何使小部件也具有尺寸响应能力的帮助。
答案 0 :(得分:1)
您不需要制作那么多网格单元。一格 weight = 1将随着尺寸的变化扩展画布。
没有通用的方法来缩放包含的小部件,您将 必须自己写。
使用<Configure>
更改挂钩窗口大小,然后循环浏览
画布形式canvas.find_withtag('all')
上的小部件。请参见下面的示例:
from tkinter import *
win = Tk()
win.geometry("300x200+800+50")
win.rowconfigure(0, weight=1)
win.columnconfigure(0, weight=1)
canvas=Canvas(win, bg='white')
canvas.grid(sticky='nesw')
def size(event):
width, heigth = canvas.winfo_width(), canvas.winfo_height()
print('Canvas size:', width, 'x', heigth)
items = canvas.find_withtag('all') # Find all widgets on canvas
for item in items:
pass # Change widget size here, one widget at a time
win.bind('<Configure>', size) # Hook window size changes
win.mainloop()