Найти - Пользователи
Полная версия: С помощью какой GUI можно рисовать поверх окон
Начало » GUI » С помощью какой GUI можно рисовать поверх окон
1 2 3 4
Rodegast
> Мне было интересно кто кого победил: вы кутю или оно вас?

И каков твой вердикт?
Rodegast
Что-бы вернуть тему в конструктивное русло, попробую подробнее объяснить что не так. Для рисования мышью нужно как минимум получать события: “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_()
По этому я не вижу простого способа что-то нарисовать мышкой прямо на роб. столе.
leonid_10
Rodegast
И каков твой вердикт?
Мой вердикт такой:
Если иконка в трее не костыль, то запускаем QApplication с иконкой в трее, минимизируем окно, а на иконку садим функцию перехвата событий winapi. Что-то есть про это тут, но проверить не могу, ибо безвиндовый я:
http://www.cyberforum.ru/python/thread1547975.html
А далее, по клику создаём дочернее окно Qt в один пиксель, пишем ему move event обязательно, ну и остальное тоже пишем.
Rodegast
> QApplication с иконкой в трее
Нафига?

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

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

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

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

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

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


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

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

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

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

Ага! У меня мышь рисует, а для её отключения нужно на иконку кликать. Так и шедевр загубить можно.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB