Форум программистов, компьютерный форум, киберфорум
Python: Tkinter
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 03.04.2021
Сообщений: 42

Как сделать, чтобы дочернее окно не выходило за границы родительского?

11.04.2021, 10:52. Показов 3848. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Не могу найти информацию о том, как сделать так, чтобы дочернее окно не выходило за границы родительского. Размещалось только в клиентской зоне родительского окна. Заранее спасибо!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.04.2021, 10:52
Ответы с готовыми решениями:

Как сделать, чтобы не выходило за границы
У меня есть блок. если его сделать меньше чем требует содержимое, то текст выходит за границы блока, как сделать, чтобы всё что за блоком...

Как сделать чтобы при нажатии кнопки не выходило еще одно окно?
Здравствуйте! Пожалуйста подскажите при нажатие кнопку далеевыходит ещё одно окно. Как зделать чтобы при нажати не выходила еще одно окно?...

Как найти дочернее окно из родительского
Функция не должна допускать повторного запуска дочернего окна. Если она находит уже созданное дочернее окно, то выводит его на передний...

12
Эксперт Python
1356 / 653 / 207
Регистрация: 23.03.2014
Сообщений: 3,057
11.04.2021, 11:11
katyuhma, а окна на tkinter, верно ?
0
0 / 0 / 0
Регистрация: 03.04.2021
Сообщений: 42
11.04.2021, 11:20  [ТС]
Да, всё верно, tkinter
0
Эксперт Python
1356 / 653 / 207
Регистрация: 23.03.2014
Сообщений: 3,057
11.04.2021, 11:22
https://www.russianlutheran.or... nardo.html
0
0 / 0 / 0
Регистрация: 03.04.2021
Сообщений: 42
11.04.2021, 11:28  [ТС]
Я просматривал это руководство. На свой вопрос я не нашёл там ответ. Но просмотрю ещё раз, возможно я был невнимательным. Спасибо!
0
13 / 10 / 5
Регистрация: 11.10.2019
Сообщений: 290
12.04.2021, 10:36
katyuhma, Вы имели ввиду,что при создании дополнительного окна типа модального он скрывается за родительским? Если это так,то значит вы не указали родителя при создании этого окна.
0
0 / 0 / 0
Регистрация: 03.04.2021
Сообщений: 42
12.04.2021, 11:08  [ТС]
Не совсем так. На одном из скриншотов видно, как дочернее окно находится географически внутри главного окна (родителя). Мне нужно, чтобы это положение оставалось при любом изменении размеров или положения главного окна на экране.
А на втором скриншоте видно, что дочернее окно я могу двигать как угодно по экрану, выходя за границы родителя.
Фрагмент кода ниже.


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from Tkinter import *
import tkMessageBox
 
def SearchParts():
 
    SearchPartsWnd = Toplevel(MainWnd)
    SearchPartsWnd.title('Дочернее окно')
    SearchPartsWnd.wm_attributes('-topmost', 1)
    w = MainWnd.winfo_rootx() # определяем координаты левого верхнего угла главного окна
    h = MainWnd.winfo_rooty() #
    width = MainWnd.winfo_width()   # определяем ширину и высоту клиентской зоны главного окна
    height = MainWnd.winfo_height() #
    a = [width-15, 'x', height-50, '+', w, '+', h] # преобразуем все данные в строковую переменную для .geometry
    SizeWnd = (''.join(str(i) for i in a))             #
    SearchPartsWnd.geometry(SizeWnd) # делаем дочернее окно по размерам родителя
 
 
# *******************************создаём главное окно**********************************************
 
