수색…


비고

이 절에서는 pyqt5가 무엇인지, 그리고 개발자가 왜 그것을 사용하고 싶어하는지에 대한 개요를 제공합니다.

또한 pyqt5 내의 큰 주제를 언급하고 관련 주제에 링크해야합니다. pyqt5에 대한 문서는 새로운 것이므로 관련 주제의 초기 버전을 만들어야 할 수도 있습니다.

설치 또는 설정

  1. Anaconda (PyQt5는 빌드 인)를 설치하십시오. 특히 Windows 사용자에게 좋습니다.
  2. PyCharm에 QtDesigner 및 QtUIConvert 통합 (외부 도구)
    • PyCharm Settings > Tools > External Tools 열기
    • 도구 만들기 (QtDesigner) - * .ui 파일 편집에 사용
    • 도구 만들기 (PyUIConv) - * .ui를 * .py로 변환하는 데 사용됩니다.
  3. 데모 쓰기
    • 외부 도구 (QtDesigner)로 새 window.ui
    • 외부 도구 (PyUIConv)로 window.py로 변환
    • 데모
      import sys
      from PyQt5.QtWidgets import QApplication,QMainWindow
      from window import Ui_MainWindow
      
      if __name__ == '__main__':
          app = QApplication(sys.argv)
          w = QMainWindow()
          ui = Ui_MainWindow()
          ui.setupUi(w)
          w.show()
          sys.exit(app.exec_())
      

Hello World 예제

이 예제는 레이아웃에 버튼과 라인 편집이있는 간단한 윈도우를 만듭니다. 또한 신호를 슬롯에 연결하는 방법을 보여주기 때문에 버튼을 클릭하면 라인 편집에 텍스트가 추가됩니다.

import sys
from PyQt5.QtWidgets import QApplication, QWidget


if __name__ == '__main__':
    
    app = QApplication(sys.argv)

    w = QWidget()
    w.resize(250, 150)
    w.move(300, 300)
    w.setWindowTitle('Hello World')
    w.show()
    
    sys.exit(app.exec_())

분석

app = QtWidgets.QApplication(sys.argv)

모든 PyQt5 애플리케이션은 애플리케이션 객체를 생성해야한다. sys.argv 매개 변수는 명령 줄의 인수 목록입니다. Python 스크립트는 쉘에서 실행할 수 있습니다.

w = QWidget()

QWidget 위젯은 PyQt5의 모든 사용자 인터페이스 객체의 기본 클래스입니다. QWidget 의 기본 생성자를 제공합니다. 기본 생성자에는 부모가 없습니다. 부모가없는 위젯을 창이라고합니다.

w.resize(250, 150)

resize() 메서드는 위젯의 크기를 조절합니다. 250px 너비 및 150px 높이입니다.

w.move(300, 300)

move() 메소드는 x = 300, y = 300 좌표에서 위젯을 화면상의 위치로 이동시킵니다.

w.setWindowTitle('Hello World')

여기서 우리는 창 제목을 설정합니다. 제목이 제목 표시 줄에 표시됩니다.

w.show()

show() 메소드는 위젯을 화면에 표시합니다. 위젯은 먼저 메모리에 생성되고 나중에 화면에 표시됩니다.

sys.exit(app.exec_())

마지막으로 응용 프로그램의 메인 루프를 입력합니다. 이 시점부터 이벤트 처리가 시작됩니다. 메인 루프는 윈도우 시스템으로부터 이벤트를 받아서 어플리케이션 위젯으로 보낸다. mainloop은 exit() 메소드를 호출하거나 메인 위젯이 파괴되면 끝납니다. sys.exit() 메서드는 깨끗한 종료를 보장합니다. 응용 프로그램이 어떻게 종료되었는지 환경에 알립니다.

exec_() 메소드에는 밑줄이 있습니다. 이것은 exec가 Python 키워드이기 때문입니다. 따라서 대신 exec_() 가 사용되었습니다.

응용 프로그램 아이콘 추가하기

import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QIcon


class Example(QWidget):
    
    def __init__(self):
        super().__init__()
        
        self.initUI()
        
        
    def initUI(self):
        
        self.setGeometry(300, 300, 300, 220)
        self.setWindowTitle('Icon')
        self.setWindowIcon(QIcon('web.png'))        
    
        self.show()
        
        
if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_()) 

분석

파이썬의 함수 인자

파이썬에서는 사용자 정의 함수가 네 가지 유형의 인수를 취할 수 있습니다.

  1. 기본 인수 :
  • 함수 정의

    def defaultArg( name, msg = "Hello!"):

  • 함수 호출

    defaultArg( name)

  1. 필수 인수 :
  • 함수 정의

    def requiredArg (str,num):

  • 함수 호출 :

    requiredArg ("Hello",12)

  1. 키워드 인수 :
  • 함수 정의

    def keywordArg( name, role ):

  • 함수 호출

    keywordArg( name = "Tom", role = "Manager")

    또는

    keywordArg( role = "Manager", name = "Tom")

  1. 가변 인수 수 :
  • 함수 정의

    def varlengthArgs(*varargs):

  • 함수 호출

    varlengthArgs(30,40,50,60)

