Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 如何相对于Tkinter中的其他框架扩展框架中的小部件大小(帮助:Tkinter网格管理)_Python 2.7_Tkinter_Gridlayoutmanager - Fatal编程技术网

Python 2.7 如何相对于Tkinter中的其他框架扩展框架中的小部件大小(帮助:Tkinter网格管理)

Python 2.7 如何相对于Tkinter中的其他框架扩展框架中的小部件大小(帮助:Tkinter网格管理),python-2.7,tkinter,gridlayoutmanager,Python 2.7,Tkinter,Gridlayoutmanager,我使用Tkinter创建了5个帧,每个帧包含 frame0-标签、输入框和按钮输入 frame1-左侧的标签和列表框 框架2-2按钮在中心选择并取消选择 框架3-右侧的标签和列表框 框架4-2按钮完成并清除 这是我的代码: from Tkinter import * def toplevelwin(): def clear(): return def select(): return def unselect():

我使用Tkinter创建了5个帧,每个帧包含

frame0-标签、输入框和按钮输入 frame1-左侧的标签和列表框 框架2-2按钮在中心选择并取消选择 框架3-右侧的标签和列表框 框架4-2按钮完成并清除

这是我的代码:

from Tkinter import *

def toplevelwin():

    def clear():
        return

    def select():
        return

    def unselect():
        return

    def done():
        return

    def enter():
        return

    window = Toplevel()

    frame0 = Frame(window)
    frame0.grid(row=0, column=0, sticky=W, padx=5, pady=5, columnspan=2)
    frame0.grid_columnconfigure(1,weight=2)
    lblentry = Label(frame0, text="Entery Box:")
    lblentry.grid(row=0, column=0, sticky=W)
    entrybx = Entry(frame0)
    entrybx.grid(row=1,column=0,sticky=N+S+E+W, columnspan=2)
    entrybt = Button(frame0, text=' Enter ', command=enter)
    entrybt.grid(row=1,column=2,sticky=N+W, padx=3)

    frame1 = Frame(window)
    frame1.grid(row=1, column=0, sticky=E+W, padx=5, pady=5)
    lblshow_lst = Label(frame1, text="List Box 1:")
    lblshow_lst.grid(row=0,sticky=W)
    show_lst = Listbox(frame1)
    show_lst.grid(row=1,sticky=W)

    frame2 = Frame(window)
    frame2.grid(row=1, column=1, sticky=W)
    frame2.grid_columnconfigure(1,weight=1)
    selbtn = Button(frame2, text='Select', command=select)
    selbtn.grid(row=0, padx=5, sticky=E+W)
    selbtn.grid_columnconfigure(1,weight=1)
    uselbtn = Button(frame2, text='Unselect', command=unselect)
    uselbtn.grid(row=1, padx=5, sticky=E+W)
    uselbtn.grid_columnconfigure(1,weight=1)

    frame3 = Frame(window)
    frame3.grid(row=1, column=2, sticky=W, padx=5, pady=5)
    lblsel_lst = Label(frame3, text="List Box 2:")
    lblsel_lst.grid(row=0,sticky=W)
    sel_lst = Listbox(frame3)
    sel_lst.grid(row=1, column=0, sticky=W)

    frame4 = Frame(window)
    frame4.grid(row=2, column=0, sticky=E, padx=5, pady=5)
    Button(frame4, text=' Done ', command=done).grid(row=0, column=0, padx=7 ,pady=2)
    Button(frame4, text='Clear', command=clear).grid(row=0,column=1, padx=7,pady=2)
    window.wait_window(window)


root = Tk()
toplevelwin()
root.mainloop()
这就是我的窗口现在的样子:

我的问题是:

如何扩展frame0向上扩展frame3。也就是说,我想让输入框一直延伸到frame3的末端,让buttonenter保持在它的右侧。 我想把底部框架的按钮放在窗户的右边 尝试:

我试图增加条目小部件的大小,这反过来又将frame2和frame3推到了右侧

used sticky=N+S+W+E,将其推到窗口的中心

还尝试了包含2个按钮的底部框架的sticky=W。他们移到了中间,但并不正确


除了底部的按钮,你不需要框架。 只需将您的小部件制作成这样:

entrybx = Entry(window)
entrybx.grid(row=0,column=0,sticky=N+S+E+W, columnspan=2) # columnspan= 3 better?
当您希望列左侧的小部件sticky=W+E表示中间,sticky=E表示右侧时,请使用sticky=W

对于底部的按钮,不要忘记columnspan:


使用网格时,要使小部件能够扩展或收缩,您需要 设置其粘滞参数并设置其网格单元的权重

默认情况下,所有列和行的权重均为0,这意味着它们 将收缩到最小的有效大小

若要使其沿东西方向扩展,请使用 网格配置

若要使其在南北方向上展开,请使用增加其行权重 网格配置

因此,对于frame0

使用columnspan=3使框架0跨越3列。 使用sticky='WE'使frame0同时粘贴到 它的细胞。 使用frame0.grid\u columnconfigure0,weight=1将网格单元的权重增加到1。 对于框架4

