我目前正在尝试在画布上实现滚动条,因为我了解到我无法立即在框架上执行此操作。我可以让它出现,但我实际上无法使它工作。在谈到python和tkinter时,我仍然是初学者,此前此帖中的帖子对我帮助不大。这是我的代码(我可以提供有关我已经做过的任何其他事情的建议,也被视为不良做法):
from tkinter import *
class myApp():
def __init__(self,root):
myApp.f2=Frame(root)
myApp.f2.pack()
myApp.canv=Canvas(self.f2)
myApp.canv.pack()
myApp.f1=Frame(self.canv)
myApp.f1.pack(side=LEFT, fill=BOTH, expand=TRUE)
myApp.scroll=Scrollbar(self.f1,orient=VERTICAL,
command=myApp.canv.yview)
myApp.scroll.grid(row=0,column=6)
myApp.canv.config(yscrollcommand=myApp.scroll.set)
我必须在其他小部件中使用网格,我还没有包含在这里。
答案 0 :(得分:0)
我真的不明白绑定是如何工作的,但这里是我在Toplevel中用于滚动条的代码,它不是来自我,但我不记得我在哪里找到它(我认为它是在stackoverflow上,你应该搜索更多,我相信你会找到一些东西)。它应该可以工作,但只有当你用鼠标悬停它时才能滚动条形
Toplevel = tk.Toplevel(self)
#create canvas to make a scrollbar
canvas = tk.Canvas(Toplevel, borderwidth=0)
#create frame which will contains your widgets
frame = tk.Frame(canvas)
#create and pack your vsb to the Toplevel and link it to the canvas yview
vsb = tk.Scrollbar(Toplevel, orient="vertical", command=canvas.yview)
canvas.configure(yscrollcommand=vsb.set)
vsb.pack(side="right", fill="y")
canvas.pack(side="left", fill="both", expand=True)
canvas.create_window((5,5), window=frame, anchor="nw")
#i don't understand this line
frame.bind("<Configure>", lambda event, canvas=canvas: canvas.configure(scrollregion=canvas.bbox("all")))
#add your widgets to the frame
...
PS:不要使用from tkinter import *
您可以(并且将)发生名称冲突,使用import tkinter
或import tkinter as tk
修改:this question是我的来源。