Не работает соединение программы PyQt между сингалом и функцией - PullRequest
2 голосов
/ 25 марта 2020

В этой очень простой кнопке Python, основанной на PyQt, программа start не работает, кажется, что нет никакой связи между кнопкой запуска и методом _calculateResult. Я думаю, что в методе _connectSignals() что-то не так, но я не могу его найти. У вас есть идеи по этому поводу? Спасибо.

import sys

from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QLineEdit, QPushButton, QHBoxLayout

class TimerUi(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('Basic Timer')
        self.setFixedSize(235, 235)
        self.generalLayout = QHBoxLayout()
        self._centralWidget = QWidget(self)
        self.setCentralWidget(self._centralWidget)
        self._centralWidget.setLayout(self.generalLayout)
        self._createDisplayAndButtons()

    def _createDisplayAndButtons(self):
        self.display = QLineEdit()
        self.display.setFixedHeight(35)
        self.generalLayout.addWidget(self.display)

        self.buttons = {}
        self.buttons['start'] = QPushButton('Start')
        self.buttons['start'].setFixedSize(40, 40)
        self.generalLayout.addWidget(self.buttons['start'])

    def setDisplayText(self, text):
        self.display.setText(text)
        self.display.setFocus()

class PyCalcCtrl:
    def __init__(self, view):
        self._view = view
        self._connectSignals()

    def _calculateResult(self):
        self._view.setDisplayText('Time is 17:13')

    def _connectSignals(self):
        self._view.buttons['start'].clicked.connect(self._calculateResult)

def main():
    basic_timer = QApplication(sys.argv)
    view = TimerUi()
    view.show()
    PyCalcCtrl(view=view)
    sys.exit(basic_timer.exec_())


if __name__ == '__main__':
    main()

1 Ответ

2 голосов
/ 25 марта 2020

Создав объект PyCalcCtrl и не присвоив его переменной, G C удалил его. Решение состоит в том, чтобы назначить этот объект переменной:

def main():
    basic_timer = QApplication(sys.argv)
    view = TimerUi()
    view.show()
    <b>ctrl = PyCalcCtrl(view=view)</b>
    sys.exit(basic_timer.exec_())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...