예제로 배우는 PyQt

예제 중심으로 배우는 PyQt 프로그래밍

예제 작성 과정 #2 - Python으로 연결하기

Qt Designer로 만든 UI를 Python에서 실행해볼 수 있다.

예제 작성 과정 #1에서는 Qt Designer를 이용하여 'Hello World'를 출력하는 창을 만들어 두었다. 

지금부터는 만들어둔 창을 파이썬 코드에 붙이는 과정을 진행하여 작성한 코드를 실행했을때 우리가 만든 창이 출력되는지를 보도록 하자.

코드는 매우 간단한 형태이다. 처음에는 이 코드를 이해하려 하기 보다는 앞으로 진행될 다른 예제들과의 공통적인 패턴을 먼저 찾아보고 자세한 부분을 파고들도록 하자.

# coding: utf-8

import sys
from PyQt5 import QtWidgets
from PyQt5 import uic

class Form(QtWidgets.QDialog):
    def __init__(self, parent=None):
        QtWidgets.QDialog.__init__(self, parent)
        self.ui = uic.loadUi("form.ui")
        self.ui.show()

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    w = Form()
    sys.exit(app.exec())

위의 소스를 복사하여 '예제 작성 과정 #1'에서 저장했던 곳에 hello.py 라는 파일을 만들어서 붙여넣도록 하자.

사용하는 편집기에 따라서 실행 방법은 다를 수 있겠지만 기본적으로 해당 디렉토리에서 아래의 명령어를 입력해 준다.

# Pythhon 3.x 만 설치되어 있는 경우
python hello.py

# Python 2.7과 3.4가 같이 설치되어 있는 경우
py -3.4 hello.py

아래와 같이 실행된 화면을 볼 수 있다.

helloworld

댓글

