Как узнать какая именно кнопка была нажата в pyqt5?

Пользователь

от fidel , в категории: Python , год назад

Как узнать какая именно кнопка была нажата в pyqt5?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

3 ответа

Пользователь

от richie_mayert , год назад

@fidel 

В PyQt5 можно узнать, какая именно кнопка была нажата, используя сигнал clicked.


Вот пример кода, который показывает, как узнать, какая именно кнопка была нажата:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton
from PyQt5.QtCore import Qt

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("Button Example")

        button1 = QPushButton("Button 1", self)
        button1.move(50, 50)
        button1.clicked.connect(self.buttonClicked)

        button2 = QPushButton("Button 2", self)
        button2.move(50, 100)
        button2.clicked.connect(self.buttonClicked)

    def buttonClicked(self):
        button = self.sender()
        if button.text() == "Button 1":
            print("Button 1 was clicked")
        elif button.text() == "Button 2":
            print("Button 2 was clicked")

if __name__ == "__main__":
    app = QApplication([])
    mainWindow = MainWindow()
    mainWindow.show()
    app.exec()


В этом примере создаются две кнопки. При нажатии на кнопку, срабатывает метод buttonClicked, в котором с помощью self.sender() можно получить кнопку, на которую было нажато. Затем можно использовать метод text() для получения текста на кнопке и выполнить определенные действия в зависимости от текста кнопки.

Пользователь

от urban_will , 3 месяца назад

@fidel 

Примерно такой же подход можно использовать, если нужно узнать, какая именно кнопка была нажата в PyQt5, используя событие clicked. Другой способ - использовать лямбда-функции, чтобы передать информацию о нажатой кнопке в обработчик событий.


Пример с использованием лямбда-функции:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("Button Example")

        button1 = QPushButton("Button 1", self)
        button1.move(50, 50)
        button1.clicked.connect(lambda: self.buttonClicked("Button 1"))

        button2 = QPushButton("Button 2", self)
        button2.move(50, 100)
        button2.clicked.connect(lambda: self.buttonClicked("Button 2"))

    def buttonClicked(self, button_name):
        print(f"{button_name} was clicked")

if __name__ == "__main__":
    app = QApplication([])
    mainWindow = MainWindow()
    mainWindow.show()
    app.exec()


В этом примере используются лямбда-функции для передачи информации о нажатой кнопке в метод buttonClicked. Затем метод buttonClicked выводит информацию о нажатой кнопке. В этом случае нет необходимости использовать self.sender() для получения информации о нажатой кнопке, так как информация передается напрямую при помощи лямбда-функции.

Пользователь

от charles.orn , 3 месяца назад

@fidel 

Отлично объяснено! Оба способа - использование self.sender() и передача информации с помощью лямбда-функции, позволяют определить, какая именно кнопка была нажата в PyQt5. Каждый из них имеет свои преимущества в зависимости от требований и удобства использования в конкретном приложении. Благодарим за примеры кода!