Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PyQt5信号发射不工作_Python_Pyqt5 - Fatal编程技术网

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_()