Nicelogin
@Nicelogin
Привет!

Как в Tkinter отцентровать окно внутри другого окна?

У меня есть некое окно с кнопками. Одна из кнопок открывает еще одно окно. Как можно сделать так, чтобы второе окно, которое открывается по кнопке, открывалось по центру первого окна? Или хотя бы не выходило за его пределы.
В гугле не нашел ничего похожего кроме того как в целом можно отцентровать окно, но как связать окна между собой не ясно. Буквально вчера начал изучать python по этому пока не могу даже наводящими поисковыми запросами вырулить в нужное направление.
  • Вопрос задан
  • 596 просмотров
Пригласить эксперта
Ответы на вопрос 2
Nicelogin
@Nicelogin Автор вопроса
Привет!
Решил вот таким способом, отцентровав окна по отдельности. В целом удовлетворительно, так как окна открываются не абы где а примерно по центру. Так как первое окно больше, а второе меньше создается ощущение что они связаны и второе открывается внутри первого. Но это не совсем решение так как если изменить настройки открытия первого второе не потянется за ним и не будет открываться внутри.
w = root.winfo_screenwidth()
h = root.winfo_screenheight()
w = w//2 # середина экрана
h = h//2 
w = w - 200 # смещение от середины
h = h - 200
root.geometry('400x400+{}+{}'.format(w, h))
Ответ написан
@aGGre55or
OMG
Окно "win" размером 350x350 центрируется относительно окна "root".
Нам надо вычислить его координаты:

x = root.winfo_x() + ((root.winfo_width() / 2) - 175)
y = root.winfo_y() + ((root.winfo_height() / 2) - 175)

Выводим с этими координатами:
win.geometry('%dx%d+%d+%d' % (350, 350, x, y))

175 - это смещение, получается как 350/2, для других размеров окна считайте сами.
И будет ваше окно "win" везде таскаться за "root" и выводиться по центру окна "root".
Центрирование окна "root" по центру экрана - аналогично, от ширины и высоты экрана.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы