Понятно, что сами переменные можно вызвать извне, если в функции прописать return, но за пределами класса эти функции не видны.
как же не видны, в питоне все публичное...
пример
Python:
import sys
from PyQt5.QtWidgets import QWidget, QApplication
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.a = 5
self.gui()
def gui(self):
self.setGeometry(300, 300, 300, 200)
self.show()
# геттер для получения переменной из класса
def get_a(self):
return self.a
if __name__ == '__main__':
app = QApplication(sys.argv)
mw = MainWindow()
print(mw.a) # получили переменную из класса
print(mw.get_a()) # геттер для получения переменной из класса
sys.exit(app.exec_())
в qt не обязательно писать через классы...
пример
Python:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLineEdit
def btn_click():
sender = w.sender()
line_edit.insert(sender.text() + " нажата")
app = QApplication(sys.argv)
w = QWidget()
btn = QPushButton("Кнопка", w)
btn.clicked.connect(btn_click)
line_edit = QLineEdit(w)
line_edit.move(30, 30)
w.resize(250, 150)
w.move(300, 300)
btn.move(50, 50)
w.show()
sys.exit(app.exec_())
как видите, здесь нет классов, код написан в процедурном стиле...
но qt - это объектно ориентированный фреймворк, это значит, если вы хотите использовать какие то плюшки из qt, вам нужно унаследоваться от определенного класса...
к примеру, хотим использовать qt-шные потоки, нам нужно унаследоваться от класса QThread (на самом деле не обязательно, но речь не об этом), в процедурном стиле у вас это не получиться сделать...
дальше
мне нужно весь код писать внутри класса (объект окна pyqt5).
это и есть инкапсуляция - один из трех основных принципов ООП (объектно ориентированное программирование)...
классу не нужно то, что происходит снаружи, он самодостаточен...
это вам что то нужно от класса...
и не обязательно писать все в одном классе, можете сделать базовый класс, и от него наследоваться и добавлять нужный функционал...
Неужели нет способа вызвать локальные переменные или сами функции из под класса в глобальную часть кода?
вы немного не понимаете ООП...
переменные в классе приватные (но в питоне нет), это значит что извне к ним доступа нет, это сделано в целях безопасности и стабильности кода...
если вы хотите поменять переменную в классе извне, делаются сеттеры (set метод), который меняет переменную внутри класса, обычно с ограничениями по каким то параметрам...
если вам нужно получить переменную из класса извне, делаются геттеры (get метод), который возвращает переменную...
в хорошем ООП коде нет глобальных переменных, и классу не нужно раздавать свои переменные в глобальную часть кода...
методы (функции) класса вы можете вызвать, если они публичные (в питоне все публичное)...
Ищу в литературе, уже две книги отлетело, но информации по этому нет
вы не знаете чего вы ищите, советую почитать про ООП, не про определенный язык, а в целом про ООП...