LINUX.ORG.RU

Не работает PushButton

 


0

1

Секундомер не включается после нажатия Button

import sys

from PyQt5.QtCore import Qt, QTimer
from PyQt5.QtWidgets import QWidget, QLabel, QPushButton, QGridLayout, QSizePolicy, QApplication

global QPushButton

button = QPushButton


class Window(QWidget):
    def __init__(self, *args, **kwargs):
        self.my_counter = 0   ## replaced  "1"
        self.my_counter1 = 0
        self.my_counter2 = 0
        QWidget.__init__(self, *args, **kwargs)

      #  self.label = QLabel("Q", self)    #original
        self.label = QLabel(self)
        self.label1 = QLabel(self)
        self.label2 = QLabel(self)
        self.label.setText("00")
        self.label.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        self.label.setAlignment(Qt.AlignCenter)
        self.label.setStyleSheet("QLabel {background-color: white; font-size: 30pt;}")


        self.label1 = QLabel(self)
        self.label1.setAlignment(Qt.AlignCenter)
        self.label1.setStyleSheet("QLabel {background-color: white; font-size: 30pt;}")
        self.label1.setText("00.")

        self.label2 = QLabel(self)
        self.label2.setAlignment(Qt.AlignCenter)
        self.label2.setStyleSheet("QLabel {background-color: pink; font-size: 30pt;}")
        self.label2.setText("00:")

        self.button = QPushButton(self)
        self.button.setStyleSheet("QPushButton {background-color: yellow; font-size: 15pt;}")
        self.button.setText("Start")

        self.layout = QGridLayout(self)
        self.layout.addWidget(self.label, 0, 4)
        self.layout.addWidget(self.label1, 0, 3)   # New label1
        self.layout.addWidget(self.label2, 0, 2)   # + New label2
        self.layout.addWidget(self.button, 3, 3)

        self.setLayout(self.layout)
        self.show()

    def local_button_handler(self):

        self.label.setText("%d" % self.my_counter)
        self.my_counter += 1

        if self.my_counter == 100:
            self.my_counter = 0
            self.my_counter1 += 1
            self.label1.setText("%d" % self.my_counter1 + ".")

            if self.my_counter1 == 60:
                self.label1.setText("00.")
                self.my_counter1 = 0
                self.my_counter2 += 1
                self.label2.setText("0"+"%d" % self.my_counter2 + ":")
            elif self.my_counter1  < 10:
                self.label1.setText("0" + "%d" % self.my_counter1 + ".")

        elif self.my_counter < 10:

            self.label.setText("0" +  "%d" % self.my_counter)

    def on_button_clicked(self):

        button.clicked.connect(win.local_button_handler())
        timer = QTimer()
        timer.timeout.connect(win.local_button_handler)
        timer.start(10)

    on_button_clicked

app = QApplication(sys.argv)
win = Window()
#
# timer = QTimer()
# timer.timeout.connect(win.local_button_handler)
# timer.start(10)
app.exec_()
sys.exit(app.exec_())

Перемещено Zhbert из general



Последнее исправление: Zhbert (всего исправлений: 1)

я в питоне не разбираюсь, но не создаешь ли ты случайно локально в функции on_button_clicked - QTimer который после завершения функции уничтожается

xionovermazes
()
Ответ на: комментарий от xionovermazes

Решение для PushButton найдено

import sys

from PySide2.QtCore import QTimer

from PySide2.QtWidgets import QWidget, QLabel, QPushButton, QGridLayout, QApplication

from PyQt5.QtCore import Qt, QTimer from PyQt5.QtWidgets import QWidget, QLabel, QPushButton, QGridLayout, QSizePolicy, QApplication

class Stopwatch(QWidget):

class Window(QWidget):

def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)

    self.tics = 0
    self.increment = 10
    self.timer = QTimer()
    self.timer.timeout.connect(self.update_time)

    self.time_display = QLabel(self, text='00:00:00.00')
    self.time_display.setStyleSheet("QLabel {background-color: white; font-size: 50pt;}")

    self.start_button = QPushButton(self)
    self.start_button.setStyleSheet("QPushButton {background-color: yellow; font-size: 20pt;}")
    self.start_button.setText("Start")
    self.start_button.clicked.connect(self.start_timer)

    self.layout = QGridLayout(self)
    self.layout.addWidget(self.time_display, 0, 0)
    self.layout.addWidget(self.start_button, 1, 0)

def update_time(self):
    """Increment counter and update time display"""
    # Calculate hours:minutes:seconds
    self.tics += self.increment
    h = self.tics // 3600000
    m = (self.tics // 60000) % 60
    s = (self.tics / 1000) % 60
    self.time_display.setText(f'{h:02d}:{m:02d}:{s:05.2f}')

def start_timer(self):
    """Start/Stop the timer"""
    if self.start_button.text() == 'Start':
        self.tics = 0
        self.start_button.setText('Stop')
        self.timer.start(self.increment)
    else:
        self.timer.stop()
        self.start_button.setText('Start')

app = QApplication(sys.argv) win = Stopwatch()

win = Window()

win.setWindowTitle(‘Stopwatch’) win.show() sys.exit(app.exec_())

gvin47
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.