在2列Tkinter上展开列表框

时间:2014-06-25 22:32:27

标签: python listbox tkinter widget

我有以下界面:3个框架,其中2个位于左侧,frame1frame2,另一个位于右侧,frame3

我想创建另一个框架frame4,其标签为Output,在其下面应该有一个列表框。我希望这两个小部件都跨越前面的框架,每个框架都使用grid管理器放置在单元格中。

此外,我不确定Listbox是否是我应该使用的小部件。我想要的东西将包含我将通过我的应用程序运行的程序的输出。我还想到了Entry,但我需要一些可以显示多行的东西。

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

from Tkinter import *

root = Tk()

frame1 = Frame(root)
frame1.grid(row=0,column=0)

frame2 = Frame(root)
frame2.grid(row=1,column=0)

frame3 = Frame(root)
frame3.grid(row=0,column=1)

frame4 = Frame(root)
frame4.grid(row=2,columnspan=2)
l5 = Label(frame4, text='Output:').grid(row=2,columnspan=2)
output = Listbox(frame4, height=5)
#output.grid(row=2,column=0,columnspan=2)
#output.pack(side=LEFT,  fill=BOTH, expand=1)

root.mainloop()

我设法让标签跨越其他帧,但是当我取消评论最后两行中的任何一行时,界面都没有打开,程序就冻结了。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

我稍微推荐了你的代码:

from tkinter import * # for python 2.7 use Tkinter

root = Tk()


frame1 = Frame(root, bg='red', height=20)
frame1.grid(row=0,column=0, sticky=W+E)

frame3 = Frame(root, bg='blue', height=20)
frame3.grid(row=0,column=1, sticky=W+E)

frame2 = Frame(root, bg='green',  height=20)
frame2.grid(row=1,column=0, sticky=W+E)



frame4 = Frame(root)
frame4.grid(row=2,columnspan=2, sticky=E+W)

l5 = Label(frame4, text='Output:', bg='orange').grid(row=0, column=0, sticky=E+W)
output = Listbox(frame4, height=5, width=50)
output.grid(row=1,column=0)
#output.pack(side=LEFT,  fill=BOTH, expand=1)

root.mainloop()

这导致:

enter image description here

所以基本上我所做的就是将bgheightsticky参数添加到框架和标签,以便轻松地查看正在发生的事情以及它们的框架是如何布局的。我还修改了grid参数列表框和标签。

希望这是你所追求的,或者它会帮助你到达那里。

答案 1 :(得分:0)

如果你同时使用.grid().pack() Tkinter(python 2.x)或者tkinter(python 3.x)将很乐意度过余生,试图找到满足两者的方法,您必须在同一窗口或框架中使用一个,请参阅http://www.openbookproject.net/py4fun/gui/tkPhone.html