Как изменить количество столбцов Tkinter Python

Я создаю программу с Tkinter, она имеет 6 меток входа. Я с трудом размещаю эти ярлыки в центре страницы. Я не хочу использовать .pack

Как установить количество столбцов в сетке? Кажется, tkinter игнорирует, когда я устанавливаю column = 6, например.

вот мой код:

               ##Input 1 / Input de parametros
            self.PwNomeLabel1 = Label(text = "Cliente:")
            self.PwNomeLabel1["font"] = ("10")
            self.PwNomeLabel1.grid(row=0,column=2,sticky=W)
            self.inputpwtest1 = Entry(borderwidth= 2, validate='key')
            self.inputpwtest1["width"] = 30
            self.inputpwtest1.grid(row=0, column=3)
            ##Input 2
            self.PwNomeLabel2 = Label(text = "Responsavel por Teste:")
            self.PwNomeLabel2["font"] = ("10")
            self.PwNomeLabel2.grid(row=1,column=2,sticky=W)
            self.inputpwtest2 = Entry(borderwidth= 2, validate='key')
            self.inputpwtest2["width"] = 30
            self.inputpwtest2.grid(row=1, column=3)
            ##Input 3
            self.PwNomeLabel3 = Label(text = "Nome do Sistema:")
            self.PwNomeLabel3["font"] = ("10")
            self.PwNomeLabel3.grid(row=2,column=2,sticky=W)
            self.inputpwtest3 = Entry(borderwidth= 2, validate='key')
            self.inputpwtest3["width"] = 30
            self.inputpwtest3.grid(row=2,column=3)
            ##Input 4
            self.PwNomeLabel4 = Label(text = "Ref:")
            self.PwNomeLabel4["font"] = ("10")
            self.PwNomeLabel4.grid(row=3,column=2,sticky=W)
            self.inputpwtest4 = Entry(borderwidth= 2, validate='key')
            self.inputpwtest4["width"] = 30
            self.inputpwtest4.grid(row=3,column=3)
            ##Input 5
            self.PwNomeLabel5 = Label(text = "Data Base:")
            self.PwNomeLabel5["font"] = ("10")
            self.PwNomeLabel5.grid(row=4,column=2,sticky=W)
            self.inputpwtest5 = Entry(borderwidth= 2, validate='key')
            self.inputpwtest5["width"] = 30
            self.inputpwtest5.grid(row=4,column=3)
            ##Input 6
            self.PwNomeLabel6 = Label(text = "Data Teste:")
            self.PwNomeLabel6["font"] = ("10")
            self.PwNomeLabel6.grid(row=5,column=2,sticky=W)
            self.inputpwtest6 = Entry(borderwidth= 2, validate='key')
            self.inputpwtest6["width"] = 30
            self.inputpwtest6.grid(row=5,column=3)

            root = Tk()
            root.title("TEST PLATFORM")
            Application(root)
            root.geometry(񟣆x768')
            root.mainloop()

Таким образом, его результаты:

введите описание изображения здесь

Если я изменю столбцы меток на «4» и «5» для результатов ввода:

введите описание изображения здесь

Как и в случае с отпечатками, кажется, что Tkinter запутался, а сетка осталась неорганизованной

Всего 2 ответа


Как уже упоминалось в комментариях, вам, вероятно, потребуется управлять весом строк / столбцов.

Вот пример, который делает это, в то же время показывая, как вы можете уменьшить свой код, динамически генерируя метки и поля ввода вместо написания текстовой стены для всех них.

import tkinter as tk


root = tk.Tk()
root.geometry(魸x500')
root.title("TEST PLATFORM")
label_list = ['Cliente:', 'Responsavel por Teste:', 'Nome do Sistema:', 'Ref:', 'Data Base:', 'Data Teste:']
entry_list = []

# Row and Column configure to manage weights
root.columnconfigure(0, weight=1)
root.columnconfigure(2, weight=1)
root.rowconfigure(0, weight=1)
root.rowconfigure(2, weight=1)

# Add a frame to hold the rest of the widgets and place that frame in the row/column without a weight.
# This will allow us to center everything that we place in the frame.
frame = tk.Frame(root)
frame.grid(row=1, column=1)

# use a loop to create our widgets.
for ndex, label in enumerate(label_list):
    tk.Label(frame, text=label, font=ཆ').grid(row=ndex, column=0, sticky='w')
    # Store the entry widgets in a list for later use
    entry_list.append(tk.Entry(frame, borderwidth=2, width=30))
    entry_list[-1].grid(row=ndex, column=1)

# Get and print each entry value.
def print_entries():
    for entry in entry_list:
        print(entry.get())


tk.Button(frame, text='Selecionar Arquivo', command=print_entries).grid(row=len(label_list)+1, column=0, columnspan=2)
root.mainloop()

Если столбец пустой (внутри нет виджета), то он не появится.

В следующем примере я поместил рамку в столбец 0 с width=100 , чтобы столбец 1 был «центрирован». У меня также есть параметр weight=1 для 3 столбцов, поэтому он увеличивается таким же образом, когда я расширяю окно.

import tkinter as tk

root = tk.Tk()
for i in range(3):
    root.columnconfigure(i, weight=1)

tk.Frame(root, width=100).grid(row=0, column=0, sticky='w')
# tk.Label(root, text='Left').grid(row=0, column=0, sticky='w')
tk.Label(root, text='Center').grid(row=0, column=1)
tk.Label(root, text='Right').grid(row=0, column=2, sticky='e')

root.mainloop()

Есть идеи?

10000