Положение дочерних элементов относительно их родителя, если у виджета нет отца, тогда его положение относительно экрана. И эта система координат используется для рисования, например, в вашем случае qp.drawLine(460, 10, 470, 20)
означает, что вы собираетесь рисовать линию, которая идет от (460, 10)
до (470, 20)
к уведомителю. Высота уведомителя составляет 3% экрана, а для моих 3% экрана это намного меньше, чем 470 , поэтому картина отбрасывается.
В вашем случае я понимаю, что вы хотите нарисовать крест 10х10, затем просто нарисуйте этот крест и переместите его в верхний левый угол.
import sys
from PyQt4 import QtCore, QtGui
class CloseCrosss(QtGui.QFrame):
clicked = QtCore.pyqtSignal()
def __init__(self, side=10, parent=None):
QtGui.QFrame.__init__(self, parent)
self._side = side
self.setFixedSize(side, side)
if parent:
parent.installEventFilter(self)
def mouseReleaseEvent(self, event):
self.clicked.emit()
QtGui.QFrame.mouseReleaseEvent(self, event)
def paintEvent(self, e):
qp = QtGui.QPainter(self)
qp.setPen(QtCore.Qt.red)
qp.drawLine(0, 0, self._side, self._side)
qp.drawLine(self._side, 0, 0, self._side)
def eventFilter(self, watched, event):
if watched == self.parentWidget() and self.parentWidget():
if event.type() == QtCore.QEvent.Resize:
self.adjustSize()
return QtGui.QFrame.eventFilter(self, watched, event)
def adjustSize(self):
# move widget to topright
self.move(self.parentWidget().width() -self.width()-5, 5)
class Notifier(QtGui.QWidget):
def __init__(self, message=None):
QtGui.QWidget.__init__(self, flags=QtCore.Qt.WindowStaysOnTopHint | QtCore.Qt.FramelessWindowHint)
_desktop = QtGui.QApplication.desktop()
size = _desktop.screenGeometry().size()
self.resize(size.width() * 25 / 100, size.height() * 3 / 100)
self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
self.main_layout = QtGui.QVBoxLayout(self)
self.move(size.width() - (size.width() * 25 / 100) - 10, 50)
self.main_layout.setContentsMargins(0, 0, 0, 0)
self.main_layout.setSpacing(0)
self.label = QtGui.QLabel(message)
self.label.setStyleSheet("color: lightgreen; font: 14px;")
self.label.setIndent(20)
self.main_layout.addWidget(self.label)
cross = CloseCrosss(parent=self)
cross.clicked.connect(self.close)
def paintEvent(self, event):
qp = QtGui.QPainter(self)
qp.setRenderHint(QtGui.QPainter.Antialiasing, True)
qp.setPen(QtGui.QColor(255, 255, 255, 200))
qp.setBrush(QtGui.QColor(0, 0, 0, 200))
qp.drawRoundedRect(QtCore.QRect(QtCore.QPoint(), self.size()), 5, 5)
if __name__ == "__main__":
QApp = QtGui.QApplication(sys.argv)
window = Notifier("Hello World")
window.show()
sys.exit(QApp.exec_())