Как правильно изменить значение переменной в другом модуле?

Есть 2 модуля - один с главным окном приложения(класс MainWIndow), другой с параметрами (класс DescriptionView). Во втором модуле задана переменная data2.

Хочется при проверке условия в первом модуле поменять значение переменной во втором модуле. Неясно что я делаю не так?

Варианты со списками значений не подойдут. Рабочий код ниже - все засунул в один модуль но толку нет. Для проверки добавил print. Как результат - в консоли выводит измененное значение, а по факту на объекте старое значение.

from PyQt5 import QtWidgets
from PyQt5.QtCore import Qt

from PyQt5.QtWidgets import *


class DescriptionView(QtWidgets.QVBoxLayout):

def __init__(self, parent=None):
    QtWidgets.QVBoxLayout.__init__(self, parent)

    self.data1 = int(0)
    self.data2 = int(100)

    self.power = QtWidgets.QHBoxLayout()
    self.powerlabel = QLabel("Power: ", alignment=Qt.AlignLeft | Qt.AlignTop)
    self.power_data = QLabel(str(self.data1) + "/" + str(self.data2), alignment=Qt.AlignLeft | Qt.AlignTop)

    self.powervalue = QtWidgets.QProgressBar(self.powerlabel)
    self.powervalue.setFixedSize(280, 5)
    self.powervalue.setTextVisible(False)
    self.powervalue.setMaximum(self.data2)
    self.powervalue.setValue(self.data1)


class MainWindow(QWidget):
def __init__(self):
    super().__init__()

    self.my_tree_view = DescriptionView()

    main_layout = QHBoxLayout()
    main_layout.addLayout(self.my_tree_view)
    self.my_tree_view.addWidget(self.my_tree_view.powerlabel)
    self.my_tree_view.addWidget(self.my_tree_view.power_data)
    self.my_tree_view.addWidget(self.my_tree_view.powervalue)

    self.setLayout(main_layout)

    a = 10

    if a > 5:
        self.my_tree_view.data2 = 50
        print(self.my_tree_view.data2)
    else:
        pass


if __name__ == '__main__':
app = QApplication([])

mw = MainWindow()
mw.show()

app.exec()

Ответы (1 шт):

Автор решения: S. Nick

Sorry, я не проверял ваш код, а написал как правильно должна выполняться ваша задумка.

from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QWidget, QHBoxLayout, QLabel, QProgressBar, \
    QVBoxLayout, QApplication 


class DescriptionView(QWidget):                # - QtWidgets.QVBoxLayout):
    def __init__(self):
        super().__init__()

        self.data1 = 0
        self.data2 = 100

# ?        self.power = QHBoxLayout()
        self.powerlabel = QLabel("Power: ", alignment=Qt.AlignLeft | Qt.AlignTop)
        self.power_data = QLabel(str(self.data1) + "/" + str(self.data2), alignment=Qt.AlignLeft | Qt.AlignTop)

        self.powervalue = QProgressBar(self.powerlabel)
        self.powervalue.setFixedSize(280, 5)
        self.powervalue.setTextVisible(False)
        self.powervalue.setMaximum(self.data2)
        self.powervalue.setValue(self.data1)
# +++        
        layout = QVBoxLayout(self)                            
        layout.addWidget(self.powerlabel)
        layout.addWidget(self.power_data)
        layout.addWidget(self.powervalue)        
# +++        


class MainWindow(QWidget):
    def __init__(self):
        super().__init__()

        self.my_tree_view = DescriptionView()

        main_layout = QHBoxLayout(self)
        main_layout.addWidget(self.my_tree_view)
#        self.my_tree_view.addWidget(self.my_tree_view.powerlabel)
#        self.my_tree_view.addWidget(self.my_tree_view.power_data)
#        self.my_tree_view.addWidget(self.my_tree_view.powervalue)
#        self.setLayout(main_layout)

        a = 10
        if a > 5:
            self.my_tree_view.data2 = 50
            print(self.my_tree_view.data2)
            self.my_tree_view.powervalue.setValue(self.my_tree_view.data2)           # +++ !!!
        else:
            pass


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

введите сюда описание изображения


Update

from PyQt5.QtCore import Qt, QTimer
from PyQt5.QtWidgets import QWidget, QHBoxLayout, QLabel, QProgressBar, \
    QVBoxLayout, QApplication 


class DescriptionView(QWidget):                # - QtWidgets.QVBoxLayout):
    def __init__(self):
        super().__init__()
        self.value    = 0
        self.minValue = 0
        self.maxValue = 100
        
        self.power_data = QLabel(
            f"Power: {self.value} / {self.maxValue}", 
            alignment=Qt.AlignLeft | Qt.AlignTop
        )

        self.progressBar = QProgressBar()
        self.progressBar.setProperty("value", 0)
        self.progressBar.setFixedHeight(7)
        self.progressBar.setTextVisible(False)
        self.progressBar.setRange(self.minValue, self.maxValue)
        
        layout = QVBoxLayout(self)                            
        layout.addWidget(self.power_data)
        layout.addWidget(self.progressBar)        
        layout.addStretch()


class MainWindow(QWidget):
    def __init__(self):
        super().__init__()

        self.my_tree_view = DescriptionView()
        main_layout = QHBoxLayout(self)
        main_layout.addWidget(self.my_tree_view)

        self.timer = QTimer()
        self.timer.setInterval(100)
        self.timer.timeout.connect(self.update_time)
        self.timer.start()

    def update_time(self):        
        if self.my_tree_view.value > self.my_tree_view.maxValue:
            self.timer.stop()
        elif self.my_tree_view.value > 15:
            self.my_tree_view.progressBar.setValue(self.my_tree_view.value)   
            text = f"Power: {self.my_tree_view.value} / {self.my_tree_view.maxValue}"
            self.my_tree_view.power_data.setText(text)
        self.my_tree_view.value += 1


if __name__ == "__main__":    
    import sys    
    app = QApplication(sys.argv)
    mw = MainWindow()
    mw.show()
    sys.exit(app.exec_())
→ Ссылка