【发布时间】:2020-08-26 04:24:05
【问题描述】:
我正在编写一个显示小部件网格的程序。当窗口水平调整大小时,小部件调整大小,但是当窗口垂直调整大小时,我希望小部件的高度保持不变,但行数要改变。我对 frame.bind("", configure) 没有运气,窗口不会调整大小。 root.after(1000, rsz) 有效,但如果我使延迟更小,它不会。似乎应该有更好的方法来做到这一点。有什么建议吗?
import tkinter as tk
from tkinter import ttk
#def configure(event):
# if not event.widget.master.master:
# rsz()
root=tk.Tk()
root.geometry("500x500")
root.grid_columnconfigure(0, weight=1)
root.grid_rowconfigure(0, weight=1)
def rsz():
global lasth
h = root.winfo_height()
if h != lasth:
for widget in frame.winfo_children():
widget.destroy()
for row in range(int((h)/26)):
frame.grid_rowconfigure(row, weight=0)
for col in range(6):
frame.grid_columnconfigure(col, weight=1)
ttk.Button(frame, text='row{}, col{}'.format(row,col)).grid(row=row, column=col, sticky='EWNS')
lasth = h
root.after(1000, rsz)
frame=tk.Frame(root,padx=5,pady=5)
frame.grid(row=0,column=0, sticky="NSEW")
lasth = -1
rsz()
#frame.bind("<Configure>", configure)
root.mainloop()
【问题讨论】:
-
当我运行你的代码时,初始窗口加载 18rows / 5 cols。当我使用最大化窗口按钮时,它加载 38rows / col 计数保持不变..那是你的追求吗?我不确定我是否完全理解您的问题
-
这就是我想要的行为。通过拖动底部栏来调整窗口大小可以解决偶尔出现的故障。如果将 root.after 中的延迟更改为 100,则根本不起作用。我想要一些总能正常工作的东西。