Как мне активировать кнопку находящуюся позади QWidget?
Я хочу нажать на radio_1, radio_2, radio_3, но при этом чтобы внешний вид оставался тем же самым.
Писать radio_1.setStyleSheet(' background:rgba(200, 0, 0, 255)') мне не подходит.
Есть ли в PyQt какая-нибудь команда для того, что бы сделать QWidget прозрачным для действий мыши.
Мой код
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import QSize
class Test(QWidget):
def __init__(self):
super().__init__()
self.setMinimumSize(QSize(300, 300))
lay = QVBoxLayout(self)
radio_1 = QRadioButton()
radio_1.setStyleSheet(' background: blue')
lay.addWidget(radio_1)
radio_2 = QRadioButton()
radio_2.setStyleSheet(' background: red')
lay.addWidget(radio_2)
radio_3 = QRadioButton()
radio_3.setStyleSheet(' background: green')
lay.addWidget(radio_3)
buttonGroup = QButtonGroup(self, exclusive=True)
buttonGroup.buttonClicked[int].connect(self.onButtonClicked) #(int id)
buttonGroup.addButton(radio_1, 1)
buttonGroup.addButton(radio_2, 2)
buttonGroup.addButton(radio_3, 3)
block = QWidget(self)
block.setMinimumSize(QSize(300, 300))
block.setStyleSheet(' background: rgba(0, 0, 0, 130)')
lay_2 = QVBoxLayout(block)
Label = QLabel()
Label.setText('TEXT')
Label.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed)
lay_2.addWidget(Label)
radio_4 = QRadioButton()
radio_4.setStyleSheet(' background: yellow')
lay_2.addWidget(radio_4)
buttonGroup.addButton(radio_4, 4)
def onButtonClicked(self, id):
print(id)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Test()
w.show()
sys.exit(app.exec_())
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Попробуйте так:
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import QSize
class Test(QWidget):
def __init__(self):
super().__init__()
self.setMinimumSize(QSize(300, 300))
self.x1r1, self.x2r1, self.y1r1, self.y2r1 = ..., ..., ..., ... # +++
self.x1r2, self.x2r2, self.y1r2, self.y2r2 = ..., ..., ..., ...
self.x1r3, self.x2r3, self.y1r3, self.y2r3 = ..., ..., ..., ...
lay = QVBoxLayout(self)
self.radio_1 = QRadioButton() # всем radio_x self
self.radio_1.setStyleSheet(' background: blue')
lay.addWidget(self.radio_1)
self.radio_2 = QRadioButton()
self.radio_2.setStyleSheet(' background: red')
lay.addWidget(self.radio_2)
self.radio_3 = QRadioButton()
self.radio_3.setStyleSheet(' background: green')
lay.addWidget(self.radio_3)
buttonGroup = QButtonGroup(self, exclusive=True)
buttonGroup.buttonClicked[int].connect(self.onButtonClicked) #(int id)
buttonGroup.addButton(self.radio_1, 1)
buttonGroup.addButton(self.radio_2, 2)
buttonGroup.addButton(self.radio_3, 3)
block = QWidget(self)
block.setMinimumSize(QSize(300, 300))
block.setStyleSheet(' background: rgba(0, 0, 0, 130)')
lay_2 = QVBoxLayout(block)
Label = QLabel()
Label.setText('TEXT')
Label.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed)
lay_2.addWidget(Label)
radio_4 = QRadioButton()
radio_4.setStyleSheet(' background: yellow')
lay_2.addWidget(radio_4)
buttonGroup.addButton(radio_4, 4)
def onButtonClicked(self, id):
print(id)
def resizeEvent(self, event): # +++
g1 = self.radio_1.geometry()
self.x1r1 = g1.x()
self.y1r1 = g1.y()
self.x2r1 = g1.x() + g1.width()
self.y2r1 = g1.y() + g1.height()
g2 = self.radio_2.geometry()
self.x1r2 = g2.x()
self.y1r2 = g2.y()
self.x2r2 = g2.x() + g2.width()
self.y2r2 = g2.y() + g2.height()
g3 = self.radio_3.geometry()
self.x1r3 = g3.x()
self.y1r3 = g3.y()
self.x2r3 = g3.x() + g3.width()
self.y2r3 = g3.y() + g3.height()
super().resizeEvent(event)
def mousePressEvent(self, event): # +++ отслеживать, нажата ли мышь.
x = event.pos().x()
y = event.pos().y()
if (self.x1r1 < x < self.x2r1) and (self.y1r1 < y < self.y2r1):
self.radio_1.click()
elif (self.x1r2 < x < self.x2r2) and (self.y1r2 < y < self.y2r2):
self.radio_2.click()
elif (self.x1r3 < x < self.x2r3) and (self.y1r3 < y < self.y2r3):
self.radio_3.click()
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Test()
w.show()
sys.exit(app.exec_())
