LINUX.ORG.RU

Утилита запуска команд в трее

 , ,


0

1

Ищу утилиту, которая будет сидеть в трее значком, по нажатию будет выдавать меню со списком консольных команд (какие я настрою) и по нажатию исполнять. Есть ли вообще такое в линуксе? Использую кеды, и есть множество виджетов для этого, но панель широкая и виджеты на ней огромные, а хотелось бы иметь мелкий значок в трее.

Ответ на: комментарий от Loki13
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
# code source: https://stackoverflow.com/questions/893984/pyqt-show-menu-in-a-system-tray-application  - add answer PyQt5
#PyQt4 to PyQt5 version: https://stackoverflow.com/questions/20749819/pyqt5-failing-import-of-qtgui

class SystemTrayIcon(QtWidgets.QSystemTrayIcon):

    def __init__(self, icon, parent=None):
        QtWidgets.QSystemTrayIcon.__init__(self, icon, parent)
        menu = QtWidgets.QMenu(parent)
        exitAction = menu.addAction("Exit")
        self.setContextMenu(menu)
        menu.triggered.connect(self.exit)

    def exit(self):
        QtCore.QCoreApplication.exit()

def main(image):
    app = QtWidgets.QApplication(sys.argv)

    w = QtWidgets.QWidget()
    trayIcon = SystemTrayIcon(QtGui.QIcon(image), w)

    trayIcon.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    on=r''# ADD PATH OF YOUR ICON HERE .png works
    main(on)

Правда вот тут код вроде поактуальнее и этот я даже проверил. Работает. Перед использованием сделать: pip install pyqt5

Даже ошибку нашел. В этом коде действие вешается на всё меню, а не на пункт. Правильно будет:

exitAction.triggered.connect(self.exit)

PS: Пока ковырял этот код, понял, что написать утилитку, как хочет ТС(распарсить конфик с командами и создать менюшку под них), дело, наверное двух-трех часов. Для питониста может даже и пол часа, я всё же только мимо проходил.

Loki13 ★★★★★
()
Последнее исправление: Loki13 (всего исправлений: 2)
Ответ на: комментарий от Loki13

Чет у меня тупняк какой-то с этим кодом)

Добавил второй пункт меню, свою функцию в addAction – при нажатии на пункт меню она отрабатывает но закрывает приложуху.)

Upd. нОгуглил фикс:

app.setQuitOnLastWindowClosed(False)
frunobulax ★★★
()
Последнее исправление: frunobulax (всего исправлений: 1)
Ответ на: комментарий от Loki13

[code]kot@192:~$ pip install pyqt5

error: externally-managed-environment

× This environment is externally managed ╰─> To install Python packages system-wide, try zypper install python311-xyz, where xyz is the package you are trying to install.

If you wish to install a non-rpm packaged Python package,
create a virtual environment using python3.11 -m venv path/to/venv.
Then use path/to/venv/bin/python and path/to/venv/bin/pip.

If you wish to install a non-rpm packaged Python application,
it may be easiest to use `pipx install xyz`, which will manage a
virtual environment for you. Install pipx via `zypper install python311-pipx` .

note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing –break-system-packages. hint: See PEP 668 for the detailed specification. DEPRECATION: Loading egg at /usr/lib64/python3.11/site-packages/TBB-2021.11.0-py3.11-linux-x86_64.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330 [/code]

KOT040188 ★★
() автор топика