tkinter中的grid()是否具有类似于pack()的填充属性?

时间:2018-09-24 02:49:49

标签: python tkinter

我正在尝试填充滚动条以与文本框匹配,我知道如果使用fill属性,则可以使用pack()进行操作,如何使用grid()做到这一点?如果有的话,我试图找到一个等效于fill的属性。

def bannergrabber():
    top = Toplevel()
    top.resizable(0, 0)
    top.title("Website Banner Grabber")
    top.configure(background="black")
    labelframe = LabelFrame(top)
    labelframe.config(bg="black")
    labelframe.grid(row=1, column=0, padx=10)
    labelframe2 = LabelFrame(top)
    labelframe2.config(bg="black")
    labelframe2.grid(row=0, column=0, pady=5, padx=10)
    text = Text(labelframe2)
    text1 = Text(top)
    label2 = Label(labelframe2, text="Website:")
    label2.config(bg="black")
    label2.grid(row=0, pady=5, sticky=W)
    text.config(width=25, height=1, bg="black")
    text.grid(row=0, column=1)
    def bannergrabbercode():
        try:
            sck = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            sck.connect((text.get("1.0", 'end-1c'), 80))
            sck.send(b"HEAD / HTTP/1.0\r\n\r\n")
            data = sck.recv(1024)
            sck.close()
            text1.insert(END, data)
        except socket.error:
            text1.insert(END, "host is not reachable")
    def clear():
        text.delete("1.0", END)
    b = Button(labelframe, text="Enter", bg="black", command=bannergrabbercode)
    b.grid(row=1, column=0, sticky=W)
    c = Button(labelframe, text="Clear", bg="black", command=clear)
    c.grid(row=1, column=1, pady=5, padx=10, stick=W)
    scrollbar = Scrollbar(top)
    scrollbar.grid(row=2, column=1, sticky=W)
    text1.config(width=40, height=10, bg="black")
    text1.grid(row=2, pady=10, sticky=W)
    scrollbar.config(bg="black", command=text1.yview)
    text1.config(yscrollcommand=scrollbar.set)
    top.mainloop()

我花了一些时间来构建这种布局,grid()有时会令人困惑,但由于受限于此,我不想回到使用pack()上。

1 个答案:

答案 0 :(得分:2)

  

tkinter中grid()是否具有像pack()这样的填充属性?

是的,它是sticky属性,它告诉窗口小部件“粘”在分配给它的空间的一侧或多侧。

对于pack的{​​{1}},等效的fill="x"选项为grid(东西向)。对于sticky="ew",当量值为fill="y"(南北)。对于sticky="ns",它是fill="both"sticky="nsew"比pack灵活一点,因为您可以将一个小部件固定在一侧。

  

由于范围有限,我不想再使用pack()。

grid不受限制,只是有所不同。在某些方面,它比pack更好,而在其他方面则更糟。他们俩都有自己的位置。就个人而言,我几乎从未创建过不同时使用两者的GUI。