【问题标题】:Expand a listbox over 2 columns Tkinter在 2 列 Tkinter 上展开列表框
【发布时间】:2014-06-25 22:32:27
【问题描述】:

我有以下界面: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()

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

我该如何解决这个问题?

【问题讨论】:

  • 您不应该混合使用包和网格布局管理器。
  • @Marcin:我一次只尝试了一个选项,而不是同时尝试了两个选项。

标签: python listbox tkinter widget


【解决方案1】:

我稍微修改了你的代码:

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()

这会导致:

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

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

【讨论】:

  • 如果你解释你做了什么,你的答案会好一点。否则,我们将不得不逐行与原始版本进行比较,以了解您所做的不同之处。
  • @BryanOakley Tx。我添加了更多信息我所做的更改。
  • @Marcin:谢谢!这正是我想要的。
【解决方案2】:

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

【讨论】:

  • 澄清:仅当您在同一包含框架或窗口中使用gridpack 时才适用。您可以在同一应用程序中作为一个整体使用两者(即:grid 在一个框架中,pack 在另一个框架中)
猜你喜欢
  • 2012-01-28
  • 2016-05-17
  • 2016-01-28
  • 2017-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 2020-04-28
相关资源
最近更新 更多