2017-12-26 6 views
1


나는 (나를 위해 매우 복잡한 모양) PyQt5을 배우고 QMessageBox.Yes (또는)가 특별한 값을 갖는 이유는 나를 위해 그것을 16384이며, 궁금. 그게 무슨 뜻입니다 :값/QMessageBox.No

from PyQt5 import QApplication, QWidget, QMessageBox 

class App(QWidget): 
    def message_box(self): 
     resp = QMessageBox.question(self, 'foo', 'bar', QMessageBox.Yes | QMessageBox.No, QMessageBox.No) 
     print(resp) 

그것은 인쇄 16384 (Yes (예)를 클릭하면) 또는 65536 (아니오를 클릭하면), 왜 참 또는 거짓? QMessageBox.Yes 또는 QMessageBox.No으로 나중에 비교할 수 있음을 이해합니다.하지만 그 마법 값은 어디에서 사용되고 왜 사용되는지 궁금합니다. 우리는 QT 문서 내부를 보면

+0

[QMessageBox docs] (https://doc.qt.io/qt-5/qmessagebox.html#StandardButton-enum)에 문의하는 데 몇 분이 걸렸을 때 모두 신속하게 밝혀졌습니다. – ekhumoro

답변

1

예와 아니요가 유일한 옵션이 아니기 때문에. 예, 아니오, 취소 및 중단 (응용 프로그램에 대해 다른 의미가 모두 있음)을 원한다면 어떻게해야합니까? 하나의 부울로 표현할 수는 없습니다.

대신 정수를 사용하는 것이 일반적입니다. 물론 각 정수가 의미하는 것을 기억하는 것은 짜증나게하기 때문에 멋지게 명명 된 변수에 저장되므로 코드가 읽기 쉽도록 유지됩니다!

사용 된 특정 값에 대해 본질적으로 특별한 것은 없습니다. 비트 수 또는 비트 수를 사용하여 단일 정수로 결합 할 수있는 2 (2^14 및 2^16) "연산을 수행 한 다음 나중에"bitwise and "를 사용하여 결과 정수에서 추출합니다. 이는 옵션 플래그를 단일 변수에 결합하는 일반적인 방법이므로 옵션을 추가 할 때마다 새 인수를 함수/메소드에 추가 할 필요가 없습니다 (선택적 메소드 인수를 수행 할 수없는 언어에서 중요 함). 만약 당신이 알지 못한다면, 당신은 이미 bitwise를 사용하거나 메시지 상자 생성자에서 플래그를 결합합니다!

+0

답변 해 주셔서 감사합니다. – m4k5

1

, 우리는하여 QMessageBox.question 메소드의 반환 값에 대해 다음을 읽을 수 있습니다 :

클릭 된 표준 버튼의 ID를 돌려줍니다. 우리는 소수에이 16 진수 값을 변환하면 우리는

QMessageBox::Yes 0x00004000 QMessageBox::No 0x00010000

:

모든 표준 버튼의 정체성은 문서로 지정된 정수이며, 16384와 65536을 얻으십시오.

왜 T가 아닙니다 후회 또는 거짓?

더 많은 옵션은 QT의 설명서를 읽어야 자세한 내용은 더 많은 표준 버튼 (예 :가. 좋아, 열기, 저장, 등 취소)

가 여기에 있기 때문에 : http://doc.qt.io/qt-5/qmessagebox.html (예, C++ 용이지만 파이썬 래퍼에도 적용 가능합니다)