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