我有一段代码,可以使用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_())
在使用pyqt4的python 2中,在按下cancel按钮后,print(filename)语句将作为空字符串输出。当我使用pyqt5在python 3中运行相同的代码时,我得到:
('', '')
注:引号为单引号
有人能解释一下发生了什么事吗?我在pyqt4和pyqt5之间的文档中找不到任何内容。我知道Python2和Python3之间的字符串发生了变化,但我不确定这些变化是否会导致这样的问题。谢谢
1条答案
按热度按时间kiayqfof1#
这个
getOpenFileName
pyqt4中的函数返回一个字符串,该字符串是所选文件的名称,如果未选择任何文件,则返回一个空字符串。但是,在pyqt5中,它返回一个包含2个元素的元组,其中第一个元素是一个与pyqt4中行为相同的字符串,第二个元素是使用的过滤器。
注:pyqt5的大部分文档都在qt5中,因为通常方法的名称、输入和结果是相似的。