Qt中,大家都是怎样实现父widget透明,子widget不受影响的?

Cosven 发布于 2014/10/05 13:20
阅读 4K+
收藏 0

在博客看到的大部分方法是这种:(但是这个我在PyQt4中还是不行(windows和ubuntu都失败了),不晓得c++可不可以)       

self.palette = QPalette()
self.palette.setColor(QPalette.Background, QColor(255,255,255,200))
self.setPalette(self.palette)



我(在Ubuntu)用PyQt唯一可行的方法是:(不过这个方法背景会全透明)

self.setAttribute(Qt.WA_TranslucentBackground)



我想问:有没有方法可以实现,父widget背景透明度可调整,子widget不受影响?求大神支招(PyQt能实现最好了 )

加载中
1
JetLua
JetLua

删了一些东西,写的,其实就是self.setAttribute(Qt.WA_TranslucentBackground)

setStyleSheet("QWidget#back{background:rgba(0,0,0,0.2);border-radius:5px}"),这个你应该知道的吧

Cosven
Cosven
thanks very much!
0
JetLua
JetLua
# -*- coding: utf-8 -*-
# Python 3.4.1
# PyQt 5.3.2

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *


"""ui"""
class Dialog(QDialog):
	site=QPoint()
	posi=QPoint()
	down=False
	def __init__(self):
		super().__init__()
		self.setWindowFlags(Qt.FramelessWindowHint|Qt.BypassWindowManagerHint|Qt.Tool|Qt.WindowStaysOnTopHint)
		self.setAttribute(Qt.WA_TranslucentBackground)
		#背景widget
		self.wdt=QWidget()
		self.wdt.setObjectName("back")
		self.wdt.setStyleSheet("QWidget#back{background:rgba(0,0,0,0.2);border-radius:5px}")
		#布局管理器
		self.layout=[QGridLayout(self),QGridLayout(self.wdt)]
		self.layout[0].addWidget(self.wdt)
		self.layout[0].setContentsMargins(0,0,0,0)
		self.layout[0].setSpacing(0)

		self.layout[1].setContentsMargins(0,0,10,0)
		self.layout[1].setSpacing(0)

		self.btn=QPushButton(self)
		#关闭
		self.btn.setStyleSheet("border-radius:5;background:red")
		self.btn.setGeometry(3,3,10,10)
		self.btn.clicked.connect(qApp.quit)
		#隐藏线
		self.hline=QLabel(self)
		self.hline.setStyleSheet("background:white")
		self.hline.setGeometry(0,0,300,1)
		self.hline.hide()
		#天气icon
		self.img=QPushButton()
		self.img.setMaximumSize(128,128)
		self.img.setMinimumSize(128,128)
		#city
		self.city=QLabel()
		self.city.setStyleSheet("font-size:30px;font-family:迷你简娃娃篆;color:yellow")
		self.city.setMaximumHeight(42)
		self.city.setMinimumHeight(42)
		#天气
		self.weat=QLabel()
		self.weat.setStyleSheet("font-size:15px;font-family:微软雅黑;color:yellow")
		self.weat.setMaximumHeight(42)
		self.weat.setMinimumHeight(42)
		#温度
		self.temp=QLabel()
		self.temp.setStyleSheet("font-size:18px;font-family:Georgia;color:yellow")
		self.temp.setMaximumHeight(42)
		self.temp.setMinimumHeight(42)
		#分割线
		self.line=[QLabel(),QLabel()]
		self.line[0].setStyleSheet("background:white")
		self.line[0].setMaximumSize(160,1)
		self.line[0].setMinimumSize(160,1)
		self.line[0].setContentsMargins(0,0,0,0)

		self.line[1].setStyleSheet("background:white")
		self.line[1].setMaximumSize(120,1)
		self.line[1].setMinimumSize(120,1)
		self.line[1].setContentsMargins(0,0,0,0)
		#提示
		self.flag=QLabel("载入中...")
		self.layout[1].addWidget(self.flag,0,0,Qt.AlignHCenter)
		#时间监听
		self.installEventFilter(self)

		#显示
		self.show()

	def mousePressEvent(self,e):
		if e.button()==Qt.LeftButton:
			self.site=e.globalPos()-self.frameGeometry().topLeft()
			self.down=True
	def mouseMoveEvent(self,e):
		w=[qApp.desktop().width(),self.width()]
		h=[qApp.desktop().height(),self.height()]
		self.posi=e.globalPos()-self.site
		if self.posi.x()<0:
			self.posi.setX(0)
		elif self.posi.x()>(w[0]-w[1]):
			self.posi.setX(w[0]-w[1])
		if self.posi.y()<0:
			self.posi.setY(0)
		elif self.posi.y()>(h[0]-h[1]):
			self.posi.setY(h[0]-h[1])
		self.move(self.posi)
	def eventFilter(self,o,e):
		if self.down and e.type()==11 and (self.posi.y()==0):
			self.btn.hide()
			self.wdt.hide()
			self.hline.show()
			return True
		if self.down and e.type()==10 and (self.posi.y()==0):
			self.btn.show()
			self.wdt.show()
			self.hline.hide()
			return True
		return False
if __name__=="__main__":
	app=QApplication(sys.argv)
	dialog=Dialog()
	sys.exit(app.exec_())



JetLua
JetLua
回复 @sunday12345 : 更新强迫症
sunday12345
sunday12345
版本够新的啊~~~Py3.4.1,Qt 5.3 ~~~
返回顶部
顶部