2016-10-31 2 views
0

상단에 QWidget 개체가있는 PyQT5에서 응용 프로그램을 개발 중입니다. 이 응용 프로그램은 '키오스크'모드에서 실행할 수 있어야하므로 내 목표는 그 상단을 모달로 만들고 모 든 실행중인 응용 프로그램을 집중시키는 것입니다.상단 QWidget 모달을 만드는 방법은 무엇입니까?

메인 클래스의 골격은 다음과 같습니다. setWindowModality() 방법 documentation 당으로

app = QApplication(sys.argv) 
MyApp() 
sys.exit(app.exec_()) 

:

class MyApp(QWidget): 
    def __init__(self): 
     QWidget.__init__(self) 
     self.setWindowModality(3) 

내 주요 방법은 다음과 같다 : 나는 이론적으로 선택된 하나에 윈도우의 동작을 설정하는 setWindowModality() 메소드를 호출하고있어합니다 :

Qt.NonModal 0 창은 모달이 아니며 다른 창에 대한 입력을 차단하지 않습니다.

Qt.WindowModal 1 개 창은 부모 창을 하나의 창 계층 구조와 블록 입력, 모든 조부모 창, 그 부모와 조부모 윈도우의 모든 형제 자매에 모달입니다.

Qt.ApplicationModal 2 창은 응용 프로그램과 모달이며 모든 창에 블록 입력이 있습니다.

문제는 창이 모달이 아니므로 웹 브라우저와 같은 다른 응용 프로그램으로 전환 할 수 있다는 것입니다. 바로 이것이 내가 막으려 고하는 것입니다. 나는 또한 값으로 1, 2, 3을 시도했고 그것들은 같은 행동을한다.

다른 앱을 차단하지 않기 위해 디자인 상 제한 될 수 있지만 걱정 스럽지만 확인이 불가능합니다.

내가 여기에 뭔가 분명한 것을 놓치고 있습니까? 문제가 디자인 제한 사항 인 경우 모달 창을 여전히 시뮬레이트 할 수있는 방법이 있습니까?

답변

2

모덜리티는 현재 응용 프로그램에만 적용됩니다. 애플리케이션에 최상위 레벨 창이 하나만 열려 있으면 애플리케이션과 창 모달간에 차이가 없습니다. 이 방식은 다른 응용 프로그램에는 아무런 영향을 미치지 않으므로 원하는 방식으로 구현할 수 없으며 간단한 "데스크탑 모달"플래그가 없습니다.

Qt를 사용하여 창을 full screen으로 만들 수 있지만 다른 방법을 사용하여 사용자가 데스크톱에 액세스하지 못하게하거나 앱을 닫지 않아도됩니다 (종종 ALT-F4 키보드 단축키에 바인딩 됨). 플랫폼이 Windows 인 경우 어떻게해야할지 모르지만 방법이있을 것입니다. X11 (일반적으로 Linux에서 사용됨)에서 가장 간단한 방법은 데스크톱이 없어도 데스크톱없이 앱을 실행하는 것입니다. 이 작업을 쉽게 수행 할 수 있도록 nodm 패키지를 찾으십시오.

+0

전체 화면 접근 방식을 사용하는 것이지만, 차단해야하는 ALT + F4 조합뿐만 아니라 ALT + TAB, "메뉴"키 (CTRL 사이)와 같은 많은 추가 작업이 필요합니다. ALT) ... 할 수는 있겠지만 이점이 더 많은 문제를 가져올 것이라고 생각합니다. 나는'nodm' 패키지를 점검 할 것입니다. – nKn

+0

실제로 이러한 단축키는 모두 데스크톱 관리자가 처리합니다. 데스크톱 관리자가 없음 -> 아무런 문제가 없습니다 (적어도 이러한 바로 가기가 관련되어 있음). – hyde

관련 문제