滚动条 Tkinter 不滚动

问题描述 投票:0回答:1

我在 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()

如何解决?我看到类似的问题,但我无法解决它。谢谢大家。

tkinter scrollbar tkinter-canvas
1个回答
0
投票

问题是由

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 
.

© www.soinside.com 2019 - 2024. All rights reserved.