Python &引用;命令终止“;使用PyQt5 QtWidgets QGraphicscene()时

Python &引用;命令终止“;使用PyQt5 QtWidgets QGraphicscene()时,python,pyqt5,qgraphicsview,qgraphicsscene,qtwidgets,Python,Pyqt5,Qgraphicsview,Qgraphicsscene,Qtwidgets,我正在尝试使用PyQt5 QtWidgets QGraphicsView和同一模块中的QGraphicscene打开一个图像。当我调用qtwidts.qgraphicscene.addPixmap(pix)时,应用程序关闭,输出命令终止。代码如下: import os, sys from PyQt5 import QtGui, QtCore, QtWidgets sys.path.insert(0,os.getcwd()+'/'+'gui') sys.path.insert(0,os.get

我正在尝试使用PyQt5 QtWidgets QGraphicsView和同一模块中的QGraphicscene打开一个图像。当我调用qtwidts.qgraphicscene.addPixmap(pix)时,应用程序关闭,输出命令终止。代码如下:

import os, sys

from PyQt5 import QtGui, QtCore, QtWidgets

sys.path.insert(0,os.getcwd()+'/'+'gui')
sys.path.insert(0,os.getcwd()+'/'+'src')

from Widget import Ui_MainWindow

from PIL import Image, ImageQt

class Window(QtWidgets.QMainWindow,Ui_MainWindow):

    def __init__(self):
        super(Window,self).__init__()
        self.setupUi(self)

        self.actionOpen.setShortcut("Ctrl+O")
        self.actionOpen.setStatusTip("open an image")
        self.actionOpen.triggered.connect(self.file_open)

        self.show()

    def file_open(self):

        filepath,_ = QtWidgets.QFileDialog.getOpenFileName(self,'Open File')

        if filepath:
            pim = Image.open(str(filepath))
            qim = ImageQt.ImageQt(pim)
            pix = QtGui.QPixmap.fromImage(qim)

            self.scene = QtWidgets.QGraphicsScene()
            self.scene.addPixmap(pix)
            self.view = self.graphicsView.setScene(self.scene)
        else:
            pass

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    window = Window()
    sys.exit(app.exec_())
其他信息:我使用Qt设计器创建Widget.ui文件并转换为Widget.py。我的主机是windows,我在virtualbox中运行Ubuntu18.04。我的python版本是2.7。我非常感谢任何帮助(我花了一天多的时间解决这个问题),并能提供任何缺失的信息。谢谢

下面是我转换为py的ui:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'Widget.ui'
#
# Created by: PyQt5 UI code generator 5.10.1
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1115, 689)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.horizontalLayoutWidget_2 = QtWidgets.QWidget(self.centralwidget)
        self.horizontalLayoutWidget_2.setGeometry(QtCore.QRect(6, 10, 1091, 601))
        self.horizontalLayoutWidget_2.setObjectName("horizontalLayoutWidget_2")
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_2)
        self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.verticalLayout = QtWidgets.QVBoxLayout()
        self.verticalLayout.setObjectName("verticalLayout")
        self.treeView = QtWidgets.QTreeView(self.horizontalLayoutWidget_2)
        self.treeView.setObjectName("treeView")
        self.verticalLayout.addWidget(self.treeView)
        self.verticalLayout_3 = QtWidgets.QVBoxLayout()
        self.verticalLayout_3.setObjectName("verticalLayout_3")
        self.gridLayout_2 = QtWidgets.QGridLayout()
        self.gridLayout_2.setObjectName("gridLayout_2")
        self.pushButton_4 = QtWidgets.QPushButton(self.horizontalLayoutWidget_2)
        self.pushButton_4.setMinimumSize(QtCore.QSize(90, 20))
        self.pushButton_4.setObjectName("pushButton_4")
        self.gridLayout_2.addWidget(self.pushButton_4, 0, 1, 1, 1)
        self.pushButton_2 = QtWidgets.QPushButton(self.horizontalLayoutWidget_2)
        self.pushButton_2.setMinimumSize(QtCore.QSize(90, 20))
        self.pushButton_2.setObjectName("pushButton_2")
        self.gridLayout_2.addWidget(self.pushButton_2, 1, 0, 1, 1)
        self.pushButton_5 = QtWidgets.QPushButton(self.horizontalLayoutWidget_2)
        self.pushButton_5.setMinimumSize(QtCore.QSize(90, 20))
        self.pushButton_5.setObjectName("pushButton_5")
        self.gridLayout_2.addWidget(self.pushButton_5, 1, 1, 1, 1)
        self.pushButton = QtWidgets.QPushButton(self.horizontalLayoutWidget_2)
        self.pushButton.setMinimumSize(QtCore.QSize(90, 20))
        self.pushButton.setObjectName("pushButton")
        self.gridLayout_2.addWidget(self.pushButton, 0, 0, 1, 1)
        self.pushButton_3 = QtWidgets.QPushButton(self.horizontalLayoutWidget_2)
        self.pushButton_3.setMinimumSize(QtCore.QSize(90, 20))
        self.pushButton_3.setObjectName("pushButton_3")
        self.gridLayout_2.addWidget(self.pushButton_3, 0, 2, 1, 1)
        self.pushButton_6 = QtWidgets.QPushButton(self.horizontalLayoutWidget_2)
        self.pushButton_6.setMinimumSize(QtCore.QSize(90, 20))
        self.pushButton_6.setObjectName("pushButton_6")
        self.gridLayout_2.addWidget(self.pushButton_6, 1, 2, 1, 1)
        self.verticalLayout_3.addLayout(self.gridLayout_2)
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout.addItem(spacerItem)
        self.label = QtWidgets.QLabel(self.horizontalLayoutWidget_2)
        self.label.setLayoutDirection(QtCore.Qt.LeftToRight)
        self.label.setObjectName("label")
        self.horizontalLayout.addWidget(self.label)
        self.rotation = QtWidgets.QDoubleSpinBox(self.horizontalLayoutWidget_2)
        self.rotation.setMinimumSize(QtCore.QSize(100, 20))
        self.rotation.setObjectName("rotation")
        self.horizontalLayout.addWidget(self.rotation)
        self.verticalLayout_3.addLayout(self.horizontalLayout)
        self.verticalLayout.addLayout(self.verticalLayout_3)
        self.logRun = QtWidgets.QPlainTextEdit(self.horizontalLayoutWidget_2)
        self.logRun.setObjectName("logRun")
        self.verticalLayout.addWidget(self.logRun)
        self.horizontalLayout_2.addLayout(self.verticalLayout)
        self.graphicsView = QtWidgets.QGraphicsView(self.horizontalLayoutWidget_2)
        self.graphicsView.setMinimumSize(QtCore.QSize(500, 0))
        self.graphicsView.setObjectName("graphicsView")
        self.horizontalLayout_2.addWidget(self.graphicsView)
        self.verticalLayout_2 = QtWidgets.QVBoxLayout()
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.tabWidget = QtWidgets.QTabWidget(self.horizontalLayoutWidget_2)
        self.tabWidget.setObjectName("tabWidget")
        self.tab = QtWidgets.QWidget()
        self.tab.setObjectName("tab")
        self.tabWidget.addTab(self.tab, "")
        self.tab_2 = QtWidgets.QWidget()
        self.tab_2.setObjectName("tab_2")
        self.tabWidget.addTab(self.tab_2, "")
        self.verticalLayout_2.addWidget(self.tabWidget)
        self.extractedText = QtWidgets.QPlainTextEdit(self.horizontalLayoutWidget_2)
        self.extractedText.setObjectName("extractedText")
        self.verticalLayout_2.addWidget(self.extractedText)
        self.horizontalLayout_2.addLayout(self.verticalLayout_2)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1115, 21))
        self.menubar.setObjectName("menubar")
        self.menuFile = QtWidgets.QMenu(self.menubar)
        self.menuFile.setObjectName("menuFile")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.actionOpen = QtWidgets.QAction(MainWindow)
        self.actionOpen.setObjectName("actionOpen")
        self.actionCtrl_S = QtWidgets.QAction(MainWindow)
        self.actionCtrl_S.setObjectName("actionCtrl_S")
        self.actionSave_3 = QtWidgets.QAction(MainWindow)
        self.actionSave_3.setObjectName("actionSave_3")
        self.actionExit = QtWidgets.QAction(MainWindow)
        self.actionExit.setObjectName("actionExit")
        self.menuFile.addAction(self.actionOpen)
        self.menuFile.addAction(self.actionSave_3)
        self.menuFile.addSeparator()
        self.menuFile.addAction(self.actionExit)
        self.menubar.addAction(self.menuFile.menuAction())

        self.retranslateUi(MainWindow)
        self.tabWidget.setCurrentIndex(0)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
        MainWindow.setTabOrder(self.logRun, self.extractedText)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton_4.setText(_translate("MainWindow", "PushButton"))
        self.pushButton_2.setText(_translate("MainWindow", "remove black"))
        self.pushButton_5.setText(_translate("MainWindow", "PushButton"))
        self.pushButton.setText(_translate("MainWindow", "whiten"))
        self.pushButton_3.setText(_translate("MainWindow", "PushButton"))
        self.pushButton_6.setText(_translate("MainWindow", "PushButton"))
        self.label.setText(_translate("MainWindow", "Rotation"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "Tab 1"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "Tab 2"))
        self.menuFile.setTitle(_translate("MainWindow", "File"))
        self.actionOpen.setText(_translate("MainWindow", "Open"))
        self.actionCtrl_S.setText(_translate("MainWindow", "Ctrl+S"))
        self.actionSave_3.setText(_translate("MainWindow", "Save"))
        self.actionExit.setText(_translate("MainWindow", "Exit"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())


共享.ui…,1)将
self.view=self.graphicsView.setScene(self.scene)
更改为
self.view=self.graphicsView.setScene(self.scene)
,2)更改
pim=Image.open(str(filepath))qim=ImageQt.imageqpqt(pim)pix=QtGui.QPixmap.fromImage(qim)
最好在控制台/CMD中运行代码,因为许多IDE都不能处理这些类型的错误,因此您将获得更好的错误信息。shared Widget.py同样,您的代码在ArchLinux中也能正常工作,我怀疑这是您环境(VirtualBox+Ubuntu)中的一个PIL错误。因此,我的建议是,您消除了PIL的使用,因为到目前为止,我不明白它是否需要使用文件名加载QPixmap。是的,您是对的。我移除了PIL,直接用QPixmap打开imaged,它成功了。谢谢你抽出时间。谢谢:)