Я новичок в PyQt5, и я пытаюсь создать интерактивный gui для построения графиков данных. Однако эта проблема вполне может быть совершенно не связана с PyQt5 и больше связана с моим пониманием объектно-ориентированного программирования в целом.
У меня есть класс MainWindow
, SupportClass1
и SupportClass2
. Когда я создаю экземпляр SupportClass1
, я хочу вызвать метод DoSomething
в классе MainWindow
, ссылаясь на объект window
, но получаю сообщение об ошибке NameError: name 'window' is not defined
.
У меня нет проблем с созданием метода в SupportClass2
и его вызовом из класса MainWindow
, поэтому у меня создается впечатление, что я не создал экземпляр класса MainWindow
правильно, чего я не понимаю, поскольку думал, что определил window
как экземпляр класса MainWindow
.
Может ли кто-нибудь помочь мне понять, что не так в моем логи c и как решить эту проблему?
from PyQt5 import QtWidgets, QtCore
from pyqtgraph import PlotWidget, plot
import pyqtgraph as pg
import sys
import os
from random import randint
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.graphWidget = pg.PlotWidget()
self.x = list(range(100))
self.y = [randint(0,100) for _ in range(100)]
self.graphWidget.setBackground('w')
pen = pg.mkPen(color=(255, 0, 0))
self.data_line = self.graphWidget.plot(self.x, self.y, pen=pen)
self.button = QPushButton('Test')
self.button.clicked.connect(self.InstantiateSupportClasses)
self.gui_box = QVBoxLayout()
self.gui_box.addWidget(self.graphWidget)
self.gui_box.addWidget(self.button)
self.setLayout(self.gui_box)
self.setGeometry(300, 300, 300, 150)
self.setWindowTitle('Test application')
self.show()
def InstantiateSupportClasses(self):
supp_class2 = SupportClass2()
print(supp_class2.GetVariable())
supp_class1 = SupportClass1()
def DoSomething(self):
print('I did something!')
class SupportClass1():
def __init__(self):
window.DoSomething
class SupportClass2():
def __init__(self):
self.some_variable = 5
def GetVariable(self):
return self.some_variable
def main():
app = QApplication(sys.argv)
app.setStyle('Fusion')
window = MainWindow()
sys.exit(app.exec_())
if __name__ == '__main__':
main()```