Tkinter、Python 中框架的垂直滚动条

Luk*_*361 7 python tkinter scrollbar python-3.x tkinter-canvas

我的目标是让滚动条停留在全屏窗口的右侧,允许用户上下滚动各种不同的小部件(例如标签和按钮)。从我在本网站上看到的其他答案中,我得出的结论是,必须将滚动条分配给画布才能使其正常运行,我曾尝试将其包含在我的代码中,但没有太多成功与。

下面的代码显示了我迄今为止设法完成的简化版本:

from tkinter import *
root = Tk()
root.state("zoomed")
root.title("Vertical Scrollbar")
frame = Frame(root)
canvas = Canvas(frame)
Label(canvas, text = "Test text 1\nTest text 2\nTest text 3\nTest text 4\nTest text 5\nTest text 6\nTest text 7\nTest text 8\nTest text 9", font = "-size 100").pack()
scrollbar = Scrollbar(frame)
scrollbar.pack(side = RIGHT, fill = Y)
canvas.configure(yscrollcommand = scrollbar.set)
canvas.pack()
frame.pack()
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

运行此代码时,我面临两个问题:

一种是滚动条处于非活动状态,并且不允许用户向下滚动以查看文本的其余部分。

另一种是滚动条附加在文本的右侧,而不是窗口的右侧。

到目前为止,我在这个站点上找到的其他答案都没有使我能够修改我的代码以支持我的程序的全功能滚动条。我将非常感谢阅读本文的任何人可以提供的任何帮助。

fur*_*ras 12

再看链接:https : //stackoverflow.com/a/3092341/7432

它展示了如何创建滚动框架 - 然后您可以在此框架中添加所有小部件。

import tkinter as tk


def on_configure(event):
    # update scrollregion after starting 'mainloop'
    # when all widgets are in canvas
    canvas.configure(scrollregion=canvas.bbox('all'))


root = tk.Tk()

# --- create canvas with scrollbar ---

canvas = tk.Canvas(root)
canvas.pack(side=tk.LEFT)

scrollbar = tk.Scrollbar(root, command=canvas.yview)
scrollbar.pack(side=tk.LEFT, fill='y')

canvas.configure(yscrollcommand = scrollbar.set)

# update scrollregion after starting 'mainloop'
# when all widgets are in canvas
canvas.bind('<Configure>', on_configure)

# --- put frame in canvas ---

frame = tk.Frame(canvas)
canvas.create_window((0,0), window=frame, anchor='nw')

# --- add widgets in frame ---

l = tk.Label(frame, text="Hello", font="-size 50")
l.pack()

l = tk.Label(frame, text="World", font="-size 50")
l.pack()

l = tk.Label(frame, text="Test text 1\nTest text 2\nTest text 3\nTest text 4\nTest text 5\nTest text 6\nTest text 7\nTest text 8\nTest text 9", font="-size 20")
l.pack()

# --- start program ---

root.mainloop()
Run Code Online (Sandbox Code Playgroud)