Передача значения переменной между классами
Необходимо передать значение из переменной col(№1) в метку label(#2). Как это сделать? Где почитать об этом?
from pyqtgraph.Qt import QtCore, QtGui
import pyqtgraph as pg
import sys
import numpy as np
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
uic.loadUi('untitled.ui', self)
#2
self.label.setText('__col')
self.plotWater()
self.plotFeed()
def plotFeed(self):
self.graphWidget.addItem(bg)
def plotWater(self):
self.graphWidget_2.addItem(bg4)
class BarGraph(pg.BarGraphItem):
def mouseClickEvent(self, event):
print("Координаты: x=", event.pos().x(), "; y=", event.pos().y())
#1
self.col = round(event.pos().x())
#print('__column =', __column)
# self.labelEditRequest= (label.setText(self.col))
# labelEdit(self.labelEditRequest)
x = np.arange(10)
y1 = x
bg = BarGraph(x=x, y=y1 - 0.5 * x, height=y1, width=0.8)
bg4 = BarGraph(x=x, y=y1 - 0.5 * x, height=y1, width=0.8)
MainWindow.plotFeed
MainWindow.plotWater
def main():
app = QtWidgets.QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
MainWindow.graphWidget.scene().sigMouseClicked.connect(onClick) ```
Ответы (1 шт):
Автор решения: Alexander Chernin
→ Ссылка
Вариант №1 (Кутишный):
from PyQt5.QtCore import QObject, pyqtSignal
class BarGraph(pg.BarGraphItem):
# Сигнал передачи значения из колонки
signal_columnValueChanged = pyqtSignal(int)
def mouseClickEvent(self, event):
self.col = round(event.pos().x())
# сигнализируем об изменении
self.signal_columnValueChanged.emit(self.col)
Тогда в главном окне надо просто слушать этот сигнал:
class MainWindow(QtWidgets.QMainWindow):
def plotFeed(self):
bg.signal_columnValueChanged.connect(self.__columnValueChanged)
self.graphWidget.addItem(bg)
def __columnValueChanged(self, columnValue):
self.label.setText(str(columnValue))
Для метода plotWater аналогично и слот для получения значения тот же (если так и задумано). Кроме того, можно сделать слот через lambda:
bg.signal_columnValueChanged.connect(lambda col: self.label.setText(str(col)))
Вариант №2 (Явовский через слушателя):
class MainWindow(QtWidgets.QMainWindow):
def plotFeed(self):
bg.setListener(self)
self.graphWidget.addItem(bg)
def plotWater(self):
bg4.setListener(self)
self.graphWidget_2.addItem(bg4)
# Метод для получения значения колонки
def columnChanged(self, col):
self.label.setText(str(col))
Надо добавить функцию setListener в класс:
class BarGraph(pg.BarGraphItem):
def __init__(self):
pg.BarGraphItem.__init__(self)
self.__listener = None
def setListener(self, listener):
self.__listener = listener
def mouseClickEvent(self, event):
self.col = round(event.pos().x())
if self.__listener not is None:
self.__listener.columnChanged(self.col)