댓글 본문
  1. ghkdwhdals
    Backend terminated or disconnected. Use 'Stop/Restart' to restart.와 같은 오류는 어떻게 해결해야 할까요...??재설치해보고 다른 컴퓨터로도 재시도해봤는데도 안됩니다ㅠㅠㅠㅠㅠㅠ
  2. 임덕규
    에러메세지를 올려주시면 파악이 더 쉬울 거 같습니다.
    제 생각으로는 파이참에서 프로젝트 생성시 만든 파이썬 가상환경에 PyQt를 설치하셨다고 생각됩니다. 그리고 다른 터미널을 열어서 PyQt가 없는 시스템에 설치된 파이썬으로 실행하려고 해서 에러가 나는게 아닌가 싶습니다.
    대화보기
    • 왜 안될까요,,,
      저도 rsa님과 같은 뜻으로 이해했습니다만 안되네요
      파이참을 사용 중이고, ui파일과 hello.py를 같은 폴더(프로잭트 폴더) 내에 만들고
      새로운 파일을 생성하여 phyton hello.py.를 입력했으나 실행되지가 않네요ㅠㅠ
      hello.py자체는 실행시키면 ui 파일이 잘 뜹니다!
    • 사용하는 편집기에 따라서 실행 방법은 다를 수 있겠지만 기본적으로 해당 디렉토리에서 아래의 명령어를 입력해 준다.

      -> 이 부분을 잘 모르겠습니다.
      - 파이참에서
      - hello.py가 있는 그 프로젝트 안에서
      - new file을 만들고
      - 위 명령어(python.py)를 입력하고 Run

      이 뜻으로 받아들였는데 아닌가요?
    • 넘어가요
      같은폴더내에 ui파일이 있음에도 form.ui가 없으시다는 분은 코드에서 form.ui 부분이 UI파일명이 많나 확인해주시면 되겠습니다.
    • 임덕규
      포맷까지 하셨군요. 해결 방법을 찾으셨다니 다행입니다. 저는 다행히 다른 분들이 겪는 버그들을 본 적이 없어서 질문으로 들어온 버그에 대한 답변이 맞는지 확인이 불가능할 때가 많습니다. 해결방법을 공유해주셔서 감사합니다.
      대화보기
      • jake
        음... 답변을 이제야 봤네요
        이틀동안 포맷까지 감수하며 해봤는데 결국은 PyQt 5.11 버전 버그인 것으로 나타났습니다.

        https://bugs.launchpad.net......236

        PyQt 전부 삭제한 후 위 링크에서 제안한대로 5.9.1로 낮춰서 재설치 했더니 잘 되는군요
        일단은 이렇게 진행한 후 또다른 문제가 발생한다면 말씀해주신 방법대로 다시 해보겠습니다 감사합니다!

        참 그리고 제 개발환경은 Ubuntu Desktop 16.04 LTS 입니다
      • 임덕규
        https://github.com......502

        PyQt를 재설치 해보시거나 위의 링크에서 명시하고 있는 requirements.txt 의 모듈을 설치해보시기 바랍니다.

        requirements.txt에 모듈을 추가하시고,
        pip install -r requirements.txt 로 설치하실 수 있습니다.
        대화보기
        • jake
          qtdesigner까지 설치 및 실행 잘되는데요 코드 실행이 안됩니다

          ImportError: /usr/local/lib/python3.5/dist-packages/PyQt5/QtCore.so: undefined symbol: PySlice_AdjustIndices
          이 에러는 어떻게 해결해야 하나요?
        • 임덕규
          platforms 폴더를 Anaconda3 폴더에 복사해보시기 바랍니다.
          아나콘다를 사용하지 않아서 저 방법으로 문제점이 해결될지는 모르겠습니다만, 해결 사례에 대한 글을 보면 아래의 방법으로 해결했다고 나옵니다.

          그리고, 다른 동일한 증상의 분들을 위해 질문댓글은 지우시지 마시길 바랍니다. 감사합니다.
          대화보기
          • 웜즈추
            solved same problem using below execution.

            COPY the
            Continuum\Anaconda3\Library\plugins\platforms
            folder to
            Continuum\Anaconda3
            이게 어떻게 하라는 거죠?
            대화보기
            • 쿠쿠다스32
              답변 감사합니다.
              한번 C++ 문서도 확인해보도록 하겠습니다.
              대화보기
              • 임덕규
                안녕하세요.
                PyQt에 대해서 공부하시려면 사실 어쩔 수 없이 C++문서를 봐야만 합니다. 아직 PyQt용으로 되어 있는 문서는 없거든요. 저도 C++ 문서를 보고 적용을 하고 있습니다. C++이라고 해도 메소드 사용방법이 크게 다르지는 않거든요.
                대화보기
                • 쿠쿠다스32
                  이번에 Pyqt 및 파이선을 공부하고 있는 사람입니다.
                  궁금한게 있습니다.
                  예를들어서 주소록 같은것을 만든다고 할때

                  제가 하고 싶은것은 디자인 시안은 Qt Designer 로 작업 후
                  코드만 파이참에서 작성하고 싶은데요
                  이를 이용하려면 지금 두번째 형식처럼 uic 를 이용하여, 작성하고 있고


                  예) listView 에 데이터를 넣는다면 listVIew.setModel() 에 데이터를 넣는것 같은데요
                  setModel() 이런 함수 , 메소드는 어디서 검색을 해야 하는건가요? 제가 찾아봤는데 C++ 관련 내용으로 나오고
                  제가 C++을 제대로 배워본적이 없는지라. 검색하는 방법만 알면 좀더 해볼것 같은데 궁금합니다.
                • 임덕규
                  아래 글에서 해결 사례가 있네요. 한 번 시도해보시기 바랍니다.

                  https://github.com......270

                  -------------------------------------
                  solved same problem using below execution.

                  COPY the
                  Continuum\Anaconda3\Library\plugins\platforms
                  folder to
                  Continuum\Anaconda3
                  대화보기
                  • 임덕규
                    제 생각에 다른 에디터를 사용하시는게 아니라 파이썬에서 제공되는 IDLE에 바로 복붙하여 사용하시고 계시는거 같습니다. PyCharm이나 다른 에디터에다가 붙여 넣으신뒤 진행하시거나 한 줄씩 복사하여 붙여넣으시면 제대로 동작할겁니다. 도움이 되셨길.
                    대화보기
                    • 김태원
                      import sys 여기서 에러가 납니다 도와주세요 ㅠㅠ
                      SyntaxError: multiple statements found while compiling a single statement
                    • Felix Hong-Soog Kim
                      Python 2.x 버전과 3.x 버전 동시에 설치된 경우, 또는 64bit 버전 32bit 버전이 동시에 설치된 경우등이 있는데.
                      pycharm에서 사용하는 인터프리터 버전을 확인하시고, 해당 버전에 맞는 pip로 설치하셨는지 확인해보세요.
                      대화보기
                      • 동네곰
                        PyQt5를 나름대로 잘 설치하고, import라인 쓸때 pycharm에서 자동완성까지 떴는데도 import가 안되는 것 같습니다.

                        Traceback (most recent call last):
                        File "gui.py", line 5, in <module>
                        from PyQt5 import QtWidgets
                        ImportError: cannot import name 'QtWidgets'

                        라는 메시지가 나오네요. 혹시 어떤문제인지 도움을 받을 수 있을까요?
                      • 누굴까
                        정말 감사합니다!
                        달나라에 첫발을 내딛은 기분이네요
                      • pimier
                        #qwe Visual Studio 라면 같은 프로젝트에 추가만 해주시면 됩니다. (폴더는 달라도 알아서 잡아줘요. )
                      • PyQt만세
                        form.ui는 같은 main.py와 같은 폴더에 있어야 합니다. 동일경로가 아니라면 path 지정도 해주셔야 합니다.
                      • form.ui 부분에서 해당 파일을 찾을 수 없다는 오류가 뜹니다. 어떻게 해야 할까요?
                      • 파이썬초보2
                        exec_()로 바꾸면 실행됩니당

                        _가 빠져있네요
                      • 파이썬초보
                        안녕하세요 PyQt 처음부터 다 따라오고 있는데욤

                        python2.7.10 쓰는 중인데

                        마지막 줄에 exec 부분에서 신텍스 에러가 뜨네요... 뭐가 문젠지 알려주시면 정말 감사하겠습니다 ㅠㅠ
                      • dellwon
                        Qt4에서는 QtWidgets을 QtGui로 바꾸어 주시면 됩니다. Qt4와 Qt5는 서로 호환이 되지 않으며 QtGui의 경우 Qt5에서는 QtGui, QtPrintSupport와 QtWidgets 모듈로 나누어 졌다고 합니다.