우분투와 다른 배포판에 표시되는 상태 아이콘을 프로그래밍하는 방법은 무엇입니까? 로컬 아이콘이 올바르게

해당 응용 프로그램은 일부 작업 (여기서는 오디오를 네트워크 스트림에 연결)을 수행하고 이러한 작업이 성공하면 최소화 된 상태로 실행됩니다. 따라서 연결 상태를 표시하려면 상태 아이콘이 필요합니다 (예 : CONNECTED / DISCONNECTED). 아이콘을 클릭 할 때만 응용 프로그램 창이 열리고 추가 옵션에 액세스 할 수 있습니다.

파이썬 2.6과 pyGtk를 사용하면 gtk_status_icon 을 사용하여 이것을 편리하게 깨달았습니다 . 나는 다양한 우분투 버전을 포함하여 가능한 한 많은 배포판에서 실행되도록 응용 프로그램을 작성했습니다. 사용자가 설치 한 후에 만 ​​가능한 종속성을 사용하도록주의를 기울였습니다.

그러나 이제는 미래의 Ubuntu 릴리스에서 gtk_status_icon이 더 이상 지원되지 않을 것이라고 들었습니다. 개발자는 대신 응용 프로그램 표시기를 사용해야합니다. 그렇다면 다음을 확인하는 것이 가장 좋습니다.

  1. 응용 프로그램의 로컬 아이콘이 올바르게 표시됩니다
  2. 응용 프로그램은 계속 실행되어 향후 Ubuntu 릴리스에서 아이콘을 표시합니다.
  3. 이 응용 프로그램은 것 또한 실행하고 다른 환경에서의 아이콘이 표시 표시기 애플릿 , libappindicator파이썬 – appindicator 제공되지 않습니다.

indicator-applet 이 실행되고 있지 않으면 gtk_status_icon에 대한 Application Indicator 폴백 메커니즘이 작동 하지 않습니다. 가져올 appindicator 모듈 이 없으면 Python 인터프리터가 실행되지 않습니다 . 다른 배포판을 위해 다른 버전을 개발해야합니까? 그렇지 않으면 더 나은 방법이 있습니다.

Ubuntu Wiki에 제공된 예제 이외의 ApplicationIndicator 사용 방법에 대한 설명서는 어디서 찾을 수 있습니까 ? 우분투와 비 우분투 배포판에 대해 서로 다른 소스 코드를 프로그래밍하지 않도록 표시기 애플릿이 실행 중인지 확인하기 위해 어떤 명령이 제공됩니까?



답변

나는 여기에 실제로 파이썬-파이 디 네이터 라이브러리에 대한 더 많은 결정이 필요하다고 생각합니다. 존재하는 경우 필요한 모든 대체 사례를 지원합니다. XFCE, KDE 및 이전 그놈을 적절하게 처리합니다. 이 답변에서 수행하는 방법에 대한 좋은 예입니다 .

appindicator 라이브러리는 DBus를 사용하여 응용 프로그램 표시기 렌더링 프로세스가 사용 가능한지 확인합니다. Unity의 경우 또는 indicator-applet이 실행중인 경우입니다. 사용 가능한 경우 해당 메뉴를 사용하고 그렇지 않은 경우 동일한 메뉴에서 GtkStatusIcon을 사용하는 것으로 대체됩니다.

불행히도 라이브러리를 사용할 수없는 경우를 처리하려면 두 코드 경로를 모두 유지해야한다고 생각합니다. 그러나 다른 배포판에서 라이브러리를 얻는 데 도움을 드리겠습니다. 🙂


답변

StackApplet 에서 잘 작동하는 훌륭한 솔루션을 가지고 있습니다. 실제 모듈이 존재하지 않을 때 내부적으로 사용하여 동일한 기능을 제공 하는 기능적으로 동등한 버전의 appindicator모듈을 만들었습니다 gtk.StatusIcon.

그것을 사용하는 것은 간단합니다 :

  1. 다음 파일을 다운로드하여 호출appindicator_replacement.py
  2. 응용 프로그램에 다음을 추가하십시오.

    try:
        import appindicator
    except ImportError:
        import appindicator_replacement as appindicator

그게 다야! 이제 응용 프로그램이 AppIndicators를 지원하거나 지원하지 않고 완벽하게 실행됩니다. 다른 플랫폼 특정 코드가 없다고 가정하면 Windows에서도 실행됩니다.


참고 : 파일은 MIT 라이센스에 따라 릴리스되므로 거의 모든 용도로 사용할 수 있습니다.


답변

두 가지 모두에 대한 코드를 작성해야합니다. 다음과 비슷한 것을 사용하여 Python 코드에 appindicator가 있는지 감지 할 수 있습니다.

have_appindicator = True
try:
    import appindicator
except:
    have_appindicator = False

거기에서 have_appindicator를 사용하여 appindicator 코드 또는 gtk_status_icon 코드를 사용해야하는지 여부를 결정하십시오.

불행히도 이것은 우분투와 테스트 할 다른 환경이 모두 필요하다는 것을 의미합니다.


답변

for line in os.popen("ps xa"):
fields = line.split()
pid = fields[0]
process = fields[4]

applet_is_running = ( process.find('indicator-applet') > 0 )

이 방법으로 표시기 애플릿이 실행 중인지 감지 할 수 있습니다. 우분투 11.04에 대해서는 걱정할 필요가 없습니다. indicator-applet은 기본적으로 실행되는 필수 구성 요소이므로 대체 시나리오가 없습니다.


답변