Я все еще не уверен, что понимаю проблему, но я поставил свой код.
Кнопка Start
установить первое значение на этикетке или распечатать в консоли «Уже работает»
Кнопка Change
добавляет +1 к текущему значению и повторяет * 2, если значение делится на 4.
Он выведет на консоль Not running
, если Start
не был нажат ранее, или значение wen будет равно 100 (оно останавливается, и вам придется снова использовать Start
)
Он не использует for
-loop, поскольку значение изменяется только при нажатии кнопки.
import sys
from PyQt5.QtWidgets import QDialog, QApplication, QLabel, QPushButton, QVBoxLayout
class MyForm(QDialog):
def __init__(self):
super().__init__()
self.layout = QVBoxLayout(self)
self.label = QLabel(self, text="?")
self.layout.addWidget(self.label)
self.buttonStart = QPushButton(self, text="Start")
self.buttonStart.clicked.connect(self.start)
self.layout.addWidget(self.buttonStart)
self.buttonChange = QPushButton(self, text="Change")
self.buttonChange.clicked.connect(self.valueChanged)
self.layout.addWidget(self.buttonChange)
self.is_running = False
self.current_item = 0
self.show()
def start(self):
if not self.is_running:
self.is_running = True
self.current_item = 1
self.label.setText(str(self.current_item))
else:
print("Already running")
def valueChanged(self):
if self.is_running:
self.current_item += 1
if self.current_item % 4 == 0:
self.label.setText(str(self.current_item * 2) + " <-- double")
else:
self.label.setText(str(self.current_item))
if self.current_item >= 100:
self.is_running = False
else:
print("Not running")
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MyForm()
window.show()
sys.exit(app.exec_())
Это моя первая версия. Он использует таймер для изменения значения в метке каждые 0,5 мс (500 мс).
Он начинает считать, когда вы нажимаете Start
. Когда вы нажимаете Change
и значение делится на 4, оно умножается на * 2
import sys
from PyQt5.QtWidgets import QDialog, QApplication, QLabel, QPushButton, QVBoxLayout
from PyQt5.QtCore import QTimer
class MyForm(QDialog):
def __init__(self):
super().__init__()
self.layout = QVBoxLayout(self)
self.label = QLabel(self, text="?")
self.layout.addWidget(self.label)
self.buttonStart = QPushButton(self, text="Start")
self.buttonStart.clicked.connect(self.start)
self.layout.addWidget(self.buttonStart)
self.buttonChange = QPushButton(self, text="Change")
self.buttonChange.clicked.connect(self.valueChanged)
self.layout.addWidget(self.buttonChange)
self.current_item = 0
self.show()
def start(self):
self.current_item = 0
self.timer = QTimer()
self.timer.timeout.connect(self.valueUpdate)
self.timer.start(500) # 500ms = 0.5s
def valueUpdate(self):
self.current_item += 1
self.label.setText(str(self.current_item))
if self.current_item >= 100:
self.timer.stop()
def valueChanged(self):
if self.current_item is not None:
if self.current_item % 4 == 0:
new_value = self.current_item * 2
self.label.setText(str(new_value))
else:
print("Not running")
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MyForm()
window.show()
sys.exit(app.exec_())