2009-08-07 6 views
4

J'aide avec le support de Windows pour une application PyGTK qui apparaît comme une applet de barre d'état système, mais je ne suis pas si forte sur le GTK + gluant ... des trucsObtenir la position du gtk.StatusIcon sur Windows

Nous avons Lorsque vous cliquez sur l'icône de la barre des tâches, la fenêtre apparaît à côté de l'icône de votre barre d'état, et sur Linux, cela fonctionne très bien, en utilisant les résultats de gtk.StatusIcon.get_geometry() pour calculer la taille et la position.

Bien sûr, les documents pour gtk.StatusIcon.get_geometry() soulignent que "certaines plates-formes ne fournissent pas cette information" - et cela inclut MS Windows, car je reçois NoneType comme résultat.

Je peux faire une supposition et positionner la fenêtre dans le coin inférieur droit de l'écran, à 30 pixels du bas, car cela interceptera la majorité des utilisateurs de Windows qui n'ont pas déplacé la barre des tâches. Mais pour ceux qui ont, tout semble faux.

Y a-t-il une façon conviviale pour Windows d'obtenir la position de l'icône de la barre des tâches afin que je puisse y placer ma fenêtre?


S'il vous plaît noter: J'utilise déjà gtk_menu_popup() avec gtk_status_icon_position_menu pour un menu contextuel qui fonctionne correctement.

Mais ce que j'essaye de positionner est une gtk.Window distincte, qui n'acceptera pas gtk_status_icon_position_menu (parce que ce n'est pas un menu).

Toutes les autres idées seraient appréciées ...

Répondre

1

Gtk offre une fonction gtk_status_icon_position_menu qui peut être passé dans gtk_menu_popup comme GtkPositionFunc. Cela semble fournir la fonctionnalité demandée.

+0

gtk_status_icon_position_menu semble approprié pour un menu contextuel, mais cela fonctionnera-t-il pour un enfant gtk.Window?Nous utilisons actuellement gtk.Windows.move (x, y) pour le positionner manuellement après le calcul. Si je suppose que la plupart des systray Windoze se trouvent en bas à droite de l'écran (une mauvaise hypothèse, je sais), réglez la gravité sur Sud-Est et affichez-la, puis elle s'affiche sous la barre des tâches. Idéalement, si je pouvais détecter où se trouve réellement le fichier systray/gtk.StatusIcon sur Windows, alors je pourrais positionner la fenêtre par rapport à cela. Ou peut-être y a-t-il encore un autre meilleur moyen? – ewall

0

Le comportement i connu dans les fenêtres avec gtk_status_icon_position_menu était qu'il engendre la fenêtre à l'endroit l'utilisateur a cliqué dans le statusicon

0

Je cherche aussi une réponse à cela, mais ont trouvé quelque chose qui pourrait aider.

Il me semble que GTK trouve où faire apparaître le PopupMenu à partir de la position de la souris. D'une certaine manière, il apparaît que le bouton de la souris a été cliqué sur StatusIcon. Vraisemblablement soit à partir d'événements de souris envoyés par le système de fenêtrage, soit à partir d'une sorte de connaissance de l'emplacement de StatusIcon. Ce que j'obtiens est que GTK doit soit 1) connaître l'emplacement actuel de StatusIcon ou 2) obtenir des événements du système de fenêtrage lorsque la souris est cliquée sur le StatusIcon. Donc, il doit connaître l'information.

J'ai aussi une fenêtre popup que je veux lever près de StatusIcon et j'ai aussi un PopupMenu qui marche bien. J'ai donc essayé cela, dans pygtk:

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

je suis passé dans le PopupMenu pour essayer de trouver le StatusIcon même si je ne suis pas d'essayer le menu au popup. Cela obtient une position près de StatusIcon, mais la chose étrange est que cela ne fonctionne qu'après que PopupMenu a été surgi une fois.

Quoi qu'il en soit, cela m'a un peu rapproché et pourrait vous aider ou aider quelqu'un d'autre à trouver une solution complète.

Questions connexes