Могу ли я создать что-то похожее на панель в Windows с помощью Python?

#python #windows #winapi #pywin32

#python #Windows #winapi #pywin32

Вопрос:

Извините за расплывчатое название, не смог придумать ничего более информативного %)

Мне нужна горизонтальная панель размером 5 пикселей в верхней части экрана, на которой я могу рисовать (и, возможно, обрабатывать клики).).

Одна из следующих функций была бы потрясающей (хотя я понимаю, что, вероятно, на самом деле невозможно объединить их оба):

  • панель должна быть такой же, как собственная панель задач Windows, т. Е. Развернутые окна не должны перекрывать ее, а начинаться под ней
  • панель также должна отображаться в полноэкранных приложениях

Возможно ли это сделать на Python?

Спасибо.

Комментарии:

1. Панель задач Windows не отображается, когда приложение переходит на весь экран. Вы имеете в виду развернутый, а не полноэкранный режим. Элемент управления, который вы описываете, называется панелью приложений . Я был бы очень удивлен, если бы была хорошая оболочка Python для панелей приложений. Ожидайте, что вы напишете свой собственный, используя raw win32. Впереди ждет много боли.

2. @DavidHeffernan это именно то, что я сказал: я хочу, чтобы это было похоже на панель задач (показывать, когда окно развернуто) ИЛИ показывать в полноэкранном режиме.

3. Полноэкранное окно скрывает панель задач. В любом случае, вам нужно что-то, что занимает рабочую область рабочего стола. Как я уже сказал, в Windows это называется панелью приложений.

Ответ №1:

Да, это возможно. Часть «как» зависит от выбранной вами библиотеки GUI, для которой есть много вариантов, но большинство людей порекомендуют следующие два: wxPython или PySide, который является Qt для Python.

У PySide есть хорошая документация и учебные пособия.

Что вам нужно будет сделать, это создать экземпляр QMainWindow и установить WindowFlags в соответствии с вашими требованиями. Вероятно, вам нужна следующая комбинация Qt::Window | Qt::CustomizeWindowHint | Qt::WindowStaysOnTopHint .

Что-то вроде этого:

 import sys
from PySide.QtCore import *
from PySide.QtGui import *

class Form(QMainWindow):

    def __init__(self, parent=None):
        super(Form, self).__init__(parent)
        self.setWindowFlags(Qt::Window | Qt::CustomizeWindowHint | Qt::WindowStaysOnTopHint)


if __name__ == '__main__':
    # Create the Qt Application
    app = QApplication(sys.argv)
    # Create and show the form
    form = Form()
    form.show()
    # Run the main Qt loop
    sys.exit(app.exec_())
  

Обратите внимание, что существует ограничение на то, чтобы «оставаться на вершине» таких окон. Существуют специфичные для Win32 способы борьбы с этим и повышения еще выше, но такое требование было бы ошибкой проектирования.

Комментарии:

1. Я не понимаю, как это уменьшит рабочую область рабочего стола так, как это делают панели задач и приложения.

2. Насколько я понял вопрос, он хотел, чтобы всегда включенное верхнее окно, а не панель задач в этом смысле (он сказал, что приложения должны запускаться «под» ним)

3. Да, это панель приложений, а не окно «всегда сверху». Развернутое окно будет находиться под вашим всегда включенным верхним окном.

4. Нет, это не то же самое. Обычное окно можно превратить в окно «всегда сверху», не съедая рабочую область рабочего стола, как это делает панель приложений. ОП сказал в вопросе и своем комментарии, что он хочет, чтобы его окно было поверх даже развернутых окон.

5. Нет. Отсутствие перекрытия означает, что ограничивающие области не пересекаются. Это совершенно другое.