如何为绘制的对象制作透明背景(例如 drawLine)?
how to make transparent background for drawn objects (ex. drawLine)?
我想创建一个只显示绘制对象(例如 drawLine)而不显示背景的应用程序。
因此,如果用户打开应用程序,he/she 可以绘制形状,并且只能看到绘制的形状。
我是 pyside 的新手,但我发现只有小部件可见的示例,但我认为这不适用于此问题。
a = QPoint(22, 22)
b = QPoint(444, 444)
def __init__(self, parent=None):
QWidget.__init__(self, parent)
self.setGeometry(300, 300, 350, 350)
self.setWindowTitle('Draw circles')
def paintEvent(self, event):
paint = QPainter()
paint.begin(self)
paint.drawLine(self.a, self.b)
paint.end()
以上程序只是在不透明背景上画线的一个例子。不确定如何从这个转到透明背景。
您必须启用标志 Qt::WA_TranslucentBackground
:
from PySide import QtCore, QtGui
class Widget(QtGui.QWidget):
def __init__(self, parent=None):
super(Widget, self).__init__(parent)
self.setAttribute(QtCore.Qt.WA_TranslucentBackground, True)
def paintEvent(self, event):
a = QtCore.QPoint(22, 22)
b = QtCore.QPoint(444, 444)
painter = QtGui.QPainter(self)
pen = QtGui.QPen(QtGui.QColor("red"))
pen.setWidth(5)
painter.setPen(pen)
painter.drawLine(a, b)
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
w = Widget()
w.resize(640, 480)
w.show()
sys.exit(app.exec_())
正如它所说 @Heike 似乎在 windows 中有必要添加:
self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
我想创建一个只显示绘制对象(例如 drawLine)而不显示背景的应用程序。
因此,如果用户打开应用程序,he/she 可以绘制形状,并且只能看到绘制的形状。
我是 pyside 的新手,但我发现只有小部件可见的示例,但我认为这不适用于此问题。
a = QPoint(22, 22)
b = QPoint(444, 444)
def __init__(self, parent=None):
QWidget.__init__(self, parent)
self.setGeometry(300, 300, 350, 350)
self.setWindowTitle('Draw circles')
def paintEvent(self, event):
paint = QPainter()
paint.begin(self)
paint.drawLine(self.a, self.b)
paint.end()
以上程序只是在不透明背景上画线的一个例子。不确定如何从这个转到透明背景。
您必须启用标志 Qt::WA_TranslucentBackground
:
from PySide import QtCore, QtGui
class Widget(QtGui.QWidget):
def __init__(self, parent=None):
super(Widget, self).__init__(parent)
self.setAttribute(QtCore.Qt.WA_TranslucentBackground, True)
def paintEvent(self, event):
a = QtCore.QPoint(22, 22)
b = QtCore.QPoint(444, 444)
painter = QtGui.QPainter(self)
pen = QtGui.QPen(QtGui.QColor("red"))
pen.setWidth(5)
painter.setPen(pen)
painter.drawLine(a, b)
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
w = Widget()
w.resize(640, 480)
w.show()
sys.exit(app.exec_())
正如它所说 @Heike 似乎在 windows 中有必要添加:
self.setWindowFlags(QtCore.Qt.FramelessWindowHint)