Python Tkinter - 设置输入框的网格宽度为100%。

11
当我在网格中创建 button + entry + button 时,entry 被居中了,但并没有完全填满列。我该如何通过 Entry 来填充整列?

enter image description here

# Python 3.4.1

import io
import requests
import tkinter as tk
from PIL import Image, ImageTk

def get_image():
    im = requests.get('http://lorempixel.com/' + str(random.randint(300, 400)) + '/' + str(random.randint(70, 120)) + '/')
    return Image.open(io.BytesIO(im.content))


class ImageSelect(tk.Frame):
    def __init__(self, master=None):
        tk.Frame.__init__(self, master)

        master.resizable(width=False, height=False)
        master.title('Image manager')
        master.iconify = False
        master.deiconify = False
        master.grab_set = True

        image = ImageTk.PhotoImage(get_image())
        self.image = tk.Label(image=image)
        self.image.image = image
        self.image.grid(row=0, columnspan=3)


        self.reload = tk.Button(text='Reload').grid(row=1, column=0, sticky='w')
        self.path = tk.Entry().grid(row=1, column=1, sticky='we')
        self.submit = tk.Button(text='Submit').grid(row=1, column=2, sticky='e')

root = tk.Tk()
app = ImageSelect(master=root)
app.mainloop()
2个回答

30

使用 grid(),您可以在 Entry 的父级上使用 grid_columnconfigure()

import tkinter as tk

root = tk.Tk()

tk.Entry(root).grid(sticky='we')
root.grid_columnconfigure(0, weight=1)

root.mainloop()
使用pack()时,可以使用fill='x'
import tkinter as tk

root = tk.Tk()

tk.Entry(root).pack(fill='x')

root.mainloop()

顺便说一句:使用:

self.path = tk.Entry().grid()

你将grid()的结果赋值给了self.path,但是grid()总是返回None

如果你需要self.path,请使用以下代码:

self.path = tk.Entry()
self.path.grid()

如果您不需要self.path,那么您可以这样做:

tk.Entry().path.grid()

1
我设置了 master.grid_columnconfigure(1, weight=1),它起作用了。谢谢。 - Patrick Burns
如何为盒子添加填充?输入框和按钮紧贴在角落处。 - Codador
1
@Codador 在两侧使用相同的填充 .grid(..., padx=10) 或在左右使用不同的填充 .grid(..., padx=(10, 5) )pady 同理。请参考 effbot.org: Grid。顺便说一句:如果您不想粘贴到角落/边缘,也可以尝试删除 sticky='we' - furas

4

一个 Entry 组件的宽度由 width 属性定义。它的计量单位是字符数。据我所知,没有本地方法可以使 Entry 自动调整大小以适应空间。您可以像这样设置宽度(默认值为20):

self.path = tk.Entry(width=28).grid(row=1, column=1, sticky='we')

如果您真的希望Entry自动增长或缩小,您可以绑定一个事件到窗口调整大小,重新计算和重置Entry所需的宽度,但这会有点丑陋。


嗯...我收到了这个错误 _tkinter.TclError: bad option "-width": must be -column, -columnspan, -in, -ipadx, -ipady, -padx, -pady, -row, -rowspan, or -sticky - Patrick Burns
它应该是 Entry(width=28) - furas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接