2017-02-19 55 views
0

сказать, что у меня есть окно tkinter с двумя отдельными кадрами, которые я хочу заполнить информацией, моя единственная проблема заключается в том, что размер фрейма устанавливается динамически. мой размер окна 500 на 500, и я хочу, чтобы верхний кадр шел от 0,0 до 250 250. а нижняя - от 0,250 до 500,500. Я думаю, вы могли бы получить представление в данный моментКак установить фиксированные размеры рамки в python tkinter

вот мой код до сих пор:

def main_game(username,password,new_u,old_u): 
    Tk_window_center(500,500) 
    root.resizable(width=False, height=False) 
    ## 
    if new_u =="": 
     pass 
    else: 
     new_u.pack_forget() 
    if old_u =="": 
     pass 
    else: 
     old_u.pack_forget() 
    ## 
    output_window_frame=Frame(root, bg="black") 
    user_terminal_frame=Frame(root) 
    ## 
    usr_output=Label(output_window_frame) 
    user_inp=Entry(user_terminal_frame) 
    user_term=Label(user_terminal_frame) 
    ## 
    output_window_frame.grid(row=0,column=0,rowspan=3,columnspan=3, sticky="NSEW") 

    user_terminal_frame.grid(row=4,column=0,rowspan=3,columnspan=3, sticky="NSEW") 
    user_inp.pack(side="top", fill="x") 
    user_term.pack(side="bottom", fill="x") 

P.S. new_u и old_u являются предыдущими кадрами, которые активируются при запуске

+0

Зачем вам нужны точные размеры! Обычно это лучше всего подходит для гии, чтобы сжиматься или расти, чтобы соответствовать его содержимому. Что особенного около 500 пикселей? –

+0

@BryanOakley im делает игру внутри фиксированного экрана, и я не могу изменить его динамически. это разрушит «иммерсию», пытающуюся создать –

+0

Если у вас верхний и нижний рамки, почему нижний кадр в строке 4, а не строка 1? –

ответ

0

Поскольку вы используете grid, вам нужно дать каждой строке такой же ненулевой вес, чтобы каждая строка расширялась, чтобы заполнить половину ее родителя. Вы ставите одно окно в строке 4, который в порядке, но так как у вас есть только два элемента в окне он вводит в заблуждение, поэтому я рекомендую использовать строки 0 и 1.

root.grid_rowconfigure(0, weight=1) 
root.grid_rowconfigure(4, weight=1) 

output_window_frame.grid(row=0,column=0,rowspan=3,columnspan=3, sticky="NSEW") 

user_terminal_frame.grid(row=1,column=0,rowspan=3,columnspan=3, sticky="NSEW") 

Конечно, если вы положили другие вещи в ряды 1, 2 или 3, тогда ваши кадры не будут иметь высоту 250 пикселей.

Есть и другие способы достижения одного и того же. Вы можете использовать pack и установить параметры пакета fill на "both" и expand на True. Или вы можете использовать место и поместить верхнее окно в координату x/y 0,0 с относительной шириной 1,0 и относительной высотой .5, а затем снова установить другую на 250 250 с относительной шириной 1,0 и относительная высота .5