我在 tkinter 上有一个滚动条,但它不允许我滚动页面,当我滚动时它根本不移动。 (滚动条在那里)
def new_window(serial, model, n_comp, ):
newwindow = Toplevel(root)
newwindow.title("Components")
# Canvas
my_canvas = Canvas(newwindow)
my_canvas.pack(side=LEFT, fill=BOTH, expand=1)
# Scrollbar
my_scrollbar = ttk.Scrollbar(newwindow, orient=VERTICAL, command=my_canvas.yview())
my_scrollbar.pack(side=RIGHT, fill=Y)
# Configure the canvas
my_canvas.configure(yscrollcommand=my_scrollbar.set)
my_canvas.bind('<Configure>', lambda e: my_canvas.configure(scrollregion=my_canvas.bbox("all")))
# Create a frame inside the canvas
second_frame = Frame(my_canvas)
# Add that newframe to a window in the canvas
my_canvas.create_window((0, 0), window=second_frame, anchor="nw")
ls = [] # Lista modello + seriali
ls_old_model = [] # Lista modelli già usati
for y in range(0, len(serial)):
verifica = model[y]
if verifica in ls_old_model:
pass # Se il modello è già stato usato non faccio nulla e passo ai modelli successivi
else:
blocco = FALSE # Blocco per inserire il modello solo una volta. Quando attivo verranno inseriti solo i
# seriali
for x in range(0, len(serial)):
if model[x] == verifica:
if blocco == FALSE:
ls.append(model[x])
blocco = True
ls.append(" - " + serial[x])
else:
ls.append(" - " + serial[x])
ls_old_model.append(verifica)
new_ls = "\n\n".join(ls)
text1 = Message(second_frame, text=(f'HARD_FAIL components to be tested for MIL01 = {n_comp} \n\n\n'
f'Component type: \n\n\n'
f'{new_ls}'))
text1.pack()
如何解决?我看到类似的问题,但我无法解决它。谢谢大家。
问题是由
command=my_canvas.yview()
中的 ttk.Scrollbar(...)
引起的,它立即执行 my_canvas.yview()
并将结果 None
分配给 command
选项。所以滚动不起作用。
应该是
command=my_canvas.yview
。
还要更新
scrollregion
的 my_canvas
,<configure>
事件应绑定在 second_frame
而不是 my_canvas
,因为每当调整 scrollregion
大小时都需要更新 second_frame
,而不是 my_canvas
.