Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.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 未建立PyQt4 QDialog连接_Python_Pyqt4_Signals Slots_Qdialog - Fatal编程技术网

Python 未建立PyQt4 QDialog连接

Python 未建立PyQt4 QDialog连接,python,pyqt4,signals-slots,qdialog,Python,Pyqt4,Signals Slots,Qdialog,我正在使用PyQt4及其提供的设计器开发一个应用程序。我有一个工作正常的主窗口应用程序,但我想创建自定义消息对话框。我设计了一个对话框,在\uuuuu init\uuuuuuu方法中设置了一些自定义信号/插槽连接,并编写了一个if\uuuuuu name\uuuuuu==''uuuuuu main\uuuuuuu':,并进行了测试。自定义插槽工作正常。但是,当我从主窗口应用程序创建对话框实例时,所有按钮都不起作用。这是我的对话: from PyQt4.QtGui import * from Py

我正在使用PyQt4及其提供的设计器开发一个应用程序。我有一个工作正常的主窗口应用程序,但我想创建自定义消息对话框。我设计了一个对话框,在
\uuuuu init\uuuuuuu
方法中设置了一些自定义信号/插槽连接,并编写了一个
if\uuuuuu name\uuuuuu==''uuuuuu main\uuuuuuu':
,并进行了测试。自定义插槽工作正常。但是,当我从主窗口应用程序创建对话框实例时,所有按钮都不起作用。这是我的对话:

from PyQt4.QtGui import *
from PyQt4.QtCore import *
import sys
import encode_dialog_ui

# Ui_EncodeDialog is the python class generated by pyuic4 from the Designer
class EncodeDialog(encode_dialog_ui.Ui_EncodeDialog):

    def __init__(self, parent, in_org_im, txt_file, in_enc_im):
        self.qd = QDialog(parent)
        self.setupUi(self.qd)
        self.qd.show()
        self.message = (txt_file.split("/")[-1] + " encoded into " + 
            in_org_im.split("/")[-1] + " and written to " + 
            in_enc_im.split("/")[-1] + ".")

        QObject.connect(self.view_image_button, SIGNAL("clicked()"),
                        self.on_view_image_button_press)

        self.org_im = in_org_im
        self.enc_im = in_enc_im

        self.encoded_label.setText(self.message)       

    def on_view_image_button_press(self):
        print "hello world"

if __name__ == '__main__':
    app = QApplication(sys.argv)
    tmp = QMainWindow()
    myg = EncodeDialog(tmp,'flower2.png','b','flower.png')
    app.exec_()
如果我运行这个类,它工作得很好,按下view\u image\u按钮将hello world打印到控制台。但是当我用电话的时候

#self.mw is a QMainWindow, the rest are strings
EncodeDialog(self.mw, self.encode_image_filename, 
             self.encode_txt_filename, 
             self.encode_new_image_filename)
在我的主窗口类中,对话框显示正确,但单击“查看图像”按钮时,该按钮不起任何作用。我在谷歌上搜索了一个解决方案,但没有找到任何有用的。如果你需要更多的信息,请告诉我。在此方面的任何帮助都将不胜感激

下面是我的主窗口类中的一些代码,为了简洁起见,我添加了省略号来删除那些看起来不相关的代码。如果没有人还能想到什么,我会补充更多。(如果缩进有点小,则是在粘贴副本时发生的。原始代码是正确的)


这感觉就像是父母没有把信号传递给你的孩子

尝试以下建议:

  • 使用新方法连接信号
  • 扩展实际的QT类并调用pyuic生成的类,而不是扩展pyuic创建的类
  • 您的新代码将如下所示:

        class MyGUI(QMainWindow):
            def __init__(self, parent=None):
                QMainWindow.__init__(self, parent)
                self.mw = MainWindow.Ui_MainWindow()
                self.mw.setupUi(self)
                self.mw.show()
                ...
                self.encode_button.clicked.connect(self.on_encode_button_press)
                ...
    
        class EncodeDialog(QDialog):
            def __init__(self, parent, in_org_im, txt_file, in_enc_im):
                QDialog.__init__(self, parent)
                self.qd = encode_dialog_ui.Ui_EncodeDialog()
                self.qd.setupUi(self)
                self.qd.show()
                ...
                self.view_image_button.clicked.connect(self.on_view_image_button_press)
                ...
    

    你能从你的主窗口类发布更多的代码吗?我看不出这个代码有什么问题…——此外,尝试写入文件而不是打印文件,以确保它确实没有调用该函数。这是简化的代码。最初,我在函数中使用Image.show()(来自PIL)来显示图像以进行调试,但当这不起作用时,我切换到简单的打印。我将尝试打印到文件。我将从上面的主窗口类中添加更多的代码。我试图写入一个文件,但仍然没有响应。很抱歉响应延迟,但我想我有一个想法库,但我没有任何进展。问题是Ui_EncodeDialog没有show()之类的方法,QDialog也没有必要的按钮或标签。我试着摆弄它,我确实让它显示了对话框,但是使用
    \uuuuuu name\uuuuuu=“\uuuu main\uuuuu”
    方法,按钮甚至不起作用。我会继续玩它,但到目前为止我还没有解决办法。谢谢你的帮助!
        class MyGUI(QMainWindow):
            def __init__(self, parent=None):
                QMainWindow.__init__(self, parent)
                self.mw = MainWindow.Ui_MainWindow()
                self.mw.setupUi(self)
                self.mw.show()
                ...
                self.encode_button.clicked.connect(self.on_encode_button_press)
                ...
    
        class EncodeDialog(QDialog):
            def __init__(self, parent, in_org_im, txt_file, in_enc_im):
                QDialog.__init__(self, parent)
                self.qd = encode_dialog_ui.Ui_EncodeDialog()
                self.qd.setupUi(self)
                self.qd.show()
                ...
                self.view_image_button.clicked.connect(self.on_view_image_button_press)
                ...