Форум сайта python.su
Доброго времени суток!
Такое дело, хочу написать некий аналог rainmeter только более узкоспециализированный под свои нужды
поэтому хочется спросить возможно ли такое реализовать на Python?
Оригинальный rainmeter написан на с++ но учить его долго и муторно)
Сейчас поподробнее, что я хочу:
Скачав qt designer я увидела, что есть возможность создавать только 2 типа окна
Обычное с кнопками свернуть/развернуть/закрыть
и модульное типа Утилита с кнопкой закрыть.
Мне же нужно создать окно которое было бы вообще без рамок и кнопок виндовса, прозрачное (для того чтобы сделать окно своим дизайном)
и при этом чтобы оно было по типу “утилита” то есть не отображалось на панели задач. Чтобы это окно можно было использовать как виджет “рейнметра”.
Сейчас несколько скриншотов для наглядности:
Аналог рейнметра я писала в программе DevelNext которая позволяет как раз создавать такие типы окон
http://screenshot.ru/3e43d607c52c4cdfe93d16b63cfeaf21.png
(скриншот большой поэтому ссылкой)
но DevelNext базируется на java FX и там по сути виджеты отражаются не совсем корректно как надо, то бишь перекрывают весь экран
и находятся всегда поверх всех окон.
И к сожалению пофиксить это нельзя. Поэтому теряется весь смысл такой программы и от DN пришлось отказаться.
В оригинальном же rainmeter виджеты отображаются только на рабочем столе и НЕ перекрывают остальные окна/приложения
Теперь собственно вопрос:
Можно ли реализовать это на питоне используя PyQT?
Чтобы окна (виджеты) были в произвольном дизайне без всяких там окантовок
и НЕ светились бы на панели задач?
Если такое реализуемо, я бы хотела попросить показать простецкий пример создания такого окна + реализацию его внутри окна экрана монитора
то бишь чтобы окно не выходило за пределы высоты/ширины экрана и стыковалось к краям экрана.
Офлайн
простой пример, полностью прозрачное окно, не отображается на панели задач, на нем два элемента надпись, и кнопка.
import sys from PyQt4 import QtGui from PyQt4 import QtCore class MainWindow(QtGui.QWidget): def __init__(self ,parent=None): super().__init__(parent) # окно без рамок и заголовка, не отображается на панели задач self.setWindowFlags(QtCore.Qt.FramelessWindowHint|QtCore.Qt.Tool) # прозрачный бек окна self.setAttribute(QtCore.Qt.WA_TranslucentBackground) #self.setAttribute(QtCore.Qt.WA_PaintOnScreen) # работает только в X11 grid = QtGui.QGridLayout(self) self.setLayout(grid) label = QtGui.QLabel(text='PRESS THE BUTTON - >') # какойто текст btn = QtGui.QPushButton('Close',self) # кнопака выхода иначе хрен закроеш btn.clicked.connect(self.close) grid.addWidget(label , 0, 0) grid.addWidget(btn , 0, 1) grid.setAlignment(QtCore.Qt.AlignCenter) # привязка к разрешению экрана desktop = QtGui.QApplication.desktop() screen01 = desktop.primaryScreen() # у меня 2 монитора, определяем главный # получаем разрешение нужного монитора res = desktop.screenGeometry(screen01) # устанавливаем размер откна по размеру монитора self.setFixedSize(res.width(), res.height()) # перемещаем окно чтобы оно заняло весь монитор self.move(0, 0) self.show() def close(self): self.hide() QtGui.qApp.quit() if __name__ == '__main__': app = QtGui.QApplication(sys.argv) mainWindow=MainWindow() sys.exit(app.exec_())
[code python][/code]
Отредактировано PEHDOM (Июнь 1, 2017 14:16:23)
Офлайн
PEHDOMСпасибо огромное! Прямо то, что нужно!
простой пример, полностью прозрачное окно, не отображается на панели задач, на нем два элемента надпись, и кнопка.
Офлайн
EdithЧтото о таком не слышал.. Все ручками делать. Создавать свои классы наследуя от стандартных виджетов и переопределяя например paintEvent или использовать таблицы стилей.
И малюсенький вопросик еще: не подскажете, есть ли какой-то визуальный редактор для питона, в котором можно было бы окна создавать включая такие
[code python][/code]
Отредактировано PEHDOM (Июнь 1, 2017 18:05:15)
Офлайн