Scrollbars Tkinter

时间:2014-06-28 23:13:26

标签: python tkinter scrollbar

我有两个列表框,一个在另一个旁边,我希望每个列表框都有水平和垂直滚动条。我已经设法创建了它们,但是当我按下滚动条上的箭头时,没有任何反应,我看不到整个内容。

这是我到目前为止的代码:

from Tkinter import *

root = Tk()

frame4 = Frame(root)
frame4.grid(row=2,columnspan=2,sticky=E+W)
l5 = Label(frame4, text='Output:').grid(row=0,columnspan=2)

frame5 = Frame(frame4)
frame5.grid(row=1,column=0,sticky=E+W)
l6 = Label(frame5, text='Algo1:').pack()
yscroll1 = Scrollbar(frame5, orient=VERTICAL)
xscroll1 = Scrollbar(frame5, orient=HORIZONTAL)

output_algo = Listbox(frame5,height=5, width=40)
output_algo.config (yscrollcommand=xscroll1.set)
output_algo.config (yscrollcommand=yscroll1.set)
yscroll1.config (command=output_algo.yview)
xscroll1.config (command=output_algo.yview)

yscroll1.pack(side=RIGHT, fill=Y,expand=0)
xscroll1.pack(side=BOTTOM, fill=X,expand=0)

output_algo.pack(side=LEFT,fill=BOTH,expand=1)


frame6 = Frame(frame4)
frame6.grid(row=1,column=1,sticky=E+W)
l7 = Label(frame6, text='Algo2:').pack()
yscroll2 = Scrollbar(frame6, orient=VERTICAL)
xscroll2 = Scrollbar(frame6, orient=HORIZONTAL)

output_opt = Listbox(frame6,height=5, width=40)
output_opt.config (yscrollcommand=xscroll2.set)
output_opt.config (yscrollcommand=yscroll2.set)
yscroll2.config (command=output_opt.yview)
xscroll2.config (command=output_opt.yview)

yscroll2.pack(side=RIGHT, fill=Y,expand=0)
xscroll2.pack(side=BOTTOM, fill=X,expand=0)

output_opt.pack(side=LEFT,fill=BOTH,expand=1)

root.mainloop()

如何更改滚动条才能生效?

另外,我读到在滚动条的情况下使用grid优于pack。如果我要修改我的代码以使用grid,我是否必须创建一个仅包含列表框和滚动条的框架?

2 个答案:

答案 0 :(得分:3)

可能的复制和粘贴不是你的朋友:

output_algo.config (yscrollcommand=xscroll1.set)

应该是

output_algo.config (xscrollcommand=xscroll1.set)

xscroll1.config (command=output_algo.yview)

应该是

xscroll1.config (command=output_algo.xview)

当然,您需要为其他列表框执行相同的操作:)

答案 1 :(得分:0)

您无法滚动空Listbox

我在列表框中添加了一些元素,我可以上下滚动。

for item in range(30):
    output_algo.insert(END, str(item)*item)
    output_opt.insert(END, str(item)*item)

root.mainloop()

从左到右滚动存在一些问题,但我在xscroll1.config()

中看到了错误