2017-02-05 12 views
2

Qt 디자이너를 사용하여 만든 양식의 그래픽 위젯에 몇 가지 기능을 추가해야합니다.Qt 디자이너 위젯 코드를 사용자 정의 하시겠습니까?

class custom_gv(QGraphicsView): 
    def __init__(self): 
     super().__init__() 

    def zoom(self): 
     # custom code here 

을하지만,이 경우 그래픽보기 내가 Qt는 디자이너에서 만든 윈도우의 일부입니다

예를 들어 나는 일반적으로 같은 것을 할 것입니다. 나는 당신이 사용할 수있는 알고있는 Qt는 디자이너의 기능 "을 추진"그러나 나는 특히 내가 Qt는 디자이너 창을 사용하려면이 방법을 사용하는 것이 고려, 코드에서 그것을 사용하는 방법을 모른다 :

from PyQt5.uic import loadUiType 

custom_window = loadUiType('ui.ui') 

class Window(QMainWindow, custom_window): 
    def __init__(self): 
     QMainWindow.__init__(self) 
     custom_window.__init__(self) 
     self.setupUi(self) 

어떻게 것을 Qt Designer를 사용할 때 내 창에서 그래픽보기 코드를 사용자 지정하는 방법에 대해 설명합니다.

+0

위젯을 홍보하는 것은 [매우 간단합니다] (http://stackoverflow.com/a/22543079/984421). 특히 당신이 그것에 대해 이해하지 못하는 것은 무엇입니까? – ekhumoro

+0

첫 번째 코드로 변환하는 방법 대신 LoadUiType 메서드를 사용할 때 PyQt에서 어떻게 사용합니까? –

+0

정확히 같은 방식으로 작동합니다. – ekhumoro

답변

2

이 문제를 해결하는 가장 일반적인 방법은 widget promotion입니다. 이렇게하면 Qt Designer에 정의 된 위젯을 사용자 정의 클래스로 바꿀 수 있습니다. 이 작업을 수행하는 단계는 다음과 같습니다.

Qt Designer에서 바꾸고 자하는 QGraphicsView을 선택한 다음 마우스 오른쪽 버튼을 클릭하고 으로 승격 ...을 선택하십시오. 대화 상자에서 프로모션 클래스 이름을 'custom_gv'로 설정하고 헤더 파일을이 클래스가 포함 된 모듈의 파이썬 가져 오기 경로 (예 : 'mypkg.widgets')로 설정합니다. 그런 다음 을 클릭하고을 추가하고 을 승격으로 변경하면 개체 관리자 창에서 클래스가 "QGraphicsView"에서 "custom_gv"로 변경됩니다.

Qt는 디자이너 ui 파일이 PyQt는 코드로 변환되면 자동으로 다음과 같이 import 문을 추가합니다 :이 같은

from mypkg.widgets import custom_gv 

다음 변환 된 코드에서 교체 할 것을 :

self.graphicsView = QtWidgets.QGraphicsView(MainWindow) 
이와

:

self.graphicsView = custom_gv(MainWindow) 

그래서 코드 ui 파일에는 사용자 지정 클래스에 대해 아무 것도 알지 못합니다.이 이름은 다른 곳에서 가져온 이름입니다. 즉, 원하는 방식으로 맞춤 클래스를 자유롭게 작성할 수 있습니다.

PyQt에서이 메커니즘은 uic 모듈과 마찬가지로 pyuic과 같은 방식으로 작동합니다. loadUiloadUiType 함수는 pyuic과 정확히 동일한 코드를 생성합니다. 유일한 차이점은 pyuic 도구가 생성 된 코드를 파일에 쓰는 반면 uic 모듈은 exec을 통해 직접로드한다는 것입니다.