Python 如何使用grid_rowconfigure&;制作多列表框;网格配置

Python 如何使用grid_rowconfigure&;制作多列表框;网格配置,python,tkinter,Python,Tkinter,我想使用grid\u columnconfigure和grid\u rowconfigure制作一个多列表框。我有以下代码,当我最大化窗口时,它不起作用,因为我不知道如何在Multilistbox中设置columnconfigure和rowconfigure 当我最大化窗口时,我的代码是这样工作的: 当我将窗口最大化时,我的期望如下: 我的代码在这里: from Tkinter import * class MultiListbox(Frame): def __init__(self

我想使用grid\u columnconfigure和grid\u rowconfigure制作一个多列表框。我有以下代码,当我最大化窗口时,它不起作用,因为我不知道如何在Multilistbox中设置columnconfigure和rowconfigure

当我最大化窗口时,我的代码是这样工作的:

当我将窗口最大化时,我的期望如下: 我的代码在这里:

from Tkinter import *

class MultiListbox(Frame):
    def __init__(self, master, lists):
        Frame.__init__(self, master)
        self.lists = []
        Label(self,text="Product Name",borderwidth=1,
              relief=RAISED).grid(row=0,column=0,columnspan=6,sticky=N + S + E + W)
        Label(self,text="Product Name",borderwidth=1,
              relief=RAISED).grid(row=1,column=0,columnspan=1,sticky=N + S + E + W)
        Label(self,text="Product Name",borderwidth=1,
              relief=RAISED).grid(row=1,column=1,columnspan=3,sticky=N + S + E + W)
        Label(self,text="Product Name",borderwidth=1,
              relief=RAISED).grid(row=1,column=4,columnspan=2,sticky=N + S + E + W)
        for num, (l, w) in enumerate(lists):
            frame = Frame(self)
            frame.grid(row=2,column=num)
            Label(frame, text=l, borderwidth=1, relief=RAISED).grid(row=0,column=0,sticky=N + S + E + W)
            lb = Listbox(frame, width=w, borderwidth=0, selectborderwidth=0,
                         relief=FLAT, exportselection=FALSE)
            lb.grid(row=1,column=0)
            self.lists.append(lb)
            lb.bind('<B1-Motion>', lambda e, s=self: s._select(e.y))
            lb.bind('<Button-1>', lambda e, s=self: s._select(e.y))
            lb.bind('<Leave>', lambda e: 'break')
            lb.bind('<B2-Motion>', lambda e, s=self: s._b2motion(e.x, e.y))
            lb.bind('<Button-2>', lambda e, s=self: s._button2(e.x, e.y))
        Label(self, borderwidth=1, relief=RAISED, text=" ").grid(row=0,column=7,sticky=N + S + E + W,rowspan=3)
        sb = Scrollbar(self, orient=VERTICAL)
        sb.grid(row=2,column=7,sticky="ns")
        self.lists[0]['yscrollcommand'] = sb.set

if __name__ == '__main__':
    tk = Tk()
    Label(tk, text='MultiListbox').pack()
    mlb = MultiListbox(tk, (('Quantity', 20), ('Price', 20), ('Quantity', 20), ('Price', 20),('Quantity', 20), ('Price', 20),))
    mlb.pack(expand=YES, fill=BOTH)
    tk.mainloop()
从Tkinter导入*
类MultiListbox(框架):
定义初始化(自、主、列表):
帧。\uuuu初始化(自,主)
self.lists=[]
标签(self,text=“产品名称”,borderwidth=1,
网格(行=0,列=0,列跨度=6,粘性=N+S+E+W)
标签(self,text=“产品名称”,borderwidth=1,
网格(行=1,列=0,列跨度=1,粘性=N+S+E+W)
标签(self,text=“产品名称”,borderwidth=1,
网格(行=1,列=1,列span=3,粘性=N+S+E+W)
标签(self,text=“产品名称”,borderwidth=1,
网格(行=1,列=4,列跨度=2,粘性=N+S+E+W)
对于枚举(列表)中的num(l,w):
帧=帧(自身)
frame.grid(行=2,列=num)
标签(边框,文本=l,边框宽度=1,浮雕=凸起)。网格(行=0,列=0,粘性=N+S+E+W)
lb=列表框(边框,宽度=w,边框宽度=0,选择边框宽度=0,
浮雕=平坦,导出选择=假)
lb.grid(行=1,列=0)
self.lists.append(lb)
lb.bind(“”,λe,s=self:s.(选择(e.y))
lb.bind(“”,λe,s=self:s.(选择(e.y))
lb.bind('',lambda e:'断裂')
lb.bind(“”,λe,s=自:s.b2;运动(e.x,e.y))
lb.bind(“”,λe,s=自身:s._按钮2(e.x,e.y))
标签(self,borderwidth=1,relief=凸起,text=”“).grid(行=0,列=7,粘性=N+S+E+W,行跨度=3)
sb=滚动条(自身,方向=垂直)
sb.网格(行=2,列=7,sticky=“ns”)
self.lists[0]['yscrollcommand']=sb.set
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
tk=tk()
标签(tk,text='MultiListbox').pack()
mlb=多列表框(tk,('Quantity',20),('Price',20),('Quantity',20),('Price',20),('Quantity',20),('Price',20),)
mlb.pack(扩展=是,填充=两者)
tk.mainloop()

您所说的“我不知道如何在Multilistbox中设置columnconfigure和rowconfigure”是什么意思?为什么您不知道?显然,您正在其他地方使用rowconfigure和columnconfigure。为什么在MultiListbox中执行此操作有什么不同?另外,您是否只询问MultiListbox?如果是这样的话,您应该从示例中删除其他代码,这样我们就可以关注它。我正在尝试设置rowconfigure和columnconfigure,但它不能正常工作。我需要您的帮助。“正在尝试设置
行配置
列配置
”:我没有看到
行配置
列配置
。您正在使用
mlb.pack(…
因此
grid
configure也没有帮助。@stovfl:OP在MultiListbox中使用
grid
,因此需要调用
rowconfigure
columnconfigure
。出于好奇,这些屏幕截图是否准确地表示了您想要的内容?第一个
,看起来很奇怪>产品名称
仅超过一列,然后下一列超过三列,然后下一列超过两列。