python - 信号和函数之间的 PyQt 程序连接不起作用
问题描述
在这个非常简单的基于 PyQt 的 Python 程序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()
解决方案
通过创建 PyCalcCtrl 对象而不将其分配给变量,GC 将其删除。解决方案是将该对象分配给一个变量:
def main():
basic_timer = QApplication(sys.argv)
view = TimerUi()
view.show()
ctrl = PyCalcCtrl(view=view)
sys.exit(basic_timer.exec_())
推荐阅读
- android - Android Kotlin - 如何将 DialogInterface.OnClickListener 的默认值设置为函数参数?
- angular - 从环境中设置 Angular 9 Material Google 映射键
- c++ - 在 Windows 桌面应用程序和/或控制台应用程序中使用 Windows 驱动程序工具包(特别是 wdm.h)功能
- c++ - 字符变量作为 Y/N 问题的输入
- c - 当命令包含“..”时,系统函数在 C 中不起作用
- c++ - 我如何在 C 中编写此 C++ 代码。链表迭代?
- python - 将类的实例附加到列表会覆盖以前的实例属性
- webpack - 如何以角度使用 webpack“output.devtoolNamespace”
- vue.js - NUXT 插件 CSS 未在生产中加载
- accessibility - aria role="application" 和制表符