我有以下界面:3个框架,其中2个位于左侧,frame1
和frame2
,另一个位于右侧,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()
我设法让标签跨越其他帧,但是当我取消评论最后两行中的任何一行时,界面都没有打开,程序就冻结了。
我该如何解决这个问题?
答案 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()
这导致:
所以基本上我所做的就是将bg
,height
和sticky
参数添加到框架和标签,以便轻松地查看正在发生的事情以及它们的框架是如何布局的。我还修改了grid
参数列表框和标签。
希望这是你所追求的,或者它会帮助你到达那里。
答案 1 :(得分:0)
如果你同时使用.grid()
和.pack()
Tkinter(python 2.x)或者tkinter(python 3.x)将很乐意度过余生,试图找到满足两者的方法,您必须在同一窗口或框架中使用一个,请参阅http://www.openbookproject.net/py4fun/gui/tkPhone.html