Как запрограммировать индикатор одного клика (добавить функцию среднего щелчка)?

кажется, что ваш пользователь не имеет административных прав и поэтому не может ссылаться на sudo. Однако переход на пользователя root работает. Решение будет состоять в том, чтобы ваша учетная запись имела права администратора.

Вы можете сделать это, если вы войдете в свою учетную запись администратора и затем измените ее с помощью учетных записей пользователей.

1
задан 1 July 2017 в 16:28

6 ответов

Чтобы удалить ошибки и применить функциональность middleclick к рассматриваемому коду (в то время как может быть много альтернативных методов), я добавил аргумент в оператор build_menu в главном си, что определение build_menu может принимать аргумент. Я назвал этот аргумент indicator. Затем добавлен метод middleclick set_secondary_activate_target().

Фиксированный код:

#!/usr/bin/python

import os
import signal
import subprocess
import gi
from middleClick import reveallauncher
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk as gtk
gi.require_version('AppIndicator3', '0.1')
from gi.repository import AppIndicator3 as appindicator

APPINDICATOR_ID = 'appreveallauncher'

def main():
    indicator = appindicator.Indicator.new(APPINDICATOR_ID,
                os.path.abspath('sample_icon.svg'),
                appindicator.IndicatorCategory.SYSTEM_SERVICES)
    indicator.set_status(appindicator.IndicatorStatus.ACTIVE)
    indicator.set_menu(build_menu(indicator))
    gtk.main()

def build_menu(indicator):
    menu = gtk.Menu()

    item_reveallauncher = gtk.MenuItem('Reveal Launcher')
    item_reveallauncher.connect('activate', reveallauncher)   
    indicator.set_secondary_activate_target(item_reveallauncher)

    item_quit = gtk.MenuItem('Quit')
    item_quit.connect('activate', quit)

    menu.append(item_reveallauncher)
    menu.append(item_quit)
    menu.show_all()
    return menu

def reveallauncher(_):
    subprocess.call("xdotool key alt+F1", shell=True) 

def quit(_):
    gtk.main_quit()

if __name__ == "__main__":
    signal.signal(signal.SIGINT, signal.SIG_DFL)
    main()

Существует ряд примеров использования метода set_secondary_activate_target, который можно найти в Google поиск. Однако проблема, которую я испытал, заключается в том, что все они включены в сложный скрипт, используемый многими способами. Это попытка привести его в упрощенном примере, чтобы облегчить для следующего человека попытку адаптировать его к их коду.

0
ответ дан 22 May 2018 в 20:59

Чтобы удалить ошибки и применить функциональность middleclick к рассматриваемому коду (в то время как может быть много альтернативных методов), я добавил аргумент в оператор build_menu в главном си, что определение build_menu может принимать аргумент. Я назвал этот аргумент indicator. Затем добавлен метод middleclick set_secondary_activate_target().

Фиксированный код:

#!/usr/bin/python import os import signal import subprocess import gi from middleClick import reveallauncher gi.require_version('Gtk', '3.0') from gi.repository import Gtk as gtk gi.require_version('AppIndicator3', '0.1') from gi.repository import AppIndicator3 as appindicator APPINDICATOR_ID = 'appreveallauncher' def main(): indicator = appindicator.Indicator.new(APPINDICATOR_ID, os.path.abspath('sample_icon.svg'), appindicator.IndicatorCategory.SYSTEM_SERVICES) indicator.set_status(appindicator.IndicatorStatus.ACTIVE) indicator.set_menu(build_menu(indicator)) gtk.main() def build_menu(indicator): menu = gtk.Menu() item_reveallauncher = gtk.MenuItem('Reveal Launcher') item_reveallauncher.connect('activate', reveallauncher) indicator.set_secondary_activate_target(item_reveallauncher) item_quit = gtk.MenuItem('Quit') item_quit.connect('activate', quit) menu.append(item_reveallauncher) menu.append(item_quit) menu.show_all() return menu def reveallauncher(_): subprocess.call("xdotool key alt+F1", shell=True) def quit(_): gtk.main_quit() if __name__ == "__main__": signal.signal(signal.SIGINT, signal.SIG_DFL) main()

Существует ряд примеров использования метода set_secondary_activate_target, который можно найти в Google поиск. Однако проблема, которую я испытал, заключается в том, что все они включены в сложный скрипт, используемый многими способами. Это попытка привести его в упрощенном примере, чтобы облегчить для следующего человека попытку адаптировать его к их коду.

0
ответ дан 18 July 2018 в 10:51

Чтобы удалить ошибки и применить функциональность middleclick к рассматриваемому коду (в то время как может быть много альтернативных методов), я добавил аргумент в оператор build_menu в главном си, что определение build_menu может принимать аргумент. Я назвал этот аргумент indicator. Затем добавлен метод middleclick set_secondary_activate_target().

Фиксированный код:

#!/usr/bin/python import os import signal import subprocess import gi from middleClick import reveallauncher gi.require_version('Gtk', '3.0') from gi.repository import Gtk as gtk gi.require_version('AppIndicator3', '0.1') from gi.repository import AppIndicator3 as appindicator APPINDICATOR_ID = 'appreveallauncher' def main(): indicator = appindicator.Indicator.new(APPINDICATOR_ID, os.path.abspath('sample_icon.svg'), appindicator.IndicatorCategory.SYSTEM_SERVICES) indicator.set_status(appindicator.IndicatorStatus.ACTIVE) indicator.set_menu(build_menu(indicator)) gtk.main() def build_menu(indicator): menu = gtk.Menu() item_reveallauncher = gtk.MenuItem('Reveal Launcher') item_reveallauncher.connect('activate', reveallauncher) indicator.set_secondary_activate_target(item_reveallauncher) item_quit = gtk.MenuItem('Quit') item_quit.connect('activate', quit) menu.append(item_reveallauncher) menu.append(item_quit) menu.show_all() return menu def reveallauncher(_): subprocess.call("xdotool key alt+F1", shell=True) def quit(_): gtk.main_quit() if __name__ == "__main__": signal.signal(signal.SIGINT, signal.SIG_DFL) main()

