如何使用pyqt5制作多窗口

时间:2018-04-24 07:39:43

标签: pyqt5

大家好!

这是我正在尝试做的事情: 首先,我创建了一个名为basic.ui的文件,带有一个按钮。

按下按钮设置路径并在设置路径中选择图片文件,以使图片显示在 新窗口(另一个窗口)

让我告诉你我遇到困难的部分。 执行炸毁文件的命令。选择文件会导致错误。

我想知道原因是什么原因。

按下按钮后如何让图片显示在新窗口(另一个窗口)?????

MainActivity.python

import sys
try:
    from PyQt5.QtCore import Qt, QT_VERSION_STR
    from PyQt5.QtGui import QImage
    from PyQt5.QtWidgets import QApplication, QFileDialog
except ImportError:
    try:
        from PyQt4.QtCore import Qt, QT_VERSION_STR
        from PyQt4.QtGui import QImage, QApplication, QFileDialog
    except ImportError:
        raise ImportError("Requires PyQt5 or PyQt4.")
from QtImageViewer import QtImageViewer
from PyQt5 import QtWidgets
from PyQt5 import QtGui
from PyQt5 import uic
from PyQt5.QtCore import pyqtSlot

class From(QtWidgets.QDialog):    
    def __init__(self, parent=None):
        QtWidgets.QDialog.__init__(self, parent)
        self.ui=uic.loadUi("basic.ui",self)
        self.ui.show()

    @pyqtSlot()
    def add_number(self):
        app = QApplication(sys.argv)
        viewer=QtImageViewer()
        fileName, dummy = QFileDialog.getOpenFileName(None, "Open image file...")
        image = QImage(fileName)
        viewer.setImage(image)
        viewer.show()
        sys.exit(app.exec_())

if __name__=='__main__':
    app=QtWidgets.QApplication(sys.argv)
    w=From()
    sys.exit(app.exec())

1 个答案:

答案 0 :(得分:0)

信号&槽

信号和插槽用于对象之间的通信。信号和插槽机制是Qt的核心功能,可能是与其他框架提供的功能最不同的部分。 Qt的元对象系统使信号和插槽成为可能。

http://doc.qt.io/qt-5/signalsandslots.html

试一试:

import sys
from os import getcwd

from PyQt5 import QtWidgets
from PyQt5 import QtGui
from PyQt5 import uic
from PyQt5.QtCore import Qt, pyqtSlot

class From(QtWidgets.QDialog):    
    def __init__(self, parent=None):
        super(From, self).__init__(parent)

        self.ui=uic.loadUi("basic.ui",self)
        self.ui.pushButton.clicked.connect(self.add_number)     # +++
        #       ^^^^^^^^^^                    vvvvvvvvvv
        #   <widget class="QPushButton" name="pushButton">   <---> "basic.ui"

        self.ui.labelImagen   = QtWidgets.QLabel()   
        self.ui.show()

    @pyqtSlot()
    def add_number(self):
        fileName, dummy = QtWidgets.QFileDialog.getOpenFileName(
            self, "Open image file...", getcwd(),
            "Image (*.png *.jpg)",
            options=QtWidgets.QFileDialog.Options())
        if fileName:
            pix = QtGui.QPixmap(fileName)
            self.ui.labelImagen.setPixmap(pix)  
            self.ui.labelImagen.show()            


if __name__=='__main__':
    app=QtWidgets.QApplication(sys.argv)
    w=From()
    sys.exit(app.exec())

enter image description here