Слишком маленькое окно - PullRequest
1 голос
/ 29 января 2012

Вот код:

from Tkinter import *

def main():
    w1 = Tk()
    w1["height"] = 400;
    w1["width"] = 500;
    w1.title("Gui")
    f1 = Frame(w1)
    f1.grid_propagate()
    f1["height"] = w1["height"];
    f1["width"] = w1["width"];
    f1.pack()
    p1 = Button(f1)
    p1["borderwidth"] = 6
    p1["text"] = "esci"
    p1["background"] = "red"
    p1["command"] = f1.quit
    p1.pack()
    w1.mainloop()
main()

Я дал w1 и f1 (окно и рамка) размер 500x400, но появляется слишком маленькое окно: оно слишком маленькое, я быскажем 200x100, но я не знаю ... почему это происходит?

Ответы [ 2 ]

1 голос
/ 29 января 2012

Это так мало, потому что окна tkinter по умолчанию "сжимаются". Это называется распространением геометрии, и кажется, что вы, возможно, уже знакомы с ним, потому что вы вызываете grid_propagate - хотя, фактически, он ничего не делает и не использует то, что возвращает.

На самом деле в вашем коде есть две проблемы. Во-первых, вы вызываете f1.grid_propagate(), но вы используете pack для размещения виджетов в f1, поэтому вам нужно вместо этого вызвать f1.pack_propagate. Во-вторых, вам нужно передать флаг False, чтобы фактически отключить распространение. Это предотвратит сжатие f1 до его содержимого.

Во-вторых, вы не выключаете распространение на w1, поэтому оно сжимается, чтобы соответствовать его дочерним элементам. Вам либо нужно позвонить w1.grid_propagate(False), либо вы можете позвонить w1.wm_geometry("500x400"), чтобы попросить, чтобы оконный менеджер установил размер именно на это измерение.

Если вы только изучаете Tkinter, я предлагаю вам не поддаваться искушению отключить распространение. За свою пару десятков лет написания кода в тк я использовал эту функцию, может быть, раз в пару лет. Менеджеры геометрии Tkinter - замечательные инструменты, и вы должны научиться ими пользоваться. Вместо того, чтобы контейнеры управляли своим размером, пусть дочерние элементы будут иметь размер, который вы хотите, чтобы они были, и остальная часть графического интерфейса будет работать нормально.

1 голос
/ 29 января 2012

Вам нужно использовать

f1.pack_propagate(0)

чтобы оно не уменьшалось

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...