MainWnd = Tk()
MainWnd.title('Главное окно') # название главного окна
MainWnd.geometry('800x500') # первоначальный размер окна
MainWnd.wm_state('zoomed') # разворачиваем окно во весь экран
Миниатюры
Как сделать, чтобы дочернее окно не выходило за границы родительского?   Как сделать, чтобы дочернее окно не выходило за границы родительского?  
0
13 / 10 / 5
Регистрация: 11.10.2019
Сообщений: 290
12.04.2021, 11:18
katyuhma, Ну вроде понял. В первом случае указали родителя для дочернего окна и поэтому находится внутри,не вылезая. А во втором не указывая родительского можем перемещать как угодно,только наверно надо его активировать или указать во флаге чтобы поверх всех окон был.
0
0 / 0 / 0
Регистрация: 03.04.2021
Сообщений: 42
12.04.2021, 11:23  [ТС]
Это выполнение одного кода. Изначально окно открывается так как надо. Но я могу его перетащить из зоны родителя куда угодно, а мне этого не нужно. Мне нужно чтобы дочернее окно нельзя было переместить за пределы родителя.
0
13 / 10 / 5
Регистрация: 11.10.2019
Сообщений: 290
12.04.2021, 11:49
katyuhma, Такое не пробовал. Извиняюсь,значит вопрос не ко мне. Это если окно безрамочное нельзя вообще перетаскивать,но это не то.
0
Костыли любой сложности
201 / 146 / 36
Регистрация: 27.10.2019
Сообщений: 843
12.04.2021, 11:50
katyuhma, типа так
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
from tkinter import *
import tkinter.messagebox as messagebox
SearchPartsWnd=None 
def SearchParts():
    global SearchPartsWnd
    SearchPartsWnd = Toplevel(MainWnd)
    SearchPartsWnd.title('Дочернее окно')
    SearchPartsWnd.wm_attributes('-topmost', 1)
    w = MainWnd.winfo_rootx() # определяем координаты левого верхнего угла главного окна
    h = MainWnd.winfo_rooty() #
    width = MainWnd.winfo_width()   # определяем ширину и высоту клиентской зоны главного окна
    height = MainWnd.winfo_height() #
    a = [width-15, 'x', height-50, '+', w, '+', h] # преобразуем все данные в строковую переменную для .geometry
    SizeWnd = (''.join(str(i) for i in a))             #
    SearchPartsWnd.geometry(SizeWnd) # делаем дочернее окно по размерам родителя
    
    SearchPartsWnd.bind('<Configure>', sub_move)
 
# *******************************создаём главное окно**********************************************
 
 
def main_move(event):
    global SearchPartsWnd
    if pos:
        SearchPartsWnd.geometry("+{0}+{1}".format(pos[0], pos[1]))
pos=[]
def sub_move(event):
    # Set the min values
    min_w = MainWnd.winfo_rootx()
    min_h = MainWnd.winfo_rooty()
    # Set the max values minus the buffer for window border
    max_w = MainWnd.winfo_rootx() + MainWnd.winfo_width() - 15
    max_h = MainWnd.winfo_rooty() + MainWnd.winfo_height() - 35
 
    # Conditional statements to keep sub window inside main
    if event.x < min_w:
        SearchPartsWnd.geometry("+{0}+{1}".format(min_w, event.y))
 
    elif event.y < min_h:
        SearchPartsWnd.geometry("+{0}+{1}".format(event.x, min_h))
 
    elif event.x + event.width > max_w:
        SearchPartsWnd.geometry("+{0}+{1}".format(max_w - event.width, event.y))
 
    elif event.y + event.height > max_h:
        SearchPartsWnd.geometry("+{0}+{1}".format(event.x, max_h - event.height))
 
    global pos
    # Set the current sub window position
    pos = [event.x, event.y]  
 
MainWnd = Tk()
MainWnd.title('Главное окно') # название главного окна
 
MainWnd.bind('<Configure>', main_move)
MainWnd.after(1,SearchParts)
MainWnd.mainloop()
но это действует только для любого положения но не размера
1
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
12.04.2021, 12:42
katyuhma, это называется MDI - multi-document interface, и сейчас уже не в моде. Ну а там уж смотрите, умеет ли ваш Tk в MDI.
0
0 / 0 / 0
Регистрация: 03.04.2021
Сообщений: 42
12.04.2021, 14:56  [ТС]
Спасибо! Вы мне помогли. Ваш код работает. Идею я понял: отслеживать или положение или размер и затем корректировать окно. Я доработаю этот код и, надеюсь, получу то, что хотел.

Добавлено через 11 минут
Спасибо! Вы мне помогли. Ваш код работает. Идею я понял: отслеживать или положение или размер и затем корректировать окно. Я доработаю этот код и, надеюсь, получу то, что хотел.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.04.2021, 14:56
Помогаю со студенческими работами здесь

Как исправить: дочернее окно поверх родительского?
Кнопка на главной форме вызывает второе окно (FullScreenForm) вот так FullScreenForm fullForm = new FullScreenForm(); fullForm.Owner...

Как развернуть дочернее окно на всю область родительского
Программа использует mdi окна. Есть главное окно программы GeneralForm; Есть дочернее окно ParentForm; У дочернего окна свойства...

Как сделать,чтобы при нажатии на кнопку открывалось дочернее окно?
Как сделать,чтобы при нажатии на кнопку открывалось дочернее окно?

Модальные окна. Сделать, чтобы дополнительное окно не выходило за границу главного
по нажатию кнопки в главном окне, главное окно блокируется и появляется дополнительное, чаще всего оно выходит за пределы главного, как...

Как сделать, чтобы производный класс наследовал все операторы от родительского класса и от родительского родительского
Есть 1й базовый класс в кот. определён operator ++ (); //prefix Есть производный от 1го, 2й класс в кот. дополнительно определён operator...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru