python – PyQt4和PyQt5中的QFileDialog字符串有区别吗?
作者:互联网
我有一个代码块,使用Python3和PyQt5打开QFileDialog:
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QFileDialog
import sys
class MCVE(QWidget):
def __init__(self):
super().__init__()
self.initialize()
def initialize(self):
self.setWindowTitle('MCVE')
self.setGeometry(50, 50, 400, 200)
btn = QPushButton('Example', self)
btn.clicked.connect(self.clicked)
self.show()
def clicked(self):
filename = QFileDialog.getOpenFileName(
self, "Open Template", "c:\\",
"Templates (*.xml);;All Files (*.*)")
print(filename)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MCVE()
sys.exit(app.exec_())
在Python 2中使用PyQt4 print(filename)语句,在按下取消按钮后,输出为空字符串.当我使用PyQt5在Python 3中运行相同的代码时,我得到:
(”, ”)
注意:报价是单引号
有人可以解释发生了什么吗?我在PyQt4和PyQt5之间的文档下找不到任何东西.我知道Python 2和Python 3之间的字符串发生了变化,但我不确定这些变化是否会导致这样的问题.谢谢!
解决方法:
PyQt4中的getOpenFileName
函数返回一个字符串,该字符串是所选文件的名称,如果没有选中,则返回一个空字符串.
filename = QFileDialog.getOpenFileName(self, "Open Template", "c:\\", "Templates (*.xml);;All Files (*.*)")
但是在PyQt5中,它返回一个包含2个元素的元组,其中第一个是与PyQt4具有相同行为的字符串,第二个元素是使用的过滤器.
filename, filters = QFileDialog.getOpenFileName(self, "Open Template", "c:\\", "Templates (*.xml);;All Files (*.*)")
注意:PyQt5的大多数文档都在Qt5中,因为通常方法的名称,输入和结果是相似的.
标签:pyqt5,python,pyqt,pyqt4,qfiledialog 来源: https://codeday.me/bug/20190917/1808836.html