#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. Нет. Отсутствие перекрытия означает, что ограничивающие области не пересекаются. Это совершенно другое.