【问题标题】:Python Tkinter - Set Entry grid width 100%Python Tkinter - 设置条目网格宽度 100%
【发布时间】:2014-07-24 23:09:40
【问题描述】:

当我在网格中创建 button + entry + button 时,entry 居中但未完全填满列。我如何通过Entry 填写该列?

# 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()

【问题讨论】:

    标签: python tkinter


    【解决方案1】:

    使用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()
    

    【讨论】:

    • 我设置了master.grid_columnconfigure(1, weight=1),它可以工作。谢谢。
    • 如何将 paddin 添加到框中?入口和按钮粘在角落
    • @Codador 两侧相同的焊盘.grid(..., padx=10) 或左右不同的焊盘.grid(..., padx=(10, 5) )。 pady 与此相同,请参阅 effbot.org:Grid BTW:如果您不想粘在角落/侧面,也可以尝试删除 sticky='we'。
    【解决方案2】:

    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
    • 应该是Entry(width=28)
    猜你喜欢
    • 2020-06-10
    • 2016-02-10
    • 1970-01-01
    • 2015-04-27
    • 2020-08-11
    • 2015-02-21
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多