PyQt:具有透明背景的小部件

4

我希望在PyQt中绘制一个透明背景的矩形。以下代码可在Mac上满足我的需求:

import sys
from PyQt4 import QtGui, QtCore, Qt

class ZoomWidget(QtGui.QWidget):
    def __init__(self):  
        QtGui.QWidget.__init__(self)
        #self.setAttribute(Qt.Qt.WA_NoSystemBackground)
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
        self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
        self.setStyleSheet("background-color:transparent;")
        self.setGeometry(100,100,100,100)
        self.show()        

    def paintEvent(self, e=None): 
        qp = QtGui.QPainter()
        qp.begin(self)
        qp.setPen( QtGui.QPen(QtCore.Qt.gray,3,QtCore.Qt.DashDotLine ) )
        qp.drawRect(0,0,self.rect().width()-1, self.rect().height()-1)  
        qp.end()

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    ex = ZoomWidget()
    sys.exit(app.exec_())

然而,当我在Linux中使用此代码时,它给了我一个黑色背景的矩形。我该怎么做才能让它具有透明背景?谢谢。


它对我有效。毫无疑问,这取决于您的窗口管理器/桌面环境。我正在使用Cinnamon。 - mdurant
1个回答

0

你试过设置 ZoomWidget 的父类吗?

...
def __init__(self, *args, **kwargs):
    QtGui.QWidget.__init__(self, *args, **kwargs)
...
app = QtGui.QApplication(sys.argv)
dial = QtGui.QDialog()
ex = ZoomWidget(parent=dial)
dial.show()
...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接