【问题标题】:Python tkinter problem changing number of widgets when resizing windowPython tkinter 问题在调整窗口大小时更改小部件的数量
【发布时间】: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,则根本不起作用。我想要一些总能正常工作的东西。

标签: python tkinter


【解决方案1】:

rsz() 应该可以与 frame.bind('&lt;Configure&gt;') 一起正常工作:

import tkinter as tk
from tkinter import ttk

root=tk.Tk()
root.geometry("500x500")
root.grid_columnconfigure(0, weight=1)
root.grid_rowconfigure(0, weight=1)

lasth = -1

def rsz(event):
    global lasth
    #h = root.winfo_height()
    h = event.height
    if h != lasth:
        for widget in frame.winfo_children():
            widget.destroy()
        for row in range(h//26):
            frame.grid_rowconfigure(row, weight=1)
            for col in range(6):
                ttk.Button(frame, text='row{}, col{}'.format(row,col)).grid(row=row, column=col, sticky='nsew')
        lasth = h

frame=tk.Frame(root, padx=5, pady=5)
frame.grid(row=0, column=0, sticky="nsew")
# since number of columns does not change
# grid_columnconfigure() can be called once for each column
for col in range(6):
    frame.grid_columnconfigure(col, weight=1)
frame.bind("<Configure>", rsz)

root.mainloop()

【讨论】:

  • 在 Windows 10 上,我无法使用鼠标通过拖动顶部或底部栏来调整窗口大小。它对你有用吗?
  • 我没有这个问题。
  • 所以当您将鼠标放在底部边缘并且双箭头光标显示时,您可以单击并拖动并更改高度。我已经在装有 Python 3.7.5 的 Windows 10 机器和旧的 Windows 7 机器上进行了尝试,但我也无法单击并拖动以调整大小。我想知道有什么区别。
  • 那我不知道为什么。
猜你喜欢
  • 2017-10-18
  • 2011-05-18
  • 1970-01-01
  • 2018-03-01
  • 2014-08-29
  • 2013-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多