April 26

PyQt6 события

Код

import sys

from PyQt6.QtCore import Qt
from PyQt6.QtGui import QIcon, QAction
from PyQt6.QtWidgets import QApplication, QLabel, QMainWindow, QTextEdit

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.label = QLabel("Нажми на окно")
        self.setCentralWidget(self.label)
        # Создаем панель основного меню
        main_menu = self.menuBar()
        file_menu = main_menu.addMenu("File")
        # Добавляем действия в меню (иконку, название)
        new_img_action = QAction(QIcon("icons/new-image.png"), "New", self)
        open_action = QAction(QIcon("icons/open-image.png"), "Open", self)
        save_action = QAction(QIcon("icons/save-image.png"), "Save", self)

        file_menu.addAction(new_img_action)
        file_menu.addAction(open_action)
        file_menu.addAction(save_action)

    def mouseMoveEvent(self, e): # Событие движения мыши
        print(e.button())
        print(e.position())
        self.label.setText("Мышь двигается")

    def mousePressEvent(self, e): # Событие нажатия мыши
        print(e.button())
        print(e.position())
        self.label.setText("Кнопка мыши нажата")

    def mouseReleaseEvent(self, e): 
        print(e.button())
        print(e.position())
        self.label.setText("Кнопка мыши отпущена")

    def mouseDoubleClickEvent(self, e):
        print(e.button())
        print(e.position())
        self.label.setText("Двойной клик кнопки мыши")

app = QApplication(sys.argv) #Создаем приложение

window = MainWindow() #Создаем окно
window.show() #Окно показать

app.exec()

Объяснение:

Этот код представляет собой простое приложение на PyQt6, где создается основное окно с различными событиями мыши.

1. Импорты:
- Импортируется модуль sys для работы с системными аргументами.
- Импортируются необходимые классы и модули из PyQt6.QtCore, PyQt6.QtGui и PyQt6.QtWidgets.

2. Класс MainWindow:
- Класс MainWindow наследуется от QMainWindow, который является основным классом для создания окна приложения.
- В методе __init__() происходит инициализация окна:
- Вызывается конструктор родительского класса QMainWindow.
- Создается экземпляр QLabel с текстом "Нажми на окно" и устанавливается как центральный виджет окна.
- Создается панель основного меню main_menu и подменю file_menu.
- Создаются три QAction с соответствующими иконками и названиями "New", "Open" и "Save", которые добавляются в подменю file_menu.

3. Обработка событий мыши:
- Определены четыре метода, которые обрабатывают различные события мыши:
- mouseMoveEvent(self, e): Вызывается при движении мыши. Выводит информацию о кнопке мыши и её позиции, а также изменяет текст QLabel.
- mousePressEvent(self, e): Вызывается при нажатии на кнопку мыши. Выводит информацию о кнопке мыши и её позиции, а также изменяет текст QLabel.
- mouseReleaseEvent(self, e): Вызывается при отпускании кнопки мыши. Выводит информацию о кнопке мыши и её позиции, а также изменяет текст QLabel.
- mouseDoubleClickEvent(self, e): Вызывается при двойном клике кнопкой мыши. Выводит информацию о кнопке мыши и её позиции, а также изменяет текст QLabel.

4. Запуск приложения:
- Создается экземпляр QApplication с переданными системными аргументами (sys.argv).
- Создается экземпляр MainWindow и вызывается его метод show() для отображения окна.
- Вызывается метод exec() приложения для запуска основного цикла событий.

Это приложение демонстрирует создание основного окна с панелью меню и обработку различных событий мыши, таких как движение мыши, нажатие, отпускание и двойной клик. Эти события обрабатываются в соответствующих методах класса MainWindow, и изменяется текст QLabel, отображающийся в центре окна.

--------------------------------------------------------------------------------------

В этом коде e является параметром, который представляет событие мыши, передаваемое в обработчики событий мыши.

Например, в методе mouseMoveEvent(self, e):

def mouseMoveEvent(self, e):
    print(e.button())
    print(e.position())
    self.label.setText("Мышь двигается")

Здесь e является объектом QMouseEvent, который содержит информацию о событии мыши, таком как нажатая кнопка мыши (e.button()) и позиция указателя мыши (e.position()).

Аналогично, в других методах обработки событий мыши (mousePressEvent(), mouseReleaseEvent(), mouseDoubleClickEvent()), параметр e также будет объектом QMouseEvent, содержащим информацию о соответствующем событии.

Используя этот объект e, вы можете получить различные данные о событии мыши и обрабатывать их соответствующим образом в вашем приложении.