簡體   English   中英

MVC model 中的 PyQt5 信號和插槽不工作

[英]PyQt5 signals and slots in MVC model not working

\EDIT:將代碼簡化到最低限度。

我無法在 MVC 方法中連接 button.clicked 到 function。 調試代碼時,一段時間內一切正常(點擊 2-5 次),然后點擊沒有反應。 當我以正常模式(無調試)運行應用程序時,根本沒有點擊反應。 沒有任何錯誤。

我正在嘗試從這里(MVC 模型)遵循示例: https://realpython.com/python-pyqt-gui-calculator/#creating-a-calculator-with-python-and-pyqt ,它工作正常。 我嘗試了 web 中的其他一些示例,並且工作正常,所以我的代碼似乎有問題,而不是安裝/配置問題。

我現在完全一無所知,甚至不知道該問谷歌什么......

代碼下方:

from PyQt5 import QtCore, QtWidgets
import sys

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(807, 567)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        MainWindow.setCentralWidget(self.centralwidget)

        self.btn_rand = QtWidgets.QPushButton(self.centralwidget)
        self.btn_rand.setGeometry(QtCore.QRect(290, 170, 175, 34))
        self.btn_rand.setText("Random")


class GUIWords(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

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

    def _connectSignals(self):
        self._view.btn_rand.clicked.connect(self._print)

    def _print(self):
        print("rand")

app = QtWidgets.QApplication([])
view = GUIWords()
view.show()
GUIWordsCtr(view)
sys.exit(app.exec())

當我合並類 GUIWords 和 GUIWordsCtr 時,一切都按預期工作。 所以顯然問題是我在將 class GUIWords 傳遞給 GUIWordsCtr 時做錯了。 但這與上面提到的 calc 示例完全相同......

沒有任何錯誤讓我發瘋,並且在調試但不在運行模式下工作。 對我來說某種魔法:(

試試看:

import sys
from PyQt5 import QtCore, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(807, 567)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        MainWindow.setCentralWidget(self.centralwidget)

        self.btn_rand = QtWidgets.QPushButton(self.centralwidget)
        self.btn_rand.setGeometry(QtCore.QRect(290, 170, 175, 34))
        self.btn_rand.setText("Random")


class GUIWords(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)


class GUIWordsCtr(QtCore.QObject):                     # + (QtCore.QObject)
    def __init__(self, view):
        super(GUIWordsCtr, self).__init__(view)        # +
    
        self._view = view
        self._connectSignals()

    def _connectSignals(self):
        self._view.btn_rand.clicked.connect(self._print)

    def _print(self):
        print("rand")


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)

    view = GUIWords()
    view.show()

    GUIWordsCtr(view)

    sys.exit(app.exec_())

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM