Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 1, 2017 12:26:34

Edith
Зарегистрирован: 2017-06-01
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQT тип окна

Доброго времени суток!
Такое дело, хочу написать некий аналог rainmeter только более узкоспециализированный под свои нужды
поэтому хочется спросить возможно ли такое реализовать на Python?
Оригинальный rainmeter написан на с++ но учить его долго и муторно)
Сейчас поподробнее, что я хочу:
Скачав qt designer я увидела, что есть возможность создавать только 2 типа окна
Обычное с кнопками свернуть/развернуть/закрыть
и модульное типа Утилита с кнопкой закрыть.
Мне же нужно создать окно которое было бы вообще без рамок и кнопок виндовса, прозрачное (для того чтобы сделать окно своим дизайном)
и при этом чтобы оно было по типу “утилита” то есть не отображалось на панели задач. Чтобы это окно можно было использовать как виджет “рейнметра”.
Сейчас несколько скриншотов для наглядности:
Аналог рейнметра я писала в программе DevelNext которая позволяет как раз создавать такие типы окон
http://screenshot.ru/3e43d607c52c4cdfe93d16b63cfeaf21.png
(скриншот большой поэтому ссылкой)
но DevelNext базируется на java FX и там по сути виджеты отражаются не совсем корректно как надо, то бишь перекрывают весь экран
и находятся всегда поверх всех окон.

И к сожалению пофиксить это нельзя. Поэтому теряется весь смысл такой программы и от DN пришлось отказаться.
В оригинальном же rainmeter виджеты отображаются только на рабочем столе и НЕ перекрывают остальные окна/приложения

Теперь собственно вопрос:
Можно ли реализовать это на питоне используя PyQT?
Чтобы окна (виджеты) были в произвольном дизайне без всяких там окантовок

и НЕ светились бы на панели задач?
Если такое реализуемо, я бы хотела попросить показать простецкий пример создания такого окна + реализацию его внутри окна экрана монитора
то бишь чтобы окно не выходило за пределы высоты/ширины экрана и стыковалось к краям экрана.

Офлайн

#2 Июнь 1, 2017 13:49:34

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

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)

Офлайн

#3 Июнь 1, 2017 15:08:04

Edith
Зарегистрирован: 2017-06-01
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQT тип окна

PEHDOM
простой пример, полностью прозрачное окно, не отображается на панели задач, на нем два элемента надпись, и кнопка.
Спасибо огромное! Прямо то, что нужно!
немного подправила правда под pyQt5 а то чет pyQT4 не ставится
Could not find a version that satisfies the requirement PyQt4 (from versions: )
No matching distribution found for PyQt4

ну да мне под 5-ю все равно надо было

И малюсенький вопросик еще: не подскажете, есть ли какой-то визуальный редактор для питона, в котором можно было бы окна создавать включая такие (под виджеты раб стола)
А то вот смотрю в QT designer можно только стандартные окна делать.

Офлайн

#4 Июнь 1, 2017 17:23:39

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

PyQT тип окна

Edith
И малюсенький вопросик еще: не подскажете, есть ли какой-то визуальный редактор для питона, в котором можно было бы окна создавать включая такие
Чтото о таком не слышал.. Все ручками делать. Создавать свои классы наследуя от стандартных виджетов и переопределяя например paintEvent или использовать таблицы стилей.
http://www.doc.crossplatform.ru/qt/4.6.x/stylesheet.html
Или если уж совсем нужно чтото “непотребное” изобразить типа радиального комбобокса, то можно посмотреть в сторону QGraphicsScene/QGraphicsView но там еще всеселее. Вот пару примеров:
https://habrahabr.ru/post/139933/
https://pro-prof.com/archives/1117
Еще есть QML он позволяет делать сколь угодно анимированные приложения и под него есть визуальный редактор Qt Quick Designer , но он(QML) больше заточен под мобильные пальценажимательные девайсы, хотя можно и под Вендой. например:
https://habrahabr.ru/post/326268/



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Июнь 1, 2017 18:05:15)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version