2017-10-31 20 views
0

저는 파이썬에 매우 익숙해졌습니다. 빈 문자열로 취소 버튼 출력을 누른 후, PyQt4 인쇄 (파일명) 문 사용 파이썬 2에서PyQt4와 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('Examle', 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_()) 

: I 파이썬 3 PyQt5를 사용 QFileDialog를 개방 코드 블록을 갖는다. 내가 PyQt5를 사용하여 파이썬 3에서 동일한 코드를 실행하면 내가 얻을 :

('', '')

참고 : 따옴표 가

사람이 무슨 일이 일어나고 있는지 설명 할 수 따옴표

있습니다 에? 나는 PyQt4와 PyQt5 사이의 문서에서 아무것도 찾을 수 없었다. 나는 파이썬 2와 파이썬 3 사이에서 문자열이 변경되었다는 것을 알고 있지만, 그러한 변경으로 인해 이와 같은 문제가 발생할 것인지 확신 할 수 없다. 감사!

+0

제목에있는 AttributeError가 본인이 묘사 한 내용에 어떤 영향을 주는지 명확하지 않습니다. AttributeError를 얻었습니까? – user2357112

+0

@eyllanesc 그건 완전히 나쁘다. 내가 'Ask a Question (질문하기') '를 클릭했을 때 나는 무엇이 계속되고 있는지를 알기 전에 내가 물어볼 이전 질문이 있었다. 그래서 제목은 그 것으로부터 설정되었습니다. 나는 이것을 업데이트했다 !! –

+0

@eyllanesc Python 2.7.14와 PyQt 4.11.4에서 비어있는 것 같습니다 –

답변

1

PyQt4의 getOpenFileName 함수는 선택된 파일의 이름 인 문자열을 반환하고, 아무것도 선택하지 않으면 빈 문자열을 반환합니다. 첫 번째는 PyQt4과 동일한 동작이있는 문자열이며, 두 번째 요소는 사용 된 필터이다

filename = QFileDialog.getOpenFileName(self, "Open Template", "c:\\", "Templates (*.xml);;All Files (*.*)") 

그러나 PyQt5이 2 개 요소 튜플을 반환한다.

filename, filters = QFileDialog.getOpenFileName(self, "Open Template", "c:\\", "Templates (*.xml);;All Files (*.*)") 

참고 : 일반적으로 방법, 항목 및 결과의 이름이 유사하기 때문에 PyQt5의 문서의 대부분은, Qt5입니다.

+0

이 경우 가장 신뢰할 수있는 방법으로 필터 부분을 제거하여 경로 이름과 파일 만있는 문자열을 얻을 수 있습니까? 기본적으로 PyQt5로 변환 할 때 PyQt4의 동작을 모방합니다. 예제 C : \ SomeArbitraryDirectory \ file.xml –

+0

필자가 이미 입력 했으므로 변수 filename에는 파일 이름 만 있습니다. 내 대답이 도움이된다면, 올바른 것으로 표시하는 것을 잊지 마십시오. – eyllanesc

+0

물어 본 후, 감사합니다! 설명대로 작동합니다. –