Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 13, 2020 19:10:05

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Как найти центр экрана?

oDoDo
Допустим я хочу вывести несколько окон(4) чтобы они не пересекались
Ну таки отлично. Понятно что надо. Решение - делаете окно, а в нем 4 панели, которые очевидно не делайте пересекающимися.

Есть еще такой подход Multiple Document Interface

https://www.tutorialspoint.com/wxpython/wxpython_multiple_document_interface.htm
https://www.tutorialspoint.com/pyqt/pyqt_multiple_document_interface.htm

Там можно управлять стилем размещения документов - каскадом, плиткой, столбиками, вкладками и т.п.

Разделяйте ответственность. В рамках своего приложения делайте что хотите. А как располагать окна решает пользователь с использованием возможностей оконного менеджера операционной системы

. Для никсов вообще характерно раскидать окна по разным десктопам. На работе у нас у большинства 2-4 монитора. Очевидно полезность программной фичи - упаковаться в один монитор просто нулевая.

Специально в программе предусматривать расположение окон не требуется. Оно есть готовое и называется “Window Session Manager” и работает конечно с оконным менеджером а не на уровне отдельных приложений. Располагаете приложения как надо и сохраняете конфигурацию, которой можете в любой момент воспользоваться. Под виндой наверное есть чтото аналогичное.

PEHDOM
ну почемуже, вполне нормальный кейс, когда ГУИ приложение при запуске опрашивает систему на предмет выставленого разрешения.

Ну я то точно не специалист по разработке десктопного гуя. Но мне трудно понять зачем вам разрешение всего монитора. Я запускаю приложение в окошке. Для чего вы будете полное число пикселов использовать??? В играх, ну может быть, чтобы в полноэкранном режиме правильно пускануться. Но насколько помню там просто говоришь - пускать на весь экран, остальное на себя библиотека берет обычно.



Отредактировано doza_and (Июнь 13, 2020 19:15:46)

Офлайн

#2 Июнь 14, 2020 12:26:34

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Как найти центр экрана?

doza_and
Но мне трудно понять зачем вам разрешение всего монитора.
ну самый банальный случай: при закрытии программа запоминает размер окна, и его положение, а при следующем запуске, окно окрываеться ровно того же размера ровно в том же месте. А разрешение монитора мне нужно чтобы проверить не изменилось ли оно с тех пор. Потому что если изменилось в меньшую сторону то возможен ариант, что если окно откроеться того же размера ровно в том же месте, то оно или частично выйдет за пределы видимой пользователю области, или полностью.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Июнь 14, 2020 12:27:09)

Офлайн

#3 Июнь 15, 2020 10:25:15

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Как найти центр экрана?

PEHDOM
при закрытии программа запоминает размер окна, и его положение
Ну вот как раз в этом банальном случае вопрос элементарно решается настройками оконного менеджера, как я собственно и писал выше.

Те вы пытаетесь решить в приложении совершенно не его задачи. Размещение окон на десктопе, задача оконного менеджера а не отдельных приложений.



Офлайн

#4 Июнь 15, 2020 13:40:20

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Как найти центр экрана?

doza_and
Те вы пытаетесь решить в приложении совершенно не его задачи. Размещение окон на десктопе, задача оконного менеджера а не отдельных приложений.

я чтото сомневаюсь что оконный менеджер это все “могет”. Или приведите пример, например на py(Side\Qt)/tkinter/wx из серии:ГУИ приложение с одной кнопкой “закрыть”, пользователь може перещасть или произвольно менять положение приложения. При первом запуске оно располагаеться ровно по центру экрана. При закрытии оно запоминает положение и размер, и при следующем запуске восстанавливает. если после восстановления окно частично или полностью не видно пользователю/не помещаеться на экране, оно должно сместиться или изменить размер чтобы полностью помещаться на рабочем столе.
Причем “силами саомго оконного менеджера”, не получая размер рабочего стола/разрешение монитора.
Желательно чтобы одинаково работало хотябы под вендой и линуксами.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Июнь 15, 2020 13:44:17)

Офлайн

#5 Июнь 15, 2020 15:48:16

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Как найти центр экрана?

doza_and на сколько знаю линуксовы де умеют запаминать положение окна (ну хотя бы вспомните такую фишку как сохранить сессию) учитывая что они написаны на qt, gtk итд то …



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Июнь 15, 2020 15:55:27)

Офлайн

#6 Июнь 16, 2020 10:47:09

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Как найти центр экрана?

PEHDOM
я чтото сомневаюсь что оконный менеджер это все “могет”
Вы совершенно правы. Конечно не все.

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

ТС хочет чтобы его 4 приложения не накладывались. Я пишу что если хотите полностью управлять положением окон то общепринято делать одно MDI приложение а не запускать 4 приложения.

PEHDOM
ГУИ приложение с одной кнопкой “закрыть”,
Технически это сделать не сложно:
 import wx
import json
import os
app = wx.App()
frame = wx.Frame(None, title='Simple application')
nm = "a.json"
if os.path.exists(nm):
    with open(nm,"r") as f:
        pos=json.load(f)
    frame.SetPosition(pos)
else:
    frame.Centre()
def F(evt):
    pos = frame.GetPosition()
    frame.Destroy()
    with open(nm,"w") as f:
        json.dump(list(pos),f)
frame.Bind(wx.EVT_CLOSE,F)
frame.Show()
app.MainLoop()

Абсолютно несложно и получить размер монитора:
 siz = wx.DisplaySize()

Я просто не советую так делать. Поскольку мне часто приходится учавствовать как в приемке так и в сдаче программ, то опишу свою гипотетическу реакцию на ваше ТЗ.

При первом старте окно центрируется? Хмм. Это заставка которая через пару секунд пропадет? Нет? Уберите это пожалуйста.

При повторных запоминает позицию. Ну ок. Окно само пододвигается если не влезло на экран в том виде как его оставил пользователь? НЕ ПОЙДЕТ!!! в таком виде код никогда не приму. Пользователь всегда прав. Если он так разместил значит так тому и быть!!

Дело в том что мы пользуемся десятками если не сотнями программ, ваше очередное творение совершенно не уникум чтобы ему позволять собственное поведение. Нет никакого желания и возможность выучивать для каждой программы ее персональные выкрутасы. Поведение должно быть стандартным, если нет всеми признанного обоснования для изменения стандартного поведения.

Небольшая притча о стандартности (случай из жизни). Многооконное приложение. Пользователь пришел и говорит, я этим окном пользуюсь постоянно. Сделайте мне галочку в настройках окно всегда сверху других окон. Ок! Не проблема.

Через 3 дня он приходит и говорит, ваша галочка сломалась и не работает, криворукие программеры!!
Починили быстро. Он за три дня вообще для всех окон приложения поставил галочку всегда сверху!! :)

Нестандартное поведение полезно. Но надо знать меру.




Отредактировано doza_and (Июнь 16, 2020 10:47:37)

Офлайн

#7 Июнь 16, 2020 12:34:11

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Как найти центр экрана?

doza_and
Технически это сделать не сложно:
технически вы не выполнили ТЗ.
doza_and
Окно само пододвигается если не влезло на экран в том виде как его оставил пользователь? НЕ ПОЙДЕТ!!! в таком виде код никогда не приму. Пользователь всегда прав. Если он так разместил значит так тому и быть!!
чушь собачья, допустим пользоветель оставил окно в виде:

а потом вдруг у него поменялся монитор, или ему нужно зайти в safe mоde и там запустить програмуу, и он получает вот такую картинку:

вытащить окошко изза экрана невозможно (конечно можно удалить файл a.json, но это уже не вкомпетенции пользователя, нужно звать еникея или писать фидбек или читать 100500 страрниц мануала) и вы поучаете гневный фидбек, что: “ваша программа гамно, вы как програмист дно, патамушта в сейфмоде ваша программа не запускеццо. и за шо мы вам только деньги платим”(с).
Иногда прям так и пишут

doza_and
Небольшая притча о стандартности (случай из жизни). Многооконное приложение. Пользователь пришел и говорит, я этим окном пользуюсь постоянно. Сделайте мне галочку в настройках окно всегда сверху других окон. Ок! Не проблема.

Через 3 дня он приходит и говорит, ваша галочка сломалась и не работает, криворукие программеры!!
Починили быстро. Он за три дня вообще для всех окон приложения поставил галочку всегда сверху!!
Это, батенька, ваш прокол, предвидение вот таких кейсов и делает програмиста програмистом, а иначе это просто codemonkey, котороый делает работу формально в лоб.
Я понимаю, что у вас есть некий опыт и он отличаеться от моего, разные сферы работы и тд. В каких то случаях ваш подход действительно более подходящий, но в других нужен иной подход.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Июнь 16, 2020 13:52:30)

Офлайн

#8 Июль 30, 2022 23:21:10

y_menya_est_mama
Зарегистрирован: 2022-07-30
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Как найти центр экрана?

 import pyautogui
x, y = pyautogui.size()
print(str(x / 2) + ' ' + str(y / 2) # координаты центра экрана
все просто

Офлайн

#9 Июль 31, 2022 07:24:15

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Как найти центр экрана?

y_menya_est_mama
на самом деле вы используете аутоит (вроде оно так называется) и это работает тока в виндовс … и этот топик уже стар …



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version