본문 바로가기
Python

초보자를 위한 Python GUI 프로그래밍 - PyQt5

by YJHTPII 2023. 8. 16.
반응형

 

 

https://wikidocs.net/35484#property-editor

 

02.01 들어가기에 앞서(필독)

[TOC] 이번 페이지에서는 위젯을 다루다보면 대부분의 위젯에서 공통적으로 사용하는 기능 몇가지에 대해서 다루도록 하겠습니다. ##위젯의 글자변경 ![02.01…

wikidocs.net

 

 

02.16 Display - QWebEngineView

초보자를 위한 Python GUI 프로그래밍 예제코드
QWebEngineView Documentation - Qt for Python

이번 페이지의 예제코드는 위의 링크에 있는 02.16 WebEngineView 폴더에 있습니다. 자유롭게 다운받아서 사용하실 수 있습니다. QWebEngineView의 보다 자세한 정보는 위의 링크에 있는 Documentation에서 확인하실 수 있습니다.

본 페이지에서 소개할 QWebEngineView위젯은 PyQt5 5.11 버전부터는 32비트 시스템에서의 사용이 안됩니다. 32비트 시스템을 사용하시는 분들은 Anaconda Prompt, 혹은 Terminal에 아래의 코드를 입력하셔서 자신의 PyQt5 버전을 확인하시기 바랍니다.

from PyQt5.Qt import PYQT_VERSION_STR
print(PYQT_VERSION_STR)

QWebEngineView란 무엇인가?


사진 02.16.01 QWebEngineView


사진 02.16.02 QWebEngineView Property Editor

QWebEngineView란, 웹페이지를 보여줄 수 있는 위젯을 의미합니다. QWebEngnieView는 위의 사진과 같이 url이라는 속성을 가지는데, 이 속성을 변경하여 원하는 웹페이지를 화면에 보여줄 수 있습니다.

QWebEngineView의 시그널과 함수

QWebEngineView의 사용을 도와주는 시그널과 함수들에 대해서 알아보도록 하겠습니다.

QWebEngineView의 시그널

QWebEngineView에서 새롭게 페이지를 로딩하거나, 웹페이지의 Url이 바뀌었을 때, 특정 기능을 수행하도록 하는 코드를 작성해보겠습니다.
QWebEngineView의 시그널은 다음과 같이 작성하며, 생성자의 내부에 작성해야 합니다.

WebEngineView에서 새로운 웹페이지의 Load를 시작했을 때
self.WebEngineView이름.loadStarted.connect(함수)

WebEngineView에서 새로운 웹페이지를 Load 하는 중일때
self.WebEngineView이름.loadProgress.connect(함수)

WebEngineView에서 새로운 웹페이지의 Load를 끝냈을 때
self.WebEngineView이름.loadFinished.connect(함수)

WebEngineView의 url이 바뀌었을 때
self.WebEngineView이름.urlChanged.connect(함수)

QWebEngineView의 함수

함수설명
.back() 웹브라우저에서 사용할 수 있는 이전 페이지로 이동 기능입니다.
.forward() 웹브라우저에서 사용할 수 있는 앞 페이지로 이동 기능입니다.
.reload() 웹페이지를 새로고침합니다.
.stop() 웹페이지의 로딩을 중단합니다.
.load(url) QWebEngineView에 새로운 웹페이지를 로드합니다. Parameter로 새로운 웹페이지의 url이 QUrl의 형식으로 입력되어야 합니다.
.url().toString() 현재 QWebEngnieView에서 보여주고 있는 사이트의 url을 문자열의 형태로 반환합니다.

위의 .load()함수의 경우 Parameter로 QUrl형식의 객체를 입력해야합니다. 따라서 .load함수를 쓸때는 아래와 같이 사용해주셔야 합니다.

from PyQt5.QtCore import *
self.QWebEngineView이름.load(QUrl("주소(문자열)"))

함수의 사용


사진 02.16.03 QWebEngineView의 활용

위에서 설명한 함수들을 실제로 코드에서 어떻게 사용하는지 한번 알아보도록 하겠습니다. 위의 사진에 있는 프로그램은 아래와 같은 기능을 가지고 있습니다.

  • 페이지가 로드되기 시작하면 "Start Loading", 페이지 로딩중에는 "Loading", 페이지 로드가 끝나면 "Load Finished"라는 글자를 출력합니다.
  • 페이지의 url이 바뀌면 바뀐 url을 하단에 있는 LineEdit에 자동으로 보여지게 합니다.
  • LineEdit에 새로운 Url을 입력하고, Go 버튼을 누르면 LineEdit에 입력된 URL로 이동합니다.
  • Back, Forward, Reload, Stop 버튼을 누르면 뒤로가기, 앞으로 가기, 새로고침, 중단 기능을 수행하빈다.

이 기능들을 어떻게 구현했는지 코드를 한번 살펴보도록 하겠습니다. 위젯들의 ObjectName은 예제코드를 다운받아 확인해주시기 바랍니다.

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5 import uic

form_class = uic.loadUiType("webEngineViewTest.ui")[0]

class WindowClass(QMainWindow, form_class) :
    def __init__(self) :
        super().__init__()
        self.setupUi(self)

        #WebEngineView의 시그널
        self.webEngineView_Test.loadStarted.connect(self.printLoadStart)
        self.webEngineView_Test.loadProgress.connect(self.printLoading)
        self.webEngineView_Test.loadFinished.connect(self.printLoadFinished)
        self.webEngineView_Test.urlChanged.connect(self.urlChangedFunction)

        #버튼들에 기능을 연결
        self.btn_setUrl.clicked.connect(self.urlGo)
        self.btn_back.clicked.connect(self.btnBackFunc)
        self.btn_forward.clicked.connect(self.btnForwardFunc)
        self.btn_reload.clicked.connect(self.btnRelaodFunc)
        self.btn_stop.clicked.connect(self.btnStopFunc)

    #WebEngineView의 시그널에 연결된 함수들
    def printLoadStart(self) : print("Start Loading")
    def printLoading(self) : print("Loading")
    def printLoadFinished(self) : print("Load Finished")

    def urlChangedFunction(self) :
        self.line_url.setText(self.webEngineView_Test.url().toString())
        print("Url Changed")

    #버튼을 눌렀을 때 실행될 함수들
    def urlGo(self) :
        self.webEngineView_Test.load(QUrl(self.line_url.text()))

    def btnBackFunc(self) :
        self.webEngineView_Test.back()

    def btnForwardFunc(self) :
        self.webEngineView_Test.forward()

    def btnRelaodFunc(self) :
        self.webEngineView_Test.reload()

    def btnStopFunc(self) :
        self.webEngineView_Test.stop()


if __name__ == "__main__" :
    app = QApplication(sys.argv)
    myWindow = WindowClass()
    myWindow.show()
    app.exec_()

다른 위젯들과 마찬가지로 생성자 안에서 기능을 연결하고, 함수의 형태로 기능을 구성하는 것을 볼 수 있습니다. 위의 예제 코드를 실행하면 아래와 같이 실행되는 것을 볼 수 있습니다.


사진 02.16.04 QWebEngineView의 실행

반응형

댓글