2009-09-04 3 views
5

PyGTK 또는 GTK 또는 다른 프로그래밍 언어로 창을 열어 목록을 가져 오는 방법은 무엇입니까? 우분투에서?목록을 얻는 방법 우분투에서 PyGTK 또는 GTK로 창을 열었습니까?

편집 : 바탕 화면에 목록의 경로를 열어 디렉토리를 얻을 원하는

! the PyGTK reference에서

+0

을 사용하여 읽을 수있는 문서화 명확히 : 모든 노틸러스 창에서 모든 탭에 표시된 디렉토리 목록을 가져 오시겠습니까? – akaihola

답변

9

당신은 아마 libwnck 사용하려면 :

http://library.gnome.org/devel/libwnck/stable/

내가 파이썬 - 그놈 또는 이와 유사한 패키지 파이썬 바인딩이있다 생각합니다.

당신은 GTK + 주회 돌이 실행이되면 다음과 같은 작업을 수행 할 수 있습니다

 
import wnck 
window_list = wnck.screen_get_default().get_windows() 

를 그 목록에서 창에 몇 가지 흥미로운 방법은()이다 get_name() 및 활성화합니다.

버튼을 클릭하면 콘솔에 창 이름이 인쇄됩니다. 그러나 어떤 이유로 버튼을 두 번 클릭해야했습니다. 이것은 처음으로 libwnck을 사용하기 때문에 무언가를 놓친 것 같습니다.

 
import pygtk 
pygtk.require('2.0') 
import gtk, wnck 

class WindowLister: 
    def on_btn_click(self, widget, data=None): 
     window_list = wnck.screen_get_default().get_windows() 
     if len(window_list) == 0: 
      print "No Windows Found" 
     for win in window_list: 
      print win.get_name() 

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

     self.button = gtk.Button("List Windows") 
     self.button.connect("clicked", self.on_btn_click, None) 

     self.window.add(self.button) 
     self.window.show_all() 

    def main(self): 
     gtk.main() 

if __name__ == "__main__": 
    lister = WindowLister() 
    lister.main() 
+1

wnck.screen_get_default(). get_windows() - 빈 목록 반환 :( – john

+0

빠른 테스트에서 전화가 작동하기 전에 gtk + 창을 가져와야했습니다. ( – Sandy

+1

) 간단한 예제 코드를 제공 할 수 있습니다. ? thx – john

2

는 :

gtk.gdk.window_get_toplevels()

gtk.gdk.window_get_toplevels() 기능은 기본 화면에 PyGTK에 알려진 모든 최상위 윈도우의 목록을 반환합니다. 최상위 창은 루트 창의 하위 하위 창 입니다 ( gtk.gdk.get_default_root_window() 기능 참조).

+0

"('UTF8_STRING', 8, 'wnd.py')", 하나의 창만 반환합니다. gedit 창을 세 개 엽니 다. – john

+1

테스트 후 동일한 문제가 발생합니다. 함수가 참조로 작동하지 않았습니다. 그럴 것이라고 제안했다. 지금 당장은 NawaMan이 제안한 wmctrl -l을 대신 사용하는 것이 가장 좋습니다. 그 외에도 제가 생각할 수있는 유일한 것은 X11 모듈을 직접 사용하는 것입니다. –

1

정말 GTK 하나인지 확인하는 방법을 모르겠습니다. 그러나 현재 열려있는 윈도우의 수를 확인하려면 "wmctrl -l"을 시도하십시오. 물론 설치하십시오.

2

명령 줄 출력을 구문 분석하는 것이 일반적으로 가장 좋은 방법이 아니다 :-), 당신은 버전이나 platfrom 다를 수 출력은 변경하지 않는 그 프로그램에 따라 달라집니다. 여기 Xlib를 사용하여 작업을 수행하는 방법이다 :이 목록은 일반적으로 '창'으로 분류하지 않을 창을 포함,하지만 그건 당신이 뭘 하려는지에 대한 문제가되지 않습니다

import Xlib.display 

screen = Xlib.display.Display().screen() 
root_win = screen.root 

window_names = [] 
for window in root_win.query_tree()._data['children']: 
    window_name = window.get_wm_name() 
    window_names.append(window_name) 

print window_names 

참고.

4

이유가 무엇이든, 나는 코멘트를 게시 할 수 없지만 이것을 Sandy의 대답에 대한 부록으로 추가하고 싶습니다.

여기에 콘솔에서 현재 창을 나열 코드의 덩어리는 다음과 같습니다

import pygtk 
pygtk.require('2.0') 
import gtk, wnck 

if __name__ == "__main__": 
    default = wnck.screen_get_default() 

    while gtk.events_pending(): 
     gtk.main_iteration(False) 

    window_list = default.get_windows() 
    if len(window_list) == 0: 
     print "No Windows Found" 
    for win in window_list: 
     if win.is_active(): 
      print '***' + win.get_name() 
     else: 
      print win.get_name() 

감사 샌디!

9

2013에 오신 것을 환영합니다. Wnck을 사용하는 코드와 현재 사용되지 않는 PyGTK 메소드 대신 최신 GObject Introspection 라이브러리가 있습니다., 문서에 관해서는

from gi.repository import Gtk, Wnck 

Gtk.init([]) # necessary only if not using a Gtk.main() loop 
screen = Wnck.Screen.get_default() 
screen.force_update() # recommended per Wnck documentation 

# loop all windows 
for window in screen.get_windows(): 
    print window.get_name() 
    # ... do whatever you want with this window 

# clean up Wnck (saves resources, check documentation) 
window = None 
screen = None 
Wnck.shutdown() 

Libwnck Reference Manual 체크 아웃 : 당신은 또한 my other answer about wnck을 확인 할 수 있습니다. 파이썬에 국한된 것은 아니지만 GObject 인트로 스펙 션을 사용하는 요점은 gir 바인딩 덕분에 모든 언어에서 동일한 API를 사용한다는 것입니다. 또한

, 상자 밖으로 바인딩 모두 wnck 및 해당 gir 우분투 배송,하지만 당신이 그들을 설치해야하는 경우 :

sudo apt-get install libwnck-3-* gir1.2-wnck-3.0 

이 또한 필요하지 않은, libwnck-3-dev를 설치하지만 유용한 설치합니다 DevHelp

+0

이 솔루션은 저에게 효과적 이었지만 허용 된 답변에는 오류가 발생했습니다 'wnck.screen_get_default()'는 없다.이 답변이 다른 답변보다 새로울지라도, 이전 답변은 더 이상 작동하지 않기 때문에 이것이 받아 들여진 대답이어야한다고 나는 생각한다. – Zelphir