簡體   English   中英

如何使同一列上的兩個小部件在 Tkinter 中具有不同的寬度?

[英]How can I make two widgets on the same column have different widths in Tkinter?

我正在嘗試找到一種方法來格式化此 tkinter GUI,以便我可以在同一列中擁有不同寬度的小部件。 我想這樣做,以便每個 label 的兩側都沒有不必要的空白,並且可以直接位於其輸入框旁邊。 我試過縮小列,但這會掩蓋提示。 可能還有另一種我不知道的方式會以視覺上吸引人的方式格式化。 我願意接受任何建議。

這就是它目前的樣子。

import tkinter as tk

responses = ['running', 'reading', 'programming', 'fishing']
prompt_2 = "At what time do you want to do each activity?"

root = tk.Tk()
root.geometry("335x200")
root.title("Schedule Maker")

prompt = tk.Label(
    root,
    text=prompt_2
)
button = tk.Button(
    root,
    text="ENTER",
    width=10,
    height=2
)

button.grid(row=len(responses)+1, column=0)
prompt.grid(row=0, column=0)
prompt['text'] = prompt_2
label0_list = []
label1_list = []
entry0_list = []
entry1_list = []
for w in range(len(responses)):
    label0 = tk.Label(root, text=responses[w] + ":")
    label0.grid(row=w+1, column=0)
    label0_list.append(label0)
    label1 = tk.Label(root, text='to')
    label1.grid(row=w+1, column=2)
    label1_list.append(label1)
    entry0 = tk.Entry(root, width=6)
    entry0.grid(row=w+1, column=1)
    entry0_list.append(entry0)
    entry1 = tk.Entry(root, width=6)
    entry1.grid(row=w+1, column=3)
    entry1_list.append(entry1)


root.mainloop()

tk.Tk()視為可以放入內容的矩形空間 內容由您選擇的幾何管理器管理,例如packgrid 有時人們稱這些矩形空間容器。

框架用於有一個單獨的區域,您可以在其中組織內容,具有不同的設置。 所以框架是 window 中的容器。 您可以在根目錄中使用pack並在框架中使用grid ,而不會出現任何錯誤。

所以我通常做的是將根想象成空間的填充區域,然后在我的腦海中將它分成一些我放置框架的塊。 像這樣:

import tkinter as tk
from tkinter import ttk

root = tk.Tk()

header = tk.Frame(root)
body = tk.Frame(root)
bottom_line = tk.Frame(root)

header.pack(side='top')
body.pack()
bottom_line.pack(side='bottom')

在此之后,我用它所屬的內容填充容器/框架,例如:

#header content
headline = tk.Label(header, text='At what time do you want to do each?')
headline.pack(fill='x')
#body content
first_activity = tk.Label(body,text='running:')
first_from = tk.Entry(body)
first_sep = tk.Label(body, text='to')
first_to = tk.Entry(body)

first_activity.pack(side='left')
first_from.pack(side='left')
first_sep.pack(side='left')
first_to.pack(side='left')
#bottom content
my_button = tk.Button(bottom_line, text='Enter')
my_button.pack(fill='x')

更多詳情【點擊】

PS:如果你真的想使用網格和你的一組環境,你也可以使用prompt.grid(row=0, column=0,columnspan=4) 但它看起來有點不同。

您可以在label0.grid(...)上使用sticky="e"

label0.grid(row=w+1, column=0, sticky="e")

暫無
暫無

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

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