하나의 킬 패널을 제외한 모든 창을 최소화하는 Python 스크립트

하나의 킬 패널을 제외한 모든 창을 최소화하는 Python 스크립트

투어 가이드와 함께 갔어요여기 다음 Python 스크립트를 사용하여 현재 창을 제외한 모든 창을 최소화하는 키보드 단축키를 만듭니다.

#!/usr/bin/env python
import wnck
import gtk

screen = wnck.screen_get_default()

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

windows = screen.get_windows()
active = screen.get_active_window()

for w in windows:
    if not w == active:
            w.minimize()

작동하지만 패널을 죽이고 데스크탑을 거의 사용할 수 없게 만듭니다.

패널을 종료하지 않고 작동하도록 스크립트를 어떻게 수정해야 합니까?

저는 Ubuntu 16.04.3, Xfce 버전 4.12를 사용하고 있습니다.

답변1

Gtk 항목을 사용하지 않습니다. 잔해를 제거합시다.

#!/usr/bin/env python
import wnck
screen = wnck.screen_get_default()
windows = screen.get_windows()
active = screen.get_active_window()

for w in windows:
    if not w == active:
            w.minimize()

w == active제외 기간 외부에서 조건을 사용할 수 있습니다. 문서를 확인 pydoc wnck하거나(불행히도 자동으로 생성된 메서드 목록에 지나지 않음) 대화형 탐색을 수행하여 Windows에서 사용할 수 있는 메서드를 확인하세요.

$ python
Python 2.7.9 (default, Jun 29 2016, 13:08:31) 
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import wnck
>>> screen = wnck.screen_get_default()
>>> active = screen.get_active_window()
>>> dir(active)
['__class__', '__copy__', '__deepcopy__', '__delattr__', '__dict__', '__doc__', '__eq__', '__format__', '__gdoc__', '__ge__', '__getattribute__', '__gobject_init__', '__grefcount__', '__gt__', '__gtype__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'activate', 'activate_transient', 'chain', 'close', 'connect', 'connect_after', 'connect_object', 'connect_object_after', 'disconnect', 'disconnect_by_func', 'emit', 'emit_stop_by_name', 'freeze_notify', 'get_actions', 'get_application', 'get_class_group', 'get_client_window_geometry', 'get_data', 'get_geometry', 'get_group_leader', 'get_icon', 'get_icon_is_fallback', 'get_icon_name', 'get_mini_icon', 'get_name', 'get_pid', 'get_properties', 'get_property', 'get_screen', 'get_session_id', 'get_session_id_utf8', 'get_sort_order', 'get_state', 'get_transient', 'get_window_type', 'get_workspace', 'get_xid', 'handler_block', 'handler_block_by_func', 'handler_disconnect', 'handler_is_connected', 'handler_unblock', 'handler_unblock_by_func', 'has_icon_name', 'has_name', 'is_above', 'is_active', 'is_below', 'is_fullscreen', 'is_in_viewport', 'is_maximized', 'is_maximized_horizontally', 'is_maximized_vertically', 'is_minimized', 'is_most_recently_activated', 'is_on_workspace', 'is_pinned', 'is_shaded', 'is_skip_pager', 'is_skip_tasklist', 'is_sticky', 'is_visible_on_workspace', 'keyboard_move', 'keyboard_size', 'make_above', 'make_below', 'maximize', 'maximize_horizontally', 'maximize_vertically', 'minimize', 'move_to_workspace', 'needs_attention', 'notify', 'or_transient_needs_attention', 'pin', 'props', 'set_data', 'set_fullscreen', 'set_geometry', 'set_icon_geometry', 'set_properties', 'set_property', 'set_skip_pager', 'set_skip_tasklist', 'set_sort_order', 'set_window_type', 'shade', 'stick', 'stop_emission', 'thaw_notify', 'transient_is_most_recently_activated', 'unmake_above', 'unmake_below', 'unmaximize', 'unmaximize_horizontally', 'unmaximize_vertically', 'unminimize', 'unpin', 'unshade', 'unstick', 'weak_ref']
>>> active.get_name()
'pts/16:  ~   python'
>>> active.is_sticky()
False

모든 데스크탑에는 고정 창이 존재합니다. 이는 일반적으로 항상 화면에 표시되어야 하는 데스크탑 환경 위젯이므로 최소화해서는 안 됩니다. 충분하지 않은 경우 이름이나 다른 속성으로 일치를 시도할 수 있습니다.

#!/usr/bin/env python
import wnck
screen = wnck.screen_get_default()
windows = screen.get_windows()
active = screen.get_active_window()

for w in windows:
    if not (w == active or w.is_sticky()):
            w.minimize()

답변2

Ctrl + Alt + d원하는 답변이 아닐 수도 있지만 창 관리자 바로가기를 사용하여 모든 것을 숨긴 다음 를 사용하여 Alt + Tab마지막 활성 보기를 여는 것이 더 쉽지 않을까요? 아니면 두 가지를 모두 수행하는 명령을 만들기 위해 변경하시겠습니까?

아마도이것도울 수있다.

귀하의 질문이 구문에 관한 것이라면... 귀하가 찾고 있는 기능은 가이드의 두 번째 스크립트에 있는 기능인 것 같습니다.

#!/usr/bin/env python
import wnck
import gtk

screen = wnck.screen_get_default()

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

windows = screen.get_windows()
active_app = screen.get_active_window().get_application()

for w in windows:
    if not w.get_application() == active_app:
        w.minimize()

관련 정보