Использование функции при нажатии кнопки python PyQt5

Рейтинг: 0Ответов: 1Опубликовано: 15.05.2023

Написал пример приложения на PyQT5, тестирую использования функции при нажатии кнопки, но мне надо, чтобы основная функции использовала другие функции и выдала расчет

import sys
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import QMainWindow, QLabel, QGridLayout, QWidget
from PyQt5.QtWidgets import QPushButton
from PyQt5.QtCore import QSize    

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

        self.setMinimumSize(QSize(300, 200))    
        self.setWindowTitle("PyQt button example - pythonprogramminglanguage.com") 

        pybutton = QPushButton('Click me', self)
        pybutton.clicked.connect(self.clickMethod)
        pybutton.resize(100,32)
        pybutton.move(50, 50)  

    def calc():
        return 10 + 20      

    def clickMethod(self):
        print('Clicked Pyqt button.')
        calc()  

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    mainWin = MainWindow()
    mainWin.show()
    sys.exit( app.exec_() )

Но выдает ошибку

  File "C:\Users\deriabin_ns\SecondProgram.py", line 24, in clickMethod
    calc()
NameError: name 'calc' is not defined

В чем может быть проблема?

Ответы

▲ 0Принят
  1. Функции внутри классов должны иметь параметр self либо быть статичными.
  2. Чтобы обратиться к функции класса нужно написать объекткласса.имяфункции
  3. Вы можете вынести свою функцию из класса

Исправленный код

import sys
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import QMainWindow, QLabel, QGridLayout, QWidget
from PyQt5.QtWidgets import QPushButton
from PyQt5.QtCore import QSize


def calc():
    return 10 + 20


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

        self.setMinimumSize(QSize(300, 200))
        self.setWindowTitle("PyQt button example - pythonprogramminglanguage.com")

        pybutton = QPushButton('Click me', self)
        pybutton.clicked.connect(self.clickMethod)
        pybutton.resize(100, 32)
        pybutton.move(50, 50)

    def clickMethod(self):
        print('Clicked Pyqt button.')
        calc()


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    mainWin = MainWindow()
    mainWin.show()
    sys.exit(app.exec_())