Использование функции при нажатии кнопки python PyQt5
Написал пример приложения на 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
В чем может быть проблема?
Ответы (1 шт):
Автор решения: gord1402
→ Ссылка
- Функции внутри классов должны иметь параметр self либо быть статичными.
- Чтобы обратиться к функции класса нужно написать
объекткласса.имяфункции - Вы можете вынести свою функцию из класса
Исправленный код
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_())