[英]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.