更新 tkinter 中的滚动条

Posted

技术标签:

【中文标题】更新 tkinter 中的滚动条【英文标题】:Update scrollbar in tkinter 【发布时间】:2022-01-12 21:25:11 【问题描述】:

我正在用 python 编程,我需要创建一个滚动条,当新的小部件添加到窗口时会更新。我不知道该怎么做,也没有在任何地方找到答案。有这个命令吗?这是我现在的代码。

import tkinter as tk

root = tk.Tk()
root.geometry("600x400")

my_canvas = tk.Canvas(root)
my_canvas.pack(side = "left", fill = "both", expand = 1)

my_scrollbar = tk.Scrollbar(root, orient = "vertical", command = my_canvas.yview)
my_scrollbar.pack(side = "right", fill = "y")
my_canvas.configure(yscrollcommand = my_scrollbar.set)
my_canvas.bind("<Configure>", lambda e: my_canvas.configure(scrollregion = my_canvas.bbox("all")))

my_frame = tk.LabelFrame(my_canvas, width = my_canvas.winfo_width())
my_frame.grid_propagate(0)
my_frame.pack()

for i in range(10):
    my_label = tk.Label(my_frame, text = "Label")
    my_label.pack()

my_canvas.create_window((0, 0), width = 600, anchor = "nw", window = my_frame)

def create_label(scroll, canv, fram):
    my_label = tk.Label(fram, text="Label")
    my_label.pack()
   


my_button = tk.Button(my_frame, text = "Button", command = lambda: create_label(my_scrollbar, my_canvas, my_frame))
my_button.pack()

root.mainloop()

【问题讨论】:

【参考方案1】:

绑定到内框的&lt;Configure&gt; 事件。每当框架改变大小时,就会触发该事件。

def adjust_scrollregion(event):
    my_canvas.configure(scrollregion=my_canvas.bbox("all"))
my_frame.bind("<Configure>", adjust_scrollregion)

与所提出的问题无关...调用my_frame.grid_propagate(0) 毫无意义,因为您在my_frame 内部使用pack

【讨论】:

以上是关于更新 tkinter 中的滚动条的主要内容,如果未能解决你的问题,请参考以下文章

在 Tkinter 中为一组小部件添加滚动条

当输入框大于tkinter中的窗口高度时,我们如何添加滚动条?

带有网格的 tkinter 画布滚动条?

在 tkinter 中更改滚动条的外观(使用 ttk 样式)

tkinter:在画布上使用滚动条

python之tkinter使用-滚动条