PyGTK 또는 GTK 또는 다른 프로그래밍 언어로 창을 열어 목록을 가져 오는 방법은 무엇입니까? 우분투에서?목록을 얻는 방법 우분투에서 PyGTK 또는 GTK로 창을 열었습니까?
편집 : 바탕 화면에 목록의 경로를 열어 디렉토리를 얻을 원하는
PyGTK 또는 GTK 또는 다른 프로그래밍 언어로 창을 열어 목록을 가져 오는 방법은 무엇입니까? 우분투에서?목록을 얻는 방법 우분투에서 PyGTK 또는 GTK로 창을 열었습니까?
편집 : 바탕 화면에 목록의 경로를 열어 디렉토리를 얻을 원하는
당신은 아마 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()
는 :
gtk.gdk.window_get_toplevels()
gtk.gdk.window_get_toplevels()
기능은 기본 화면에 PyGTK에 알려진 모든 최상위 윈도우의 목록을 반환합니다. 최상위 창은 루트 창의 하위 하위 창 입니다 (gtk.gdk.get_default_root_window()
기능 참조).
"('UTF8_STRING', 8, 'wnd.py')", 하나의 창만 반환합니다. gedit 창을 세 개 엽니 다. – john
테스트 후 동일한 문제가 발생합니다. 함수가 참조로 작동하지 않았습니다. 그럴 것이라고 제안했다. 지금 당장은 NawaMan이 제안한 wmctrl -l을 대신 사용하는 것이 가장 좋습니다. 그 외에도 제가 생각할 수있는 유일한 것은 X11 모듈을 직접 사용하는 것입니다. –
정말 GTK 하나인지 확인하는 방법을 모르겠습니다. 그러나 현재 열려있는 윈도우의 수를 확인하려면 "wmctrl -l"을 시도하십시오. 물론 설치하십시오.
명령 줄 출력을 구문 분석하는 것이 일반적으로 가장 좋은 방법이 아니다 :-), 당신은 버전이나 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
참고.
이유가 무엇이든, 나는 코멘트를 게시 할 수 없지만 이것을 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()
감사 샌디!
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
이 솔루션은 저에게 효과적 이었지만 허용 된 답변에는 오류가 발생했습니다 'wnck.screen_get_default()'는 없다.이 답변이 다른 답변보다 새로울지라도, 이전 답변은 더 이상 작동하지 않기 때문에 이것이 받아 들여진 대답이어야한다고 나는 생각한다. – Zelphir
을 사용하여 읽을 수있는 문서화 명확히 : 모든 노틸러스 창에서 모든 탭에 표시된 디렉토리 목록을 가져 오시겠습니까? – akaihola