Существует ряд примеров использования метода set_secondary_activate_target, который можно найти в Google поиск. Однако проблема, которую я испытал, заключается в том, что все они включены в сложный скрипт, используемый многими способами. Это попытка привести его в упрощенном примере, чтобы облегчить для следующего человека попытку адаптировать его к их коду.

0
ответ дан 24 July 2018 в 19:39

Короткий ответ: вы не можете. При нажатии на значок индикатора открывается меню. Что можно сделать, это установить средний (scrollwheel) щелчок (на сенсорных планшетах, которые правы и левый клик нажат вместе), что делается путем установки вторичной активации объекта индикатора объекта.

Вот пример того, что я использую в моем собственном индикаторе-индикаторе запуска на строках 152 и 153:

152         last = self.get_last_menuitem(self.app_menu)
153         self.app.set_secondary_activate_target(last)

Когда пользователь нажимает средний щелчок по элементу идентификатора, он активирует конкретный элемент меню, не опуская меню.

То, что вы также можете сделать в качестве альтернативы, - использовать события прокрутки, что-то вроде этого:

86         self.app.connect("scroll-event", self.set_next)
2
ответ дан 22 May 2018 в 20:59
  • 1
    Благодарю. Когда я вернусь в свой магазин, я изучу ваши предложения. – L. D. James 1 July 2017 в 02:07
  • 2
    @ L.D.James, пожалуйста. Я знаю, что это не совсем идеальный ответ, но это лучшее, что я нашел со временем. Я просмотрел документацию по индикаторам и обыскал в Интернете, но это самое близкое, что я нашел, чтобы нажимать значок в приложениях – Sergiy Kolodyazhnyy 1 July 2017 в 02:09
  • 3
    @SergiyKolodyazhnyy Вы не можете просто убить индикатор приложения? – WinEunuuchs2Unix 1 July 2017 в 02:24
  • 4
    @ WinEunuuchs2Unix Вы можете убить процесс, конечно, но это не то, о чем мы говорим здесь. L.D.James хочет выполнить действие при щелчке по значку индикатора, как если бы это была кнопка. К несчастью, как я уже сказал, это не работает – Sergiy Kolodyazhnyy 1 July 2017 в 02:26
  • 5
    @ СергейКолодяжный О, я неправильно понял. Я думал, что его индикатор имеет два варианта: 1. Run Foo-Bar и 2. Quit Foo-Bar. – WinEunuuchs2Unix 1 July 2017 в 02:28

Короткий ответ: вы не можете. При нажатии на значок индикатора открывается меню. Что можно сделать, это установить средний (scrollwheel) щелчок (на сенсорных планшетах, которые правы и левый клик нажат вместе), что делается путем установки вторичной активации объекта индикатора объекта.

Вот пример того, что я использую в моем собственном индикаторе-индикаторе запуска на строках 152 и 153:

152 last = self.get_last_menuitem(self.app_menu) 153 self.app.set_secondary_activate_target(last)

Когда пользователь нажимает средний щелчок по элементу идентификатора, он активирует конкретный элемент меню, не опуская меню.

То, что вы также можете сделать в качестве альтернативы, - использовать события прокрутки, что-то вроде этого:

86 self.app.connect("scroll-event", self.set_next)
2
ответ дан 18 July 2018 в 10:51

Короткий ответ: вы не можете. При нажатии на значок индикатора открывается меню. Что можно сделать, это установить средний (scrollwheel) щелчок (на сенсорных планшетах, которые правы и левый клик нажат вместе), что делается путем установки вторичной активации объекта индикатора объекта.

Вот пример того, что я использую в моем собственном индикаторе-индикаторе запуска на строках 152 и 153:

152 last = self.get_last_menuitem(self.app_menu) 153 self.app.set_secondary_activate_target(last)

Когда пользователь нажимает средний щелчок по элементу идентификатора, он активирует конкретный элемент меню, не опуская меню.

То, что вы также можете сделать в качестве альтернативы, - использовать события прокрутки, что-то вроде этого:

86 self.app.connect("scroll-event", self.set_next)
2
ответ дан 24 July 2018 в 19:39
  • 1
    Благодарю. Когда я вернусь в свой магазин, я изучу ваши предложения. – L. D. James 1 July 2017 в 02:07
  • 2
    @ L.D.James, пожалуйста. Я знаю, что это не совсем идеальный ответ, но это лучшее, что я нашел со временем. Я просмотрел документацию по индикаторам и обыскал в Интернете, но это самое близкое, что я нашел, чтобы нажимать значок в приложениях – Sergiy Kolodyazhnyy 1 July 2017 в 02:09
  • 3
    @SergiyKolodyazhnyy Вы не можете просто убить индикатор приложения? – WinEunuuchs2Unix 1 July 2017 в 02:24
  • 4
    @ WinEunuuchs2Unix Вы можете убить процесс, конечно, но это не то, о чем мы говорим здесь. L.D.James хочет выполнить действие при щелчке по значку индикатора, как если бы это была кнопка. К несчастью, как я уже сказал, это не работает – Sergiy Kolodyazhnyy 1 July 2017 в 02:26
  • 5
    @ СергейКолодяжный О, я неправильно понял. Я думал, что его индикатор имеет два варианта: 1. Run Foo-Bar и 2. Quit Foo-Bar. – WinEunuuchs2Unix 1 July 2017 в 02:28

Другие вопросы по тегам:

Похожие вопросы: