Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » С помощью какой GUI можно рисовать поверх окон [RSS Feed]

#1 Июнь 21, 2016 20:00:14

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2757
Репутация: +  184  -
Профиль   Отправить e-mail  

С помощью какой GUI можно рисовать поверх окон

> Мне было интересно кто кого победил: вы кутю или оно вас?

И каков твой вердикт?



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Июнь 22, 2016 18:51:30)

Офлайн

#2 Июнь 22, 2016 18:51:08

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2757
Репутация: +  184  -
Профиль   Отправить e-mail  

С помощью какой GUI можно рисовать поверх окон

Что-бы вернуть тему в конструктивное русло, попробую подробнее объяснить что не так. Для рисования мышью нужно как минимум получать события: “mouseMoveEvent”, “mousePressEvent” и “mouseReleaseEvent”. А получить их можно только в уже закрашенной области виджета. Вот пример который это наглядно показывает:

#!/usr/bin/python
# coding: utf-8
 
import sys
from PySide import QtGui,QtCore
 
class Holst(QtGui.QWidget):
	def __init__(self):
		QtGui.QWidget.__init__(self)
		self.setWindowFlags(QtCore.Qt.X11BypassWindowManagerHint | QtCore.Qt.WindowStaysOnTopHint)
		self.setGeometry(QtGui.QDesktopWidget().screenGeometry())
		self.setWindowOpacity(0.99) 
		self._maska = QtGui.QBitmap(self.width(), self.height())
		self._maska.fill(QtCore.Qt.color0)
		self.setMask(self._maska)
		self.setMouseTracking(True)
		self.show()
	 
	def mouseMoveEvent(self, event):
		print event.globalX(), event.globalY()
		event.accept()
	 
	def mousePressEvent(self, event):
		print "Press"
		event.accept()
	 
	def mouseReleaseEvent(self, event):
		print "Release"
		event.accept()
	 
	def paintEvent(self, event):
		polygon = QtGui.QPolygon()
		polygon.append(QtCore.QPoint(0, 0))
		polygon.append(QtCore.QPoint(self.width(), self.height()))
		polygon.append(QtCore.QPoint(self.width(), 0))
		 
		painter = QtGui.QPainter(self._maska)
		painter.setBrush(QtGui.QBrush(QtCore.Qt.red))
		painter.drawPolygon(polygon)
		painter.end()
		self.setMask(self._maska)
		 
		painter = QtGui.QPainter(self)
		painter.setBrush(QtGui.QBrush(QtCore.Qt.red))
		painter.drawPolygon(polygon)
		painter.end()
 
if __name__ == "__main__":
	app = QtGui.QApplication(sys.argv)
	win = Holst()
	app.exec_()
По этому я не вижу простого способа что-то нарисовать мышкой прямо на роб. столе.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Июнь 23, 2016 12:14:23)

Офлайн

#3 Июнь 23, 2016 18:28:09

leonid_10
От:
Зарегистрирован: 2010-03-28
Сообщения: 197
Репутация: +  3  -
Профиль   Отправить e-mail  

С помощью какой GUI можно рисовать поверх окон

Rodegast
И каков твой вердикт?
Мой вердикт такой:
Если иконка в трее не костыль, то запускаем QApplication с иконкой в трее, минимизируем окно, а на иконку садим функцию перехвата событий winapi. Что-то есть про это тут, но проверить не могу, ибо безвиндовый я:
http://www.cyberforum.ru/python/thread1547975.html
А далее, по клику создаём дочернее окно Qt в один пиксель, пишем ему move event обязательно, ну и остальное тоже пишем.



Офлайн

#4 Июнь 23, 2016 20:30:04

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2757
Репутация: +  184  -
Профиль   Отправить e-mail  

С помощью какой GUI можно рисовать поверх окон

> QApplication с иконкой в трее
Нафига?

> минимизируем окно
Откуда окно?

> на иконку садим функцию перехвата событий winapi
Не кроссплатформенно.

> А далее, по клику создаём дочернее окно Qt в один пиксель, пишем ему move event обязательно, ну и остальное тоже пишем.

Бред.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#5 Июнь 23, 2016 21:35:02

leonid_10
От:
Зарегистрирован: 2010-03-28
Сообщения: 197
Репутация: +  3  -
Профиль   Отправить e-mail  

С помощью какой GUI можно рисовать поверх окон

Rodegast
Бред.
Когда я такое читаю, у меня пропадает желание дальнейшего общения с великим умом.
Никакого бреда. Тебе ж нужно за что-то зацепиться, если пиксель будет прозрачный событий не будет, сам же пример выкладывал. move event будет сразу ресайзить image. Release event будет объединять изображения в родительском окне, закрывая дочернее.

И всё тут кроссплатформенно. Если нужно для линукса:
from Xlib import display
Вообще, сплошь и рядом читаю в питоновых кодах условия:
если винда :
если дарвин:
если ни то и ни другое:

Вообще, я зашёл подсказать. Но, человеку сначала нужно было область выделить, потом он вдруг решил что-то нарисовать, а теперь кто-то уже подпрягся мне диагнозы выставлять.




Офлайн

#6 Июнь 23, 2016 21:52:58

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2757
Репутация: +  184  -
Профиль   Отправить e-mail  

С помощью какой GUI можно рисовать поверх окон

> а теперь кто-то уже подпрягся мне диагнозы выставлять.

Это не диагноз, а тот уровень на котором воспринимается твоя затея. Например зачем тебе иконка в трее?



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#7 Июнь 23, 2016 22:22:01

leonid_10
От:
Зарегистрирован: 2010-03-28
Сообщения: 197
Репутация: +  3  -
Профиль   Отправить e-mail  

С помощью какой GUI можно рисовать поверх окон

Rodegast
Это не диагноз, а тот уровень на котором воспринимается твоя затея. Например зачем тебе иконка в трее?
Чтобы создавать события, если курсор за пределами окна кути.



Офлайн

#8 Июнь 23, 2016 22:26:41

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2757
Репутация: +  184  -
Профиль   Отправить e-mail  

С помощью какой GUI можно рисовать поверх окон

Каким образом она создаст событие?



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#9 Июнь 23, 2016 22:56:04

leonid_10
От:
Зарегистрирован: 2010-03-28
Сообщения: 197
Репутация: +  3  -
Профиль   Отправить e-mail  

С помощью какой GUI можно рисовать поверх окон

Rodegast
Каким образом она создаст событие?
Обращаясь к иконке можно вызывать ту часть кода, которая связана с доступом к винапи, чтобы возобновить рисование:
если тупо был клик мышкой, ложное меняется на истинное и продолжается рисование. Если собираешься рисовать без перекура, то можно и без иконки.



Офлайн

#10 Июнь 24, 2016 10:35:12

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2757
Репутация: +  184  -
Профиль   Отправить e-mail  

С помощью какой GUI можно рисовать поверх окон

>Обращаясь к иконке можно вызывать ту часть кода, которая связана с доступом к винапи, чтобы возобновить рисование

Почему это надо делать именно через иконку?

> если тупо был клик мышкой, ложное меняется на истинное и продолжается рисование

Ага! У меня мышь рисует, а для её отключения нужно на иконку кликать. Так и шедевр загубить можно.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

  • Начало
  • » GUI
  • » С помощью какой GUI можно рисовать поверх окон[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version