pygtk
모듈로 주위를 둘러보고 우분투 17.10의 상단 표시 줄에 앱 표시기를 만들려고했습니다. 약간의 연구와클릭 후 PyGTK AppIndicator 메뉴를 열어 두는 방법은 무엇입니까?
, 나는 성공적으로 메인 스레드 일시 정지 할 수있는 메뉴를 만들었습니다 (현재 콘솔에 바로 인쇄 "업데이트"를.)
지금 내가 문제가 우연히 발견하고 나오지 않았어했습니다 ' 답을 찾지 마라.
상단 표시 줄에 라디오 스트리머를 만들려고하는데 모든 클릭에 대해 닫는 메뉴가 탐색 할 때 탐색에 매우 바람직하지 않습니다.
항목을 클릭 할 때 메뉴를 열린 상태로 유지하려면 어떻게해야합니까?
여기 내 코드입니다 :
import os
import signal
import time
from threading import Thread
import gi
gi.require_version("Gtk", "3.0")
gi.require_version("AppIndicator3", "0.1")
from gi.repository import Gtk as gtk
from gi.repository import AppIndicator3 as appindicator
from gi.repository import GObject as gobject
class Indicator:
def __init__(self, name=None, icon=None):
self.path = os.path.abspath(os.path.dirname(__file__))
signal.signal(signal.SIGINT, signal.SIG_DFL)
if name is None:
self.name = "MyApp"
else:
self.name = name
if icon is None:
self.icon = gtk.STOCK_INFO
else:
self.icon = icon
self.indicator = appindicator.Indicator.new(
self.name, self.icon,
appindicator.IndicatorCategory.SYSTEM_SERVICES
)
self.indicator.set_status(appindicator.IndicatorStatus.ACTIVE)
self.indicator.set_menu(self.create_menu())
self.running = True
self.paused = False
self.thread = Thread(target=self.update)
self.thread.setDaemon(True)
self.thread.start()
def create_menu(self):
menu = gtk.Menu()
pause_entry = gtk.MenuItem("Pause")
pause_entry.connect("activate", self.pause)
menu.append(pause_entry)
quit_entry = gtk.MenuItem("Quit")
quit_entry.connect("activate", self.quit)
menu.append(quit_entry)
menu.show_all()
return menu
def update(self):
while self.running:
time.sleep(1)
if not self.paused:
print("Update", flush=True)
def start(self):
gobject.threads_init()
gtk.main()
def pause(self, menu):
self.paused = not self.paused
text = "Resume" if self.paused else "Pause"
for widget in menu.get_children():
print(widget.get_text())
widget.set_text(text)
def quit(self, menu=None):
self.running = False
gtk.main_quit()
if __name__ == "__main__":
indicator = Indicator()
indicator.start()
안녕하세요. 답변 해주셔서 감사합니다. 메뉴를 열어 둘 수있는 방법을 찾지 못했기 때문에 이것이 디자인 선택 이었음을 의심스러워했습니다. 전에'gtk.Window'를 사용 했었습니다. 아마도 클릭 할 때 메뉴를 열어 둘 수있는 방법이나 적어도 가능한 해결 방법이 있기를 바랬습니다. 귀하의 의견을 보내 주셔서 감사합니다! – Jebby