问题描述
我已经在根目录(整个窗口)中创建了画布,并希望使其水平滚动。但是我的代码有问题,无法正常工作。我对Python很陌生,所以请耐心等待我的新手问题。
我还想知道如何使此滚动条更宽。我只发现了如何使它更高而不是更宽。
root = Tk()
canvas = Canvas(root,bg="blue",height=700,width=500)
canvas.grid(column=0,row=0)
scrollbar = Scrollbar(canvas,orient=HORIZONTAL,width=18)
scrollbar.config(command=canvas.xview)
canvas.config(xscrollcommand=scrollbar.set)
scrollbar.grid(column=0,row=9,pady=5,columnspan=4)
root.mainloop()
解决方法
画布需要知道应该通过滚动来访问较大的虚拟画布的哪一部分。您可以通过设置scrollregion
属性来实现。 scrollregion
定义了可滚动区域的左上角和右下角的坐标。
例如,如果您希望画布在屏幕上以500x700的区域显示,但要向右滚动以查看2000x700,则应执行以下操作:
canvas.configure(scrollregion=(0,2000,700))
注意:尚不清楚您是如何或是否向画布中添加内容的问题。上面的示例给出了固定的scrollregion
。更常见的方法是在添加小部件后定义scrollregion
,方法是使用bbox("all")
获取画布上所有对象的边界框,如下所示:
canvas.configure(scrollregion=canvas.bbox("all"))
我还想知道如何使此滚动条更宽。我只发现了如何使它更高而不是更宽。
这通过使用pack
或grid
来控制。此外,滚动条不应是画布的子级,它需要使用与画布相同的父级。
这是您的代码,其中包含必要的更改。我也将import语句更改为符合PEP8,并添加了一些刻度线,以便您可以在画布滚动时看到它。
import tkinter as tk
root = tk.Tk()
canvas = tk.Canvas(root,bg="blue",height=700,width=500)
scrollbar = tk.Scrollbar(root,orient="horizontal",width=18,command=canvas.xview)
canvas.configure(scrollregion=(0,700),xscrollcommand=scrollbar.set)
root.grid_rowconfigure(0,weight=1)
root.grid_columnconfigure(0,weight=1)
canvas.grid(column=0,row=0,sticky="nsew")
scrollbar.grid(row=1,column=0,sticky="ew")
# this adds tick-marks every 100 pixels so that you can
# see the canvas scroll
for x in range(0,2001,100):
anchor = "sw" if x < 100 else ("se" if x==2000 else "s")
canvas.create_line(x,700,x,690,fill="red")
canvas.create_text(x,680,text=x,anchor=anchor)
root.mainloop()