我试图使ScrollBar仅应用于LeftFrame。 当我使用“画布”设置时,ScrollBar会应用于整个窗口。
是否有更好的方法来设置可选择的长列表? 我应该改用列表框吗?
import tkinter as tk
root = tk.Tk()
root.geometry("1000x600")
# root.resizable(width=False,height=False)
def printname(event,i):
print ("my name is",i)
namelabel.configure(text="test" + str(i))
def onFrameConfigure(canvas):
'''Reset the scroll region to encompass the inner frame'''
canvas.configure(scrollregion=canvas.bbox("all"))
canvas = tk.Canvas(root,borderwidth=0,background="#ffffff")
leftFrame = tk.Frame(canvas,background="#ffffff",width=700,height=500)
vsb = tk.Scrollbar(root,orient="vertical",command=canvas.yview)
canvas.configure(yscrollcommand=vsb.set)
vsb.pack(side="left",fill="y")
canvas.pack(side="left",fill="both",expand=True)
canvas.create_window((1,1),window=leftFrame,anchor="ne")
rightFrame = tk.Frame(root,width=300)
# vsb = tk.Scrollbar(root,command=canvas.yview)
# canvas.configure(yscrollcommand=vsb.set)
# vsb.pack(side="right",2),window=rightFrame,anchor="nw")
# rightFrame = tk.Frame(root,width=400)
# rightFrame.pack()
leftFrame.bind("<Configure>",lambda event,canvas=canvas: onFrameConfigure(canvas))
textlabel = tk.Label(leftFrame,text="Player List")
textlabel.grid(row=0)
for i in range(50):
if (i % 2):
w = tk.Text(leftFrame,height=1,fg="white",bg="black")
else:
w = tk.Text(leftFrame,fg="black",bg="white")
w.insert(1.0,"test" + str(i))
w.configure(relief="flat")
w.configure(state="disabled")
w.bind("<Button-1>",a=i: printname(event,a))
w.grid(row=7+i)
namelabel = tk.Label(rightFrame,text="Test",bg="black")
namelabel.grid(row=1)
root.mainloop()