如果frame4的电池在东边,它会粘在东边。请注意,如果没有权重,frame4也会收缩;它只是在粘贴到东侧时收缩,因此它包含的按钮最终位于右侧

如果要使frame4从西到东横跨整个空间(如图所示),请使用

frame4.grid(row=2, column=0, sticky='WE', padx=5, pady=5, columnspan=3)
frame4.grid_columnconfigure(0, weight=1)
Button(frame4, text=' Done ', command=done).grid(
    row=0, column=0, padx=7, pady=2, sticky='E')
Button(frame4, text='Clear', command=clear).grid(
    row=0, column=1, padx=7, pady=2, sticky='E')

你真的想要两个窗口吗?因为你使用的是那些框架,你可以使用pack,这可能会使事情变得更简单。您是否对该解决方案感兴趣,还是专门询问如何解决网格问题?ie:问题是我如何得到我想要的布局,还是我在网格上做错了什么?@Ericleveil,。。它位于顶层窗口。我还没有发布完整的代码,它只是即时通讯的框架developing@BryanOakley,.. 首先,如果我的问题不清楚,我很抱歉。这只是顶级窗口的开始,我将根据需要添加一些其他小部件。所以我认为使用网格是一个更好的选择。此外,我还想知道如何使用网格获得我想要的布局。另外,如果您遇到错误或奇怪的代码行,请不要使用框架,那么我如何将中间的按钮“选择”按钮和“取消选择”按钮一个放在另一个按钮的下方,以及现在的两个列表框之间。将底部的按钮更改为sticky=E'有效。实际上,我没有尝试使用columnspan=3`作为底部frame@arvindh:如果您将列表框放在第1行,行跨度为4,中间按钮放在第2行和第3行?非常感谢您对每一帧的详细解释
frame4 = Frame(window)
frame4.grid(row=2, column=0, sticky=E, padx=5, pady=5, columnspan=3)
Button(frame4, text=' Done ', command=done).grid(row=0, column=0, padx=7 ,pady=2, sticky=E)
Button(frame4, text='Clear', command=clear).grid(row=0,column=1, padx=7,pady=2, sticky=E)
frame4 = Frame(window)
frame4.grid(row=2, column=0, sticky='E', padx=5, pady=5, columnspan=3)
frame4.grid(row=2, column=0, sticky='WE', padx=5, pady=5, columnspan=3)
frame4.grid_columnconfigure(0, weight=1)
Button(frame4, text=' Done ', command=done).grid(
    row=0, column=0, padx=7, pady=2, sticky='E')
Button(frame4, text='Clear', command=clear).grid(
    row=0, column=1, padx=7, pady=2, sticky='E')
from Tkinter import *

def toplevelwin():
    def clear(): return
    select = unselect = done = enter = clear
    window = Toplevel()

    frame0 = Frame(window)
    frame0.grid(row=0, column=0, sticky='WE', padx=5, pady=5, columnspan=3)
    frame0.grid_columnconfigure(0, weight=1)
    lblentry = Label(frame0, text="Entry Box:")
    lblentry.grid(row=0, column=0, sticky='W')
    entrybx = Entry(frame0)
    entrybx.grid(row=1, column=0, sticky='NSEW', columnspan=2)
    entrybt = Button(frame0, text=' Enter ', command=enter)
    entrybt.grid(row=1, column=2, sticky='NW', padx=3)

    frame1 = Frame(window)
    frame1.grid(row=1, column=0, sticky='EW', padx=5, pady=5)
    lblshow_lst = Label(frame1, text="List Box 1:")
    lblshow_lst.grid(row=0, sticky='W')
    show_lst = Listbox(frame1)
    show_lst.grid(row=1, sticky='W')

    frame2 = Frame(window)
    frame2.grid(row=1, column=1, sticky='W')
    selbtn = Button(frame2, text='Select', command=select)
    selbtn.grid(row=0, padx=5, sticky='EW')
    uselbtn = Button(frame2, text='Unselect', command=unselect)
    uselbtn.grid(row=1, padx=5, sticky='EW')

    frame3 = Frame(window)
    frame3.grid(row=1, column=2, sticky='W', padx=5, pady=5)
    lblsel_lst = Label(frame3, text="List Box 2:")
    lblsel_lst.grid(row=0, sticky='W')
    sel_lst = Listbox(frame3)
    sel_lst.grid(row=1, column=0, sticky='W')

    frame4 = Frame(window)
    frame4.grid(row=2, column=0, sticky='WE', padx=5, pady=5, columnspan=3)
    frame4.grid_columnconfigure(0, weight=1)
    Button(frame4, text=' Done ', command=done).grid(
        row=0, column=0, padx=7, pady=2, sticky='E')
    Button(frame4, text='Clear', command=clear).grid(
        row=0, column=1, padx=7, pady=2, sticky='E')

    window.wait_window(window)


root = Tk()
toplevelwin()
root.mainloop()