关于我的 tkinter Canvas 上滚动条位置的问题。我有一个带有 3 个 Canvas 小部件的框架。礼貌to this post为了这个想法。我添加了一个水平滚动条,每个 Canvas 都有一个 50+ 列 500+ 行的 Pandas 数据框。负载不是很快,但这不是一个目标。
新行将添加到每个数据框的底部。这个新行需要验证。因此,与其每次都向下滚动,不如滚动条/或 Canvas 显示底部。
请参阅下面定义 3x Canvas 和 3x 滚动条 (x+y) 的代码。
def createBox(window):
list_ = ['df1', 'df2', 'df3'] # 3 dataframes
for i in range(3):
mybox = LabelFrame(window, padx=5, pady=4)
mybox.grid(row=i, column=0)
createWindow(mybox, list_[i], i)
def createWindow(box, lt_actual, i):
canvas = Canvas(box, borderwidth=0)
frame = Frame(canvas)
vsbY = Scrollbar(box, orient="vertical", command=canvas.yview)
canvas.configure(yscrollcommand=vsbY.set, width=1200, heigh=200)
vsbY.pack(side="right", fill="y")
vsbX = Scrollbar(box, orient="horizontal", command=canvas.xview)
canvas.configure(xscrollcommand=vsbX.set, width=1200, heigh=200)
vsbX.pack(side="bottom", fill="x")
#canvas.yview_moveto(1) - no effect
#canvas.yview_moveto(1.0) - no effect
canvas.pack(side="left", fill="both", expand=True)
canvas.create_window((4,4), window=frame, anchor="nw", tags="frame")
# be sure that we call OnFrameConfigure on the right canvas
frame.bind("<Configure>", lambda event, canvas=canvas: OnFrameConfigure(canvas))
我在这个论坛和一些 info (effbot) pages 上读到过我应该使用 moveto()/yview_moveto() 命令选项,但到目前为止这似乎不起作用。
问题 1. 我应该将 y-scrollbar 放在底部还是应该将 Canvas View 放在底部。
问题 2. 您能否就如何使用 moveto 提供一些指导,或者我应该采用不同的方法吗?
非常感谢!
最佳答案
yview_moveto
Canvas 的方法确实是使用正确的功能。它的参数是您想要在屏幕外的 Canvas 总高度的分数。所以使用 0 作为参数显示 Canvas 的顶部,1 显示底部。
引用 :
将 Canvas 调整为给定的 Scroll 偏移量。
偏移
'0.0'
是滚动区域的开始,'1.0'
结束。 import tkinter as tk
root = tk.Tk()
canvas = tk.Canvas(root)
canvas.grid(row=0, column=0)
canvas.create_oval(0, 0, 20, 20, fill='red')
canvas.create_oval(0, 800, 20, 820, fill='blue')
ys = tk.Scrollbar(root, orient='vertical', command=canvas.yview)
ys.grid(row=0, column=1, sticky='ns')
# configure scrolling
canvas.configure(yscrollcommand=ys.set, scrollregion=canvas.bbox('all'))
# show bottom of canvas
canvas.yview_moveto('1.0')
root.mainloop()
顺便说一句,我认为将 y 滚动条放在底部或将 Canvas View 放在底部没有任何区别,因为两者是链接在一起的。但是我猜你想知道是使用滚动条的方法还是 Canvas 的方法来做,我在上面给出了答案。
关于python - tkinter 将滚动条放在 Canvas 上的底部位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41804207/