class Example(QWidget):
    
    def __init__(self):
        super().__init__()
        ...

객체 지향 프로그래밍에서 세 가지 중요한 사항은 클래스, 데이터 및 메소드입니다. 여기에 Example 이라는 새 클래스를 만듭니다. Example 클래스는 QWidget 클래스에서 상속받습니다. 즉, Example 클래스의 첫 번째 클래스와 상속 된 클래스의 두 번째 생성자를 호출합니다. super() 메소드는 Example 클래스의 부모 객체를 반환하고 생성자를 호출합니다. self 변수는 객체 자체를 참조합니다.

왜 우리는 __init__ 을 사용 했습니까?

이것 좀 봐:

class A(object):
    def __init__(self):
        self.lst = []

class B(object):
    lst = []

지금 시도해보십시오.

>>> x = B()
>>> y = B()
>>> x.lst.append(1)
>>> y.lst.append(2)
>>> x.lst
[1, 2]
>>> x.lst is y.lst
True

이:

>>> x = A()
>>> y = A()
>>> x.lst.append(1)
>>> y.lst.append(2)
>>> x.lst
[1]
>>> x.lst is y.lst
False

이것이 인스턴스 B 전에 B 클래스의 x가 설정된다는 것을 의미합니까?

예, 클래스 속성입니다 (인스턴스간에 공유 됨). 클래스 A에있는 동안 그것은 인스턴스 속성입니다.

self.initUI() 

GUI 작성은 initUI() 메소드에 위임됩니다.

self.setGeometry(300, 300, 300, 220)
self.setWindowTitle('Icon')
self.setWindowIcon(QIcon('web.png'))  

세 가지 메소드 모두 QWidget 클래스에서 상속되었습니다. setGeometry() 는 두 가지 작업을 수행합니다. 화면에서 윈도우를 찾고 크기를 설정합니다. 처음 두 매개 변수는 창의 x 및 y 위치입니다. 세 번째는 너비이고 네 번째는 창의 높이입니다. 사실, 한 가지 방법으로 resize()move() 메서드를 결합합니다. 마지막 메서드는 응용 프로그램 아이콘을 설정합니다. 이렇게하기 위해 QIcon 개체를 만들었습니다. QIcon 은 표시 할 아이콘의 경로를받습니다.

if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

응용 프로그램 W 예제 오브젝트가 작성됩니다. 메인 루프가 시작됩니다.

툴팁 표시

import sys
from PyQt5.QtWidgets import (QWidget, QToolTip, 
    QPushButton, QApplication)
from PyQt5.QtGui import QFont    


class Example(QWidget):
    
    def __init__(self):
        super().__init__()
        
        self.initUI()
        
        
    def initUI(self):
        
        QToolTip.setFont(QFont('SansSerif', 10))
        
        self.setToolTip('This is a <b>QWidget</b> widget')
        
        btn = QPushButton('Button', self)
        btn.setToolTip('This is a <b>QPushButton</b> widget')
        btn.resize(btn.sizeHint())
        btn.move(50, 50)       
        
        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('Tooltips')    
        self.show()
        
        
if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

분석

QToolTip.setFont(QFont('SansSerif', 10))

이 정적 메서드는 툴팁을 렌더링하는 데 사용되는 글꼴을 설정합니다. 우리는 10px SansSerif 글꼴을 사용합니다.

self.setToolTip('This is a <b>QWidget</b> widget')

툴팁을 만들려면 setTooltip() 메서드를 호출합니다. 서식있는 텍스트 형식을 사용할 수 있습니다.

btn = QPushButton('Button', self)
btn.setToolTip('This is a <b>QPushButton</b> widget')

푸시 버튼 위젯을 만들고이를위한 툴팁을 설정합니다.

btn.resize(btn.sizeHint())
btn.move(50, 50) 

버튼의 크기가 변경되고 창에서 이동합니다. sizeHint() 메서드는 버튼의 권장 크기를 제공합니다.

프로젝트를 쓸모없는 / 인스톨러로 꾸리십시오.

cx_Freeze - 프로젝트를 excutable / installer에 패키징 할 수있는 툴

  • pip로 설치 한 후 demo.py 패키지를 demo.py setup.py 가 필요합니다.
import sys
from cx_Freeze import setup, Executable

# Dependencies are automatically detected, but it might need fine tuning.
build_exe_options = {
    "excludes": ["tkinter"],
    "include_files":[('./platforms','./platforms')] # need qwindows.dll for qt5 application
}

# GUI applications require a different base on Windows (the default is for a
# console application).
base = None
if sys.platform == "win32":
    base = "Win32GUI"

setup(  name = "demo",
        version = "0.1",
        description = "demo",
        options = {"build_exe": build_exe_options},
        executables = [Executable("demo.py", base=base)])
  • 그 다음에 건축하다
python .\setup.py build
  • 그 다음에 dist
python .\setup.py bdist_msi


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow