Получение позиции gtk.StatusIcon в Windows - PullRequest
4 голосов
/ 07 августа 2009

Я помогаю с поддержкой Windows для приложения PyGTK, которое появляется в виде апплета в системном трее, но не так сильно разбирается в GTK + gooey ... ... 1001 *

У нас это так, когда вы щелкаете левой кнопкой мыши по значку systray, окно появляется прямо рядом со значком вашего трея, независимо от того, где находится ваш системный трей - и в Linux это прекрасно работает, используя результаты gtk.StatusIcon.get_geometry() для вычисления размер и положение.

Конечно, документы для gtk.StatusIcon.get_geometry () указывают, что «некоторые платформы не предоставляют эту информацию» - и это включает в себя MS Windows, так как в результате я получаю NoneType.

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

Так есть ли дружественный к Windows способ получить положение значка системного окна, чтобы я мог разместить там свое окно?


Обратите внимание: я уже использую gtk_menu_popup() с gtk_status_icon_position_menu для всплывающего меню, которое работает правильно.

Но я пытаюсь позиционировать это отдельное окно gtk.Window, которое не будет принимать gtk_status_icon_position_menu (потому что это не меню).

Любые другие идеи будут оценены ...

Ответы [ 3 ]

1 голос
/ 08 августа 2009

Gtk предоставляет функцию gtk_status_icon_position_menu, которую можно передать в gtk_menu_popup как GtkPositionFunc. Это, кажется, обеспечивает запрошенную функциональность.

0 голосов
/ 16 июля 2010

Я также ищу ответ на этот вопрос, но нашел кое-что, что могло бы помочь.

Мне кажется, что GTK выясняет, где вызвать PopupMenu из позиции мыши. Каким-то образом выясняется, что кнопка мыши была нажата на StatusIcon. Предположительно, либо из событий мыши, отправленных системой управления окнами, либо из какого-то знания о том, где находится StatusIcon.

Я понял, что GTK должен либо: 1) знать фактическое местоположение StatusIcon, либо 2) получать события из оконной системы при щелчке мышью по StatusIcon. Так что он должен знать информацию.

У меня также есть всплывающее окно, которое я хочу поднять возле StatusIcon, и у меня также есть PopupMenu, который работает нормально. Итак, я попробовал это в pygtk:

x, y, push = gtk.status_icon_position_menu(popup_menu, status_icon)

Я прошел в PopupMenu, чтобы попытаться найти StatusIcon, хотя я не пытаюсь открыть меню. Это позволяет получить позицию рядом с StatusIcon, но странная вещь заключается в том, что он работает только после того, как PopupMenu был запущен один раз.

В любом случае, это немного приблизило меня и могло бы помочь вам или кому-то еще найти полное решение.

0 голосов
/ 09 декабря 2009

Поведение, которое я испытал в окнах с gtk_status_icon_position_menu, состояло в том, что оно порождает окно в том месте, где пользователь щелкнул в statusicon

...