Python 3.x 如何修复在python中选择文件后继续重新打开的文件对话框
我是pyqt5新手,需要帮助关闭应用程序中的文件对话框。用户界面是使用QT设计器创建的。当我选择一个文件并按下打开按钮时,文件对话框首先关闭,然后再次打开。这是我的问题。它不应该重新开放 我尝试在对话框Python 3.x 如何修复在python中选择文件后继续重新打开的文件对话框,python-3.x,pyqt,pyqt5,Python 3.x,Pyqt,Pyqt5,我是pyqt5新手,需要帮助关闭应用程序中的文件对话框。用户界面是使用QT设计器创建的。当我选择一个文件并按下打开按钮时,文件对话框首先关闭,然后再次打开。这是我的问题。它不应该重新开放 我尝试在对话框fileDialog.close()和fileDialog.hide()上使用以下函数,但未能使其正常工作 我使用两个不同的文件,一个用于主窗口,另一个用于文件对话框。在主窗口中,我使用以下类 class Main (QtWidgets.QMainWindow): def __init__
fileDialog.close()
和fileDialog.hide()
上使用以下函数,但未能使其正常工作
我使用两个不同的文件,一个用于主窗口,另一个用于文件对话框。在主窗口中,我使用以下类
class Main (QtWidgets.QMainWindow):
def __init__(self):
super(Main, self).__init__()
uic.loadUi('MainWindow.ui', self)
self.btnChooseFile.clicked.connect(self.chooseFile)
def chooseFile(self):
fileDialog = OpenFileDialog.FileDialog()
fileDialog.openFileNameDialog()
app = QtWidgets.QApplication([])
win = Main()
win.show()
sys.exit(app.exec())
另一个类名为OpenFileDialog.py,如下所示:
class FileDialog(QWidget):
def __init__(self):
super(FileDialog, self).__init__()
self.title = 'Choose image-file'
self.left = 10
self.top = 10
self.width = 640
self.height = 480
self.initUI()
def initUI(self):
self.setWindowTitle(self.title)
self.setGeometry(self.left, self.top, self.width, self.height)
self.openFileNameDialog()
self.openFileNamesDialog()
self.saveFileDialog()
self.show()
def openFileNameDialog(self):
options = QFileDialog.Options()
options |= QFileDialog.DontUseNativeDialog
fileName, _ = QFileDialog.getOpenFileName(self,"QFileDialog.getOpenFileName()", "","All Files (*);;Python Files (*.py)", options=options)
if fileName:
print(fileName)
def openFileNamesDialog(self):
options = QFileDialog.Options()
options |= QFileDialog.DontUseNativeDialog
files, _ = QFileDialog.getOpenFileNames(self,"QFileDialog.getOpenFileNames()", "","All Files (*);;Python Files (*.py)", options=options)
if files:
print(files)
def saveFileDialog(self):
options = QFileDialog.Options()
options |= QFileDialog.DontUseNativeDialog
fileName, _ = QFileDialog.getSaveFileName(self,"QFileDialog.getSaveFileName()","","All Files (*);;Text Files (*.txt)", options=options)
if fileName:
print(fileName)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = FileDialog()
sys.exit(app.exec_())
UI文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>winMain</class>
<widget class="QMainWindow" name="winMain">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>280</width>
<height>320</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>280</width>
<height>320</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>280</width>
<height>320</height>
</size>
</property>
<property name="windowTitle">
<string>OCR</string>
</property>
<widget class="QWidget" name="centralwidget">
<widget class="QPushButton" name="btnChooseFile">
<property name="geometry">
<rect>
<x>80</x>
<y>10</y>
<width>93</width>
<height>28</height>
</rect>
</property>
<property name="text">
<string>Choose file</string>
</property>
</widget>
<widget class="QLabel" name="lblFile">
<property name="geometry">
<rect>
<x>40</x>
<y>40</y>
<width>31</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string><html><head/><body><p><span style=" font-weight:600;">File:</span></p></body></html></string>
</property>
</widget>
<widget class="QLabel" name="lblFilePath">
<property name="geometry">
<rect>
<x>40</x>
<y>60</y>
<width>221</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string><html><head/><body><p><span style=" font-style:italic;">FilePath</span></p></body></html></string>
</property>
</widget>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>280</width>
<height>26</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>
试试看:
maun.py
import sys
import os # +++
from PyQt5 import QtCore, QtGui, QtWidgets, uic
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class FileDialog(QWidget):
def __init__(self):
super(FileDialog, self).__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('Choose image-file')
self.setGeometry(100, 100, 640, 480)
# self.openFileNameDialog()
# self.openFileNamesDialog()
# self.saveFileDialog()
def openFileNameDialog(self):
options = QFileDialog.Options()
options |= QFileDialog.DontUseNativeDialog
fileName, _ = QFileDialog.getOpenFileName(self,
"QFileDialog.getOpenFileName()",
"",
"All Files (*);;Python Files (*.py)",
options=options)
if fileName:
print("fileName->", fileName)
return fileName # +++
def openFileNamesDialog(self):
options = QFileDialog.Options()
options |= QFileDialog.DontUseNativeDialog
files, _ = QFileDialog.getOpenFileNames(self,
"QFileDialog.getOpenFileNames()",
"",
"All Files (*);;Python Files (*.py)",
options=options)
if files:
print("files -->>", files)
return files # +++
def saveFileDialog(self):
options = QFileDialog.Options()
options |= QFileDialog.DontUseNativeDialog
fileName, _ = QFileDialog.getSaveFileName(self,
"QFileDialog.getSaveFileName()",
"",
"All Files (*);;Text Files (*.txt)",
options=options)
if fileName:
print("save fileName->", fileName)
return fileName # +++
class Main(QtWidgets.QMainWindow):
def __init__(self):
super(Main, self).__init__()
uic.loadUi('MainWindow.ui', self)
self.btnChooseFile.clicked.connect(self.chooseFile)
self.btnChooseFile_2.clicked.connect(self.chooseFiles) # +++
self.btnChooseFile_3.clicked.connect(self.saveFile) # +++
def chooseFile(self):
# fileDialog = OpenFileDialog.FileDialog()
fileDialog = FileDialog()
fileName = fileDialog.openFileNameDialog()
self.lblFile.setText( "<b>File:</b> {}".format( os.path.basename(fileName) ))
self.lblFilePath.setText( "<b>FilePath:</b> {}".format( os.path.dirname(fileName) ))
def chooseFiles(self):
fileDialog = FileDialog()
files = fileDialog.openFileNamesDialog()
fileNames = ", ".join([ os.path.basename(fileName) for fileName in files ])
self.lblFile.setText( "<b>Files:</b> {}".format( os.path.basename(fileNames) ))
self.lblFilePath.setText( "<b>FilePath:</b> {}".format( os.path.dirname(files[0]) ))
def saveFile(self):
fileDialog = FileDialog()
fileName = fileDialog.saveFileDialog()
self.lblFile.setText( "<b>Save File:</b> {}".format( os.path.basename(fileName) ))
self.lblFilePath.setText( "<b>FilePath:</b> {}".format( os.path.dirname(fileName) ))
if __name__ == '__main__':
app = QtWidgets.QApplication([])
win = Main()
win.show()
sys.exit(app.exec())
导入系统
导入os#+++
从PyQt5导入QtCore、QtGui、QtWidgets、uic
从PyQt5.QtCore导入*
从PyQt5.QtGui导入*
从PyQt5.QtWidgets导入*
类文件对话框(QWidget):
定义初始化(自):
super(FileDialog,self)。\uuuu init\uuuuu()
self.initUI()
def initUI(self):
self.setWindowTitle('选择图像文件')
self.setGeometry(100100640480)
#self.openfilenamedilog()
#self.openFileNamesDialog()
#self.saveFileDialog()
def OpenFileName对话框(自身):
options=QFileDialog.options()
选项|=QFileDialog.DontUsenactiveDialog
文件名,QFileDialog.getOpenFileName(self,
“QFileDialog.getOpenFileName()”,
"",
“所有文件(*);Python文件(*.py)”,
选项=选项)
如果文件名为:
打印(“文件名->”,文件名)
返回文件名#+++
def openFileNamesDialog(自):
options=QFileDialog.options()
选项|=QFileDialog.DontUsenactiveDialog
文件,QFileDialog.getOpenFileName(self,
“QFileDialog.getOpenFileNames()”,
"",
“所有文件(*);Python文件(*.py)”,
选项=选项)
如果文件:
打印(“文件-->>”,文件)
返回文件#+++
def SAVEFILE对话框(自身):
options=QFileDialog.options()
选项|=QFileDialog.DontUsenactiveDialog
文件名,QFileDialog.getSaveFileName(self,
“QFileDialog.getSaveFileName()”,
"",
“所有文件(*);文本文件(*.txt)”,
选项=选项)
如果文件名为:
打印(“保存文件名->”,文件名)
返回文件名#+++
类Main(QtWidgets.QMainWindow):
定义初始化(自):
超级(主,自).\uuuu初始化
uic.loadUi('MainWindow.ui',self)
self.btnChooseFile.clicked.connect(self.chooseFile)
self.btnChooseFile_2.单击.connect(self.chooseFiles)#+++
self.btnChooseFile_3.单击.connect(self.saveFile)#+++
def chooseFile(自):
#fileDialog=OpenFileDialog.fileDialog()
fileDialog=fileDialog()
fileName=fileDialog.openfilenamedilog()
self.lblFile.setText(“文件:{}”.format(os.path.basename(fileName)))
self.lblFilePath.setText(“文件路径:{}.format(os.path.dirname(fileName)))
def chooseFiles(自):
fileDialog=fileDialog()
files=fileDialog.openFileNamesDialog()
fileNames=“,”.join([os.path.basename(fileName)表示文件中的文件名])
self.lblFile.setText(“文件:{}”.format(os.path.basename(fileNames)))
self.lblFilePath.setText(“文件路径:{}”.format(os.path.dirname(文件[0]))
def保存文件(自身):
fileDialog=fileDialog()
fileName=fileDialog.saveFileDialog()
self.lblFile.setText(“保存文件:{}”.format(os.path.basename(fileName)))
self.lblFilePath.setText(“文件路径:{}.format(os.path.dirname(fileName)))
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
app=QtWidgets.QApplication([])
win=Main()
win.show()
sys.exit(app.exec())
main window.ui
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>winMain</class>
<widget class="QMainWindow" name="winMain">
<property name="enabled">
<bool>true</bool>
</property>
<property name="minimumSize">
<size>
<width>380</width>
<height>380</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>380</width>
<height>320</height>
</size>
</property>
<property name="windowTitle">
<string>OCR</string>
</property>
<widget class="QWidget" name="centralwidget">
<widget class="QPushButton" name="btnChooseFile">
<property name="geometry">
<rect>
<x>10</x>
<y>10</y>
<width>93</width>
<height>28</height>
</rect>
</property>
<property name="text">
<string>Choose file</string>
</property>
</widget>
<widget class="QLabel" name="lblFile">
<property name="geometry">
<rect>
<x>30</x>
<y>70</y>
<width>321</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string><html><head/><body><p><span style=" font-weight:600;">File:</span></p></body></html></string>
</property>
</widget>
<widget class="QLabel" name="lblFilePath">
<property name="geometry">
<rect>
<x>30</x>
<y>100</y>
<width>321</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string><html><head/><body><p><span style=" font-style:italic;">FilePath</span></p></body></html></string>
</property>
</widget>
<widget class="QPushButton" name="btnChooseFile_2">
<property name="geometry">
<rect>
<x>140</x>
<y>10</y>
<width>93</width>
<height>28</height>
</rect>
</property>
<property name="text">
<string>Choose files</string>
</property>
</widget>
<widget class="QPushButton" name="btnChooseFile_3">
<property name="geometry">
<rect>
<x>260</x>
<y>10</y>
<width>93</width>
<height>28</height>
</rect>
</property>
<property name="text">
<string>Save file</string>
</property>
</widget>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>380</width>
<height>21</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>
温曼
真的
380
380
380
320
光学字符识别
10
10
93
28
选择文件
30
70
321
16
htmlhead/bodypspan style=“font-weight:600;”文件:/span/p/body/html
30
100
321
16
htmlhead/bodypspan style=“font-style:italic;”FilePath/span/p/body/html
140
10
93
28
选择文件
260
10
93
28
保存文件
0
0
380
21
试试看:
maun.py
import sys
import os # +++
from PyQt5 import QtCore, QtGui, QtWidgets, uic
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class FileDialog(QWidget):
def __init__(self):
super(FileDialog, self).__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('Choose image-file')
self.setGeometry(100, 100, 640, 480)
# self.openFileNameDialog()
# self.openFileNamesDialog()
# self.saveFileDialog()
def openFileNameDialog(self):
options = QFileDialog.Options()
options |= QFileDialog.DontUseNativeDialog
fileName, _ = QFileDialog.getOpenFileName(self,
"QFileDialog.getOpenFileName()",
"",
"All Files (*);;Python Files (*.py)",
options=options)
if fileName:
print("fileName->", fileName)
return fileName # +++
def openFileNamesDialog(self):
options = QFileDialog.Options()
options |= QFileDialog.DontUseNativeDialog
files, _ = QFileDialog.getOpenFileNames(self,
"QFileDialog.getOpenFileNames()",
"",
"All Files (*);;Python Files (*.py)",
options=options)
if files:
print("files -->>", files)
return files # +++
def saveFileDialog(self):
options = QFileDialog.Options()
options |= QFileDialog.DontUseNativeDialog
fileName, _ = QFileDialog.getSaveFileName(self,
"QFileDialog.getSaveFileName()",
"",
"All Files (*);;Text Files (*.txt)",
options=options)
if fileName:
print("save fileName->", fileName)
return fileName # +++
class Main(QtWidgets.QMainWindow):
def __init__(self):
super(Main, self).__init__()
uic.loadUi('MainWindow.ui', self)
self.btnChooseFile.clicked.connect(self.chooseFile)
self.btnChooseFile_2.clicked.connect(self.chooseFiles) # +++
self.btnChooseFile_3.clicked.connect(self.saveFile) # +++
def chooseFile(self):
# fileDialog = OpenFileDialog.FileDialog()
fileDialog = FileDialog()
fileName = fileDialog.openFileNameDialog()
self.lblFile.setText( "<b>File:</b> {}".format( os.path.basename(fileName) ))
self.lblFilePath.setText( "<b>FilePath:</b> {}".format( os.path.dirname(fileName) ))
def chooseFiles(self):
fileDialog = FileDialog()
files = fileDialog.openFileNamesDialog()
fileNames = ", ".join([ os.path.basename(fileName) for fileName in files ])
self.lblFile.setText( "<b>Files:</b> {}".format( os.path.basename(fileNames) ))
self.lblFilePath.setText( "<b>FilePath:</b> {}".format( os.path.dirname(files[0]) ))
def saveFile(self):
fileDialog = FileDialog()
fileName = fileDialog.saveFileDialog()
self.lblFile.setText( "<b>Save File:</b> {}".format( os.path.basename(fileName) ))
self.lblFilePath.setText( "<b>FilePath:</b> {}".format( os.path.dirname(fileName) ))
if __name__ == '__main__':
app = QtWidgets.QApplication([])
win = Main()
win.show()
sys.exit(app.exec())
导入系统
导入os#+++
从PyQt5导入QtCore、QtGui、QtWidgets、uic
从PyQt5.QtCore导入*
从PyQt5.QtGui导入*
从PyQt5.QtWidgets导入*
类文件对话框(QWidget):
定义初始化(自):
super(FileDialog,self)。\uuuu init\uuuuu()
self.initUI()
def initUI(self):
self.setWindowTitle('选择图像文件')
self.setGeometry(100100640480)
#self.openfilenamedilog()
#self.openFileNamesDialog()
#self.saveFileDialog()
def OpenFileName对话框(自身):
options=QFileDialog.options()
选项|=QFileDialog.DontUsenactiveDialog
文件名,QFileDialog.getOpenFileName(self,
“QFileDialog.getOpenFileName()”,
"",
def open_file_dialog(self):
# Just this line will open a standard file dialog for you
res = QFileDialog.getOpenFileName(QFileDialog(self), # parent
"Select file", # Dialog title
"/some/path/to/open/by/default",
"JPEG Image (*.jpeg)") # filter
# Once you reach here - dialog will be closed
if res == ('', ''):
print("Cancelled")
else:
self.process_result(res)