从子窗口调用时,PyQt5 QFileDialog完成应用程序

时间:2018-01-20 14:01:45

标签: python pyqt5 qfiledialog

我的应用程序结构有点复杂。

First_Main_Window(QtWidgets.QMainWindow)来电---> Second_Main_Window(QtWidgets.QMainWindow)来电---> Third_Window = slides_form (QtWidgets.QDialog)

这意味着在第一个窗口中我有工人列表,在第二个窗口中 - 第三个窗口中的某个工人(电话,地址)的数据 - 工人的标准工作阶段(即照片)..

' First_Main_Window'使用此功能打开Second_Main_Window

def OpenWindowCurrentWorker(self):
    self.pasportdataWin = pasportdata.pasportdata_form(self)
    self.pasportdataWin.closed.connect(self.show)
    self.pasportdataWin.move(0,0)
    self.hide()
    self.pasportdataWin.show()

Second_Main_Window使用此功能打开Third_Window

def OpenSlidesWindowForm(self):
    self.SlidesWin=slides.slides_form(self)
    self.SlidesWin.move(0,0)
    self.SlidesWin.closed.connect(self.show)
    self.hide()
    self.SlidesWin.show()


from PyQt5 import QtCore, QtWidgets, QtGui
class slides_form (QtWidgets.QDialog):
    closed = QtCore.pyqtSignal()
    def __init__(self,parent=None):
        super(slides_form, self).__init__(parent)
        self.ui = slidesUiForm.Ui_Form()
        self.ui.setupUi(self)
        self.Parent=parent
        self.ui.pushButton.clicked.connect(self.openNewSlideFile)

    @QtCore.pyqtSlot()
    def openNewSlideFile (self):
        Slideflnames = QtWidgets.QFileDialog.getOpenFileNames(self, "Open Image file", "All images(*.png *.gif *.jpg *jpeg *.bmp *.tiff   .tif)")[0]
        for ii in range(len(Slideflnames)):
               ........
            shutil.copy(os.path.abspath(Slideflnames[ii]), NEWPATH)

问题在于我决定从 PyQt4 转移到 PyQt5 。 问题是在调用程序"openNewSlideFile"之后 申请结束时没有任何警告。

从第二个和第三个窗口调用QtWidgets.QFileDialog.getOpenFileNames即可完成应用程序。 我尝试使用"无"而不是" self"在父母的位置,但它没有帮助。

请帮助我,我不是一个非常强大的程序员,也不了解这个问题,特别是当所有人都在使用PyQt4时。

我可以理解PyQt 5,9: Here is information about PyQt5 from Synaptics

这是控制台输出,使用纯python3和python3 -m pdb

当我通过Python3启动时 - 它完成时没有显示错误

当我通过python3启动它时 - m pdb - 它完成了分段错误

[alex@comp projects_PyQt5]$ python3
Python 3.5.1 (default, May  5 2016, 10:50:17) 
[GCC 5.3.1 20151207 (ALT Linux 5.3.1-alt3)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 
[1]+  Stopped                 python3
[alex@comp projects_PyQt5]$ python3 BaseCenter.py
[alex@comp projects_PyQt5]$ python3 -m pdb BaseCenter.py
> /home/alex/projects_PyQt5/BaseCenter.py(3)<module>()
-> import os
(Pdb) continue
QXcbConnection: XCB error: 3 (BadWindow), sequence: 2466, resource id: 39846744, major code: 40 (TranslateCoords), minor code: 0
The program exited via sys.exit(). Exit status: 0
> /home/alex/projects_PyQt5/BaseCenter.py(3)<module>()
-> import os
(Pdb) continue
Segmentation error
[alex@comp projects_PyQt5]$

我找到了一些问题的答案 - 在我的情况下,每个打开的孩子都会#34;窗口隐藏了之前的父窗口&#34;初始化时显示&#34; parent&#34;关闭时返回 - 为了最小化桌面状态字符串中小部件的数量

如果我在呼叫&#34;第二个窗口&#34;时删除了self.hide()一切正常!但!我在状态字符串中有两个窗口选项卡(我忘了英文单词来描述它:)) 一个窗口处于非活动状态,因为活动窗口是模态的...但它看起来像是一些不必要的垃圾而烦我:))

0 个答案:

没有答案