Форум сайта python.su
0
Доброго времени суток!
Такое дело, хочу написать некий аналог rainmeter только более узкоспециализированный под свои нужды
поэтому хочется спросить возможно ли такое реализовать на Python?
Оригинальный rainmeter написан на с++ но учить его долго и муторно)
Сейчас поподробнее, что я хочу:
Скачав qt designer я увидела, что есть возможность создавать только 2 типа окна
Обычное с кнопками свернуть/развернуть/закрыть
и модульное типа Утилита с кнопкой закрыть.
Мне же нужно создать окно которое было бы вообще без рамок и кнопок виндовса, прозрачное (для того чтобы сделать окно своим дизайном)
и при этом чтобы оно было по типу “утилита” то есть не отображалось на панели задач. Чтобы это окно можно было использовать как виджет “рейнметра”.
Сейчас несколько скриншотов для наглядности:
Аналог рейнметра я писала в программе DevelNext которая позволяет как раз создавать такие типы окон
http://screenshot.ru/3e43d607c52c4cdfe93d16b63cfeaf21.png
(скриншот большой поэтому ссылкой)
но DevelNext базируется на java FX и там по сути виджеты отражаются не совсем корректно как надо, то бишь перекрывают весь экран
и находятся всегда поверх всех окон.
И к сожалению пофиксить это нельзя. Поэтому теряется весь смысл такой программы и от DN пришлось отказаться.
В оригинальном же rainmeter виджеты отображаются только на рабочем столе и НЕ перекрывают остальные окна/приложения
Теперь собственно вопрос:
Можно ли реализовать это на питоне используя PyQT?
Чтобы окна (виджеты) были в произвольном дизайне без всяких там окантовок
и НЕ светились бы на панели задач?
Если такое реализуемо, я бы хотела попросить показать простецкий пример создания такого окна + реализацию его внутри окна экрана монитора
то бишь чтобы окно не выходило за пределы высоты/ширины экрана и стыковалось к краям экрана.
Офлайн
294
простой пример, полностью прозрачное окно, не отображается на панели задач, на нем два элемента надпись, и кнопка.
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)
Офлайн
0
PEHDOMСпасибо огромное! Прямо то, что нужно!
простой пример, полностью прозрачное окно, не отображается на панели задач, на нем два элемента надпись, и кнопка.

Офлайн
294
EdithЧтото о таком не слышал.. Все ручками делать. Создавать свои классы наследуя от стандартных виджетов и переопределяя например paintEvent или использовать таблицы стилей.
И малюсенький вопросик еще: не подскажете, есть ли какой-то визуальный редактор для питона, в котором можно было бы окна создавать включая такие
[code python][/code]
Отредактировано PEHDOM (Июнь 1, 2017 18:05:15)
Офлайн