我的目标是让滚动条停留在全屏窗口的右侧,允许用户在各种不同的小部件(例如标签和按钮)上下滚动。 从我在这个网站上看到的其他答案,我得出的结论是,必须将滚动条分配给画布才能使其正常运行,我试图将其包含在我的代码中但是没有多少成功与。
以下代码显示了到目前为止我已完成的简化版本:
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()
运行此代码时我遇到两个问题:
一个是滚动条处于非活动状态,并且不允许用户向下滚动以查看文本的其余部分。
另一个是滚动条附加到文本的右侧,而不是窗口的右侧。
到目前为止,我在本网站上找到的其他答案都没有让我修改我的代码以支持我的程序的功能完整的滚动条。我非常感谢任何阅读此内容的人提供的任何帮助。
答案 0 :(得分:3)
再次查看链接: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()
答案 1 :(得分:1)
我建议使用tkScrolledFrame https://pypi.org/project/tkScrolledFrame/ 他们在网站上也有很好的例子。如此简单易用,对我来说非常有用。