簡體   English   中英

Python Tkinter - 設置輸入網格寬度100%

[英]Python Tkinter - Set Entry grid width 100%

當我在網格中創建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()

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

BTW:使用:

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

您將grid()結果分配給self.pathgrid()始終返回None

如果你需要self.path然后做:

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

如果你不需要self.path那么你可以這樣做:

tk.Entry().path.grid()

Entry小部件的寬度由width屬性定義。 它以字符數衡量。 據我所知,沒有本地方法可以使Entry自動調整大小以適應空間。 您可以像這樣設置寬度(默認值為20):

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

如果你真的希望Entry自動增長或縮小,你可以將一個事件綁定到重新計算的窗口大小,並重置Entry的必要寬度,但它會有點難看。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM