Python PyQt5信号发射不工作
我有一个简单的例子:Python PyQt5信号发射不工作,python,pyqt5,Python,Pyqt5,我有一个简单的例子: from PyQt5.QtWidgets import QDialog,QFileDialog from PyQt5.uic import loadUi from PyQt5.QtCore import pyqtSlot, pyqtSignal class LoadDialog(QDialog): completed = pyqtSignal() def __init__(self, parent=None): super(LoadD
from PyQt5.QtWidgets import QDialog,QFileDialog
from PyQt5.uic import loadUi
from PyQt5.QtCore import pyqtSlot, pyqtSignal
class LoadDialog(QDialog):
completed = pyqtSignal()
def __init__(self, parent=None):
super(LoadDialog, self).__init__(parent)
loadUi("trinity/loaddlg.ui", self)
@pyqtSlot()
def on_btnLoad_clicked(self):
print("Button Clicked")
self.completed.emit()
self.close()
class LoadController():
def __init__(self, parent=None):
super(LoadController, self).__init__(parent)
self.getLoaderFiles();
def getLoaderFiles(self):
loader = LoadDialog(self)
loader.completed.connect(self.loadData)
loader.show()
def loadData(self):
print("Should See Signal Here!)
我得到的是“点击按钮”输出,但不是“应该看到这里的信号”输出。似乎未发出完成的信号,或者调用类未正确连接到事件。谁能
告诉我这个代码是怎么回事
编辑:
用户界面文件:
装载
窗口模式
0
0
597
173
三一疼痛管理付款汇总表
75
真的
选择收费文件:
...
75
真的
选择付款文件:
...
Qt::水平
40
20
0
0
负载
0
0
取消
使用QT Creator设计对话框窗口。我发现您的代码中存在一些不一致之处:
- LoadController不从任何人继承,因此我不了解您在父项中的花费:
super(LoadController,self)。\uuuu init\uuuu(父项)
- LoadDialog希望接收一个QWidget作为父对象,但LoadController不是QWidget,因此它应该会向您抛出一个错误
from PyQt5.QtWidgets import QDialog,QFileDialog, QApplication
from PyQt5.uic import loadUi
from PyQt5.QtCore import pyqtSlot, pyqtSignal
class LoadDialog(QDialog):
completed = pyqtSignal()
def __init__(self, parent=None):
super(LoadDialog, self).__init__(parent)
loadUi("trinity/loaddlg.ui", self)
@pyqtSlot()
def on_btnLoad_clicked(self):
print("Button Clicked")
self.completed.emit()
self.close()
class LoadController():
def __init__(self):
super(LoadController, self).__init__()
self.getLoaderFiles();
def getLoaderFiles(self):
self.loader = LoadDialog()
self.loader.completed.connect(self.loadData)
self.loader.show()
def loadData(self):
print("Should See Signal Here!")
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
controller = LoadController()
sys.exit(app.exec_())
防止窗口关闭的另一种方法是使用exec\uuz()
阻止函数的输出:
显示你的.ui请编辑我原来的帖子
LoadController
被另一个类调用了-我只是没有包含所有的代码-只是片段。不知道为什么你认为LoadDialog需要一个QWidget,而实际上它是QDialog.Iv'e做了你建议的更改;但是,我无法使这两种方案都起作用。还有其他建议吗?@user1532602我不知道你的代码是如何构造的,所以我不知道该告诉你什么,如果你提供了一个真实的例子,我可以指出一些东西,另一方面,你有没有尝试过我的例子而没有其他东西?如果它对您有效,那么代码的另一部分的问题是什么。
from PyQt5.QtWidgets import QDialog,QFileDialog, QApplication
from PyQt5.uic import loadUi
from PyQt5.QtCore import pyqtSlot, pyqtSignal
class LoadDialog(QDialog):
completed = pyqtSignal()
def __init__(self, parent=None):
super(LoadDialog, self).__init__(parent)
loadUi("trinity/loaddlg.ui", self)
@pyqtSlot()
def on_btnLoad_clicked(self):
print("Button Clicked")
self.completed.emit()
self.close()
class LoadController():
def __init__(self):
super(LoadController, self).__init__()
self.getLoaderFiles();
def getLoaderFiles(self):
self.loader = LoadDialog()
self.loader.completed.connect(self.loadData)
self.loader.show()
def loadData(self):
print("Should See Signal Here!")
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
controller = LoadController()
sys.exit(app.exec_())
def getLoaderFiles(self):
loader = LoadDialog()
loader.completed.connect(self.loadData)
loader.exec_()