elizar
Сен. 9, 2017 07:34:45
Привет народ.
Посоветуйте, пожалуйста, как мне лучше сделать меню выпадающее из курсора (или лучше в заданном месте монитора). Вроде меню выпадающего у Punto Switcher / Glipper с историей буфера обмена, но только чтоб были субменю.
Собственно, идея в том, что мне периодически нужно вставлять в консоль разнообразные команды типа
grep dump /usr/local/ispmgr/etc/ispmgr.conf | awk ‘{print $3,$4,$5}’ | sh | perl -pi -e ‘s/\\00/@/g’ | perl -pi -e ‘s/\@userPassword//g’ | grep -A1 ‘@’
или текст вроде “Проверьте, пожалуйста, работу Ваших сайтов.” в браузер. Да-да, техподержка хостинга… Так вот, было бы удобно брать всё это из менюхи с поддиректориями выпадающей по хоткею.
Конечно же, искал требуемую прогу, ничего похожего не нашёл. Может плохо искал? Или есть другие более лучшие решения?
На питоне писал, потому на нём бы и хотелось. Но всё что писал было консольное, а тут требуется гуй. Нужно чтоб работало на Unity в Ubuntu. Но если и коллегам под виндой пойдёт, они, как мне кажется, совсем не будут против.
vic57
Сен. 9, 2017 11:24:10
можно в PyQt сделать через SystemTray если добавить хоткеу
тут гляньте
elizar
Сен. 9, 2017 12:26:07
За ссыль спасибо, но зачем чтоб оно всегда висело? Вешается на хоткей средствами убунты. И в винде тоже есть системные и не совсем системные средства.
Запустилось, показало меню - тыкнул в него, оно в курсор впечатло строку и закрылось, тыкнул мимо меню - просто закрылось.
vic57
Сен. 9, 2017 16:47:14
можно через clipboard
import sys
import pyperclip as clip
from PyQt5.QtWidgets import QApplication,QListWidget
class List(QListWidget):
def __init__(self,parent=None):
QListWidget.__init__(self,parent)
self.addItems(['one','two','three'])
self.currentTextChanged.connect(self.textChanged)
def textChanged(self,text):
clip.copy(text)
if __name__=="__main__":
app = QApplication(sys.argv)
w = List()
w.move(0,0)
w.show()
sys.exit(app.exec_())
но лучше чтобы было в трее, чем запускать/удалять каждый раз
elizar
Сен. 11, 2017 08:15:08
Похоже у меня не получается объяснить что мне нужно.
Окошка не надо, список уж в tkinter рисовал, но это не то. Вообще тему надо было в GUI открывать. Как делать вставку и всё остальное понятно, только как это графически оформить не понятно.
Однако, по поводу трея - это не плохая альтернатива. Пусть эта самая менюшка из трея и вылазит, почему бы нет. Где-то ведь по-любому должны быть готовые решения, чтоб только сказать “рисуй меню для трея с такими-то пунктами и подпуктами” и всё готово? Буду гуглить, благодарю в самом деле.
vic57
Сен. 11, 2017 10:12:11
как вы хотите я понял, но нереально. окно в котором вы работаете(терминал или браузер) забирает фокус ввода и на ПКМ у него своя реакция, переключаться между окнами так и так придется. реально это
import sys
import pyperclip as clip
from PyQt5.Qt import *
class List(QListWidget):
def __init__(self,parent=None):
QListWidget.__init__(self,parent)
self.addItems(['one','two','three','four'])
self.setCurrentRow(0)
self.currentTextChanged.connect(self.textChanged)
self.tray = QSystemTrayIcon(self)
self.tray.setIcon(self.style().standardIcon(QStyle.SP_ComputerIcon))
self.tray.activated.connect(self.tray_activated)
self.tray.show()
def tray_activated(self,reason):
if reason == 3:
if self.isVisible(): self.hide()
else: self.show()
def textChanged(self,txt):
clip.copy(txt)
if __name__=="__main__":
app = QApplication(sys.argv)
w = List()
w.move(0,0)
w.show()
sys.exit(app.exec_())
выбираете пункт, возвращаетесь в свое окно и Ctrl-V