Как правильно изменить значение переменной в другом модуле?
Есть 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_())
