2010-05-23 1 views

답변

0

gtk.Widget의 "window"속성을 사용하여 gtk.gdk.Window과 연결할 수 있습니다. 그런 다음 get_origin() 메서드를 사용하여 화면 좌표를 가져옵니다.

이 좌표는 최상위 창에 대한 것입니다. (나는 틀릴 수도 있지만 아래 코드는이를 지원하는 것 같습니다). get_allocation() 메서드를 사용하여 부모와 관련된 위젯의 좌표를 가져올 수 있습니다.

나는 from here이라는 아이디어가 있습니다. 일부 창 관리자는 창 위치의 초기 설정을 무시합니다. 더 많은 정보를 원하시면 this post을 보길 원하지만 개인적으로 체크 아웃하지는 않았습니다.

또 다른 최상위 창을 만들려고 했습니까? 또는 팝업 창이 있습니까?

#!/usr/bin/env python 
import sys 

import pygtk 
import gtk 

class Base: 
    def __init__(self): 
     self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) 

     self.window.connect("destroy", self.on_destroy) 

     self.box = gtk.VButtonBox() 

     self.buttons = [ 
      gtk.Button("Test 1"), 
      gtk.Button("Test 2"), 
      gtk.Button("Test 3") 
     ] 

     for button in self.buttons: 
      self.box.add(button) 
      button.connect("clicked", self.show_coords) 
      button.show() 

     self.window.add(self.box) 

     self.box.show() 
     self.window.show() 

    def show_coords(self, widget, data=None): 
     print "Window coords:" 
     print self.window.get_window().get_origin() 
     print "Button coords:" 
     print widget.get_allocation() 

    def on_destroy(self, widget, data=None): 
     gtk.main_quit() 

    def main(self): 
     gtk.main() 

if __name__ == "__main__": 
    base = Base() 
    base.main() 
+0

감사합니다.하지만 작동하지 않습니다. 사실, gnomeapplet.Applet "아래에 gtk.window를 배치하고 싶지만"gnomeapplet.Applet "에는 get_window() 메서드가 없습니다. 따라서 어떻게 해야할지 모르겠군요. – darius

+0

흠. 난 단지 더 일반적인 GTK 컨트롤로 작업 했으므로 애플릿의 내부 동작에 대해서는 잘 모르겠다. 이미이 동작을 설명하는 특정 응용 프로그램이나 애플릿이 있습니까? – detly

+0

예, 시계 애플릿입니다. http :// /gnome-panel.sourcearchive.com/documentation/2.30.0/files.html gtk.gdk.WINDOW_TYPE_HINT_DOCK 상수와 함께 set_type_hint()를 사용하려면 calendar-window.c에서와 같이 시도했지만, 윈도우가 패널에 의해 숨겨 짐 – darius