2014-10-22 2 views
0

У меня есть следующий код для моего GUI:Tkinter Python GUI Выравнивание

root = Tk() 
draft = Frame(root) 
draft.grid() 
root.title("test") 
var = StringVar() 
emailLabel = Label(draft, text="E-Mail:") 
emailLabel.grid(row = 0, column = 0) 

email = Entry(draft, justify=LEFT) 
email.grid(row = 0, column = 1) 
email.insert(0, "E-Mail") 

passLabel = Label(draft, text="Pass:") 
passLabel.grid(row = 1, column = 0) 

password = Entry(draft, justify=LEFT, show="*") 
password.grid(row = 1, column = 1) 
password.insert(0, "Password") 

start = Button(draft, text = "Start") 
start.grid(row = 2, column = 0) 

stop = Button(draft, text = "Stop") 
stop.grid(row = 2, column = 1) 

status = Text(draft) 
status.grid(row = 3) 
status.insert(INSERT, "TESTING") 

Однако, это не выстраивались так, как я хочу. Я хочу, чтобы метка и текстовые поля были выровнены влево, а не вправо, а текстовое поле статуса занимало весь размер нижней части (это более или менее журнал).

Вот скриншот: screenshot

ответ

2

Для того, чтобы продолжительность Text виджета над несколькими столбцами, используйте columnspan аргумент:

status.grid(row=3, columnspan=2) 

Кроме того, вы можете использовать параметр sticky в методе grid сделать виджеты занимают как можно больше места. Используйте это в каждом grid вызова:

widget.grid(..., sticky=N+W+E+S) 

Если вы хотите этикетки быть меньше, вы должны пересмотреть ваш макет немного.

(Маленькое примечание:. Он не предложил импортировать * из Tkinter import tkinter as tk является предпочтительным.)

+1

Я согласен, о не любя импорт '*' ... но интересно, что практически __every__ pytk обучающая там делает это ... –

+1

Да, я не знаю, делают ли они это, чтобы избежать всех этих вещей 'tk.Bla', чтобы сделать вещи более читабельными, но наличие ~ 190 имен в пространстве имен модулей не очень помогает: S – TidB

+0

Спасибо! Есть ли способ заставить каждую строку в сетке не принуждаться к составу с рядом над ней? –