Виджет с атрибутом WA_TransparentForMouseEvents в QSplitter. Как это сделать?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Виджет с атрибутом WA_TransparentForMouseEvents в QSplitter. Как это сделать?

Сообщение Anonymous »

У меня есть класс QMainWindow с QScrollArea с содержимым в качестве центрального виджета. И я создал main_layout с моей областью прокрутки в качестве родительского. Таким образом, у меня есть доступ к фоновому макету (self.scroll_area_layout), а также к прямому макету (self.main_layout).
Это работает хорошо, за исключением одного: когда я использую разделитель и хочу взаимодействовать со своей областью прокрутки через него. виджет с атрибутом WA_TransparentForMouseEvents в этом сплиттере, похоже, сплиттер обрабатывает эти события. Также я пытался обрабатывать события мыши из виджета и перенаправлять его в область прокрутки, но работает только WheelEvents (и мне нужно иметь возможность выбирать текст из меток в области прокрутки). Это мой класс виджета для обработки и перенаправления событий в область прокрутки:

Код: Выделить всё

class SignalTransmitterWidget(QWidget):
def __init__(self, scroll_area: QScrollArea, parent=None):
super().__init__(parent)
self.scroll_area = scroll_area
self.setStyleSheet('background: rgba(0,200,0,200)')

def event(self, event):
print(event)
QApplication.sendEvent(self.scroll_area.viewport(), event)
return True
У меня есть этот код (без SignalTransmitterWidget):

Код: Выделить всё

from PySide6.QtWidgets import QMainWindow, QApplication, QVBoxLayout, QWidget, QScrollArea, QLabel, QSplitter
from PySide6.QtCore import Qt

class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.resize(500, 400)

self.scroll_area_layout = QVBoxLayout()
messages_widget = QWidget()
messages_widget.setLayout(self.scroll_area_layout)

self.messages_scroll = QScrollArea()
self.messages_scroll.setWidgetResizable(True)
self.messages_scroll.setWidget(messages_widget)
self.setCentralWidget(self.messages_scroll)

self.main_layout = QVBoxLayout(self.messages_scroll)
self.main_layout.setSpacing(0)

for i in range(20):
label = QLabel(f"Selectable Text {i+1}")
label.setTextInteractionFlags(Qt.TextInteractionFlag.TextSelectableByMouse)
self.scroll_area_layout.addWidget(label)
self.splitter = QSplitter(Qt.Orientation.Vertical)

widget1 = QLabel("widget1 no interaction")
widget1.setStyleSheet("background: rgba(0,0,0,100)")
widget1.setAlignment(Qt.AlignmentFlag.AlignCenter)

widget2 = QLabel("This widget2 must be transparent for mouse events as well as widget3")
widget2.setStyleSheet("background: rgba(0,0,0,100)")
widget2.setAlignment(Qt.AlignmentFlag.AlignCenter)
widget2.setAttribute(Qt.WidgetAttribute.WA_TransparentForMouseEvents)

widget3 = QLabel("This widget3 is transparent for mouse events, but it must be in splitter")
widget3.setAlignment(Qt.AlignmentFlag.AlignCenter)
widget3.setFixedHeight(200)
widget3.setAttribute(Qt.WidgetAttribute.WA_TransparentForMouseEvents)

self.splitter.addWidget(widget1)
self.splitter.addWidget(widget2)

self.main_layout.addWidget(self.splitter)
self.main_layout.addWidget(widget3)

if __name__ == "__main__":
app = QApplication([])
window = MainWindow()
window.show()
Результат:
Результат
И мне нужно взаимодействовать с областью прокрутки в виджете 2 так же, как вы можете взаимодействовать с виджетом 3. Буду признателен за вашу помощь.

Подробнее здесь: https://stackoverflow.com/questions/786 ... to-make-it
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Виджет с атрибутом WA_TransparentForMouseEvents в QSplitter. Как это сделать?
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Как исправить виджет наложения Pyside6, показывающий сквозь боковую панель QSplitter?
    Anonymous » » в форуме Python
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • В чем разница между атрибутом класса и атрибутом экземпляра в Python? [дубликат]
    Anonymous » » в форуме Python
    0 Ответы
    73 Просмотры
    Последнее сообщение Anonymous
  • Как добавить собственный виджет в QT Designer (не продвигать виджет)?
    Anonymous » » в форуме C++
    0 Ответы
    82 Просмотры
    Последнее сообщение Anonymous
  • Сделал виджет с GUI API в Jetpack Compose. Кнопка, заполняющая весь виджет
    Anonymous » » в форуме Android
    0 Ответы
    43 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»