非常抱歉,之前的回答有误。确实,在`Frame`上添加滚动条并不会自动滚动。但是我们可以通过在`Canvas`上添加滚动条来实现这个功能。这是一个修订后的代码示例:
import tkinter as tk
from tkinter import ttk
def add_radio_button():
button_value = len(radio_buttons) + 1
radio_buttons.append(tk.Radiobutton(canvas, text=f"Radio {button_value}"))
canvas.create_window((10, button_value * 30), window=radio_buttons[-1], anchor="w", width=200)
update_scroll_region()
def update_scroll_region():
canvas.update_idletasks()
canvas.config(scrollregion=canvas.bbox("all"))
root = tk.Tk()
root.geometry("400x400")
scrollbar = tk.Scrollbar(root)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
canvas = tk.Canvas(root, yscrollcommand=scrollbar.set)
canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
scrollbar.config(command=canvas.yview)
frame = tk.Frame(canvas)
canvas.create_window((0, 0), window=frame, anchor="nw")
radio_buttons = []
for i in range(10):
radio_buttons.append(tk.Radiobutton(frame, text=f"Radio {i+1}"))
radio_buttons[i].pack()
add_button = ttk.Button(root, text="Add Radio Button", command=add_radio_button)
add_button.pack()
update_scroll_region()
tk.mainloop()
这个示例中,我们将`Frame`换成了`Canvas`,并在`Canvas`上添加了一个滚动条。当点击"Add Radio Button"按钮时,会在`Canvas`中添加一个新的`Radiobutton`。同时,我们添加了`update_scroll_region`函数来更新滚动区域的大小。
希望这次能对您有所帮助!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |