Python3.5将单个单元格配置为展开,而不是整个行或列

2024-04-25 18:25:29 发布

您现在位置:Python中文网/ 问答频道 /正文

想象一下tkinter窗口中的4x4网格。我想展开第2行第2列的单元格,但不是第2行或第2列的所有内容。我正在设计一个文本窗口,在左边的第1-15行有可选择的选项。使第2行的权重为1,列2的权重为1,这使我的文本小部件得以扩展,但第2行和第2列中的其他内容也会扩展。有办法吗?在

from tkinter import *

root = Tk()


lbl1 = Label(root, text="label1")
lbl1.grid(row=0, column=1)

lbl2 = Label(root, text="label2")
lbl2.grid(row=1, column=0)

lbl3 = Label(root, text="label3")
lbl3.grid(row=3, column=0)

lbl4 = Label(root, text="label4")
lbl4.grid(row=5, column=0)

txt = Text(root, state='disabled', bg='#E8E8E8')
txt.grid(row=1, column=1, padx=10, pady=10, sticky="NSEW", columnspan=2,      rowspan=2)


root.rowconfigure(2, weight=1)
root.columnconfigure(2, weight=1)

root.mainloop()

例2:

^{pr2}$

示例2的所有内容都在我想要的位置,但是文本小部件没有展开。使用网格时是否可以设置一个要展开的框架?在


Tags: text文本网格内容部件tkintercolumnroot
3条回答

有了大家提供的信息,我得以想出解决办法。我把文本小部件放在主窗口而不是框架中,并将标签/工具放在框架中。基本上是利用一个框架不会展开来锁定标签的事实。现在,当窗口被展开时,只有小部件会增长。在

from tkinter import *

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


lbl1 = Label(frame1, text="label1")
lbl2 = Label(frame2, text="label2")
lbl3 = Label(frame2, text="label3")
lbl4 = Label(frame2, text="label4")

lbl1.grid(row=0, column=1, sticky=N)
lbl2.grid(row=3, column=0, sticky=N)
lbl3.grid(row=5, column=0, sticky=N)
lbl4.grid(row=7, column=0, sticky=N)

txt = Text(root, state='disabled', bg='#E8E8E8')
txt.grid(row=1, column=1, padx=10, pady=10, sticky="NSEW", columnspan=2, rowspan=2)


root.rowconfigure(2, weight=1)
root.columnconfigure(2, weight=1)
root.mainloop()

谢谢你的帮助。在

您的问题询问的是4x4网格,但您的示例只显示了两列。这让你很难理解你想要什么。在注释中,你说你只想让示例的文本区域变大变小,所有的标签都在一起,所以这就是我要解决的问题。在

最简单的解决方案是在文本区域的右侧和下方添加一个额外的行和列。让文本小部件跨入这些区域,并将这些区域的权重设为1。这意味着,随着窗口大小的改变,任何额外的空间都会被分配给不被按钮占用的区域。在

专业提示:当所有的布局代码都在一起时,我发现布局问题更容易可视化和解决。在

它看起来像这样:

lbl1.grid(row=0, column=1)
lbl2.grid(row=1, column=0)
lbl3.grid(row=2, column=0)
lbl4.grid(row=3, column=0)
txt.grid(row=1, column=1, padx=10, pady=10, sticky="NSEW", columnspan=2, rowspan=4)

root.rowconfigure(4, weight=1)
root.columnconfigure(2, weight=1)

我认为使用pack而不是使用grid作为部分布局,可能会更好地解决布局问题。例如,可以从三个区域开始:工具栏、侧面板,然后是带有文本小部件的主区域:

^{pr2}$

现在有三个相对独立的区域。您可以在这些帧中分别使用packgrid,这样可以更容易地跟踪行和列。在

一种解决方法是使网格变大一倍,将您希望扩展的内容设置为跨越两列/行。在

也就是说,对于grid的事情([1,1][1,3],[3,1][3,3]…)使用奇数编号的行/列,并将偶数编号的行/列设置为具有权重。任何要在一个或两个方向展开的内容都会得到一个columnspan或{}的2,并将其推到一个行/列中,该行/列可以根据需要展开。在

相关问题 更多 >