파이썬으로 웹 브라우저를 직접 만들고, 웹 브라우저 상단에 주소창과 확대/축소기능을 구현할 수 있는 코드 자료입니다. 웹 브라우저 제작 시 자주 사용되는 코드이기도 합니다. 웹 브라우저는 우리가 일상적으로 사용하는 크롬(Chrome), 엣지(Edge), 파이어폭스(Firefox)와 같은 프로그램들입니다.
이 프로그램들은 웹 서버에서 받은 HTML, CSS, JavaScript를 해석하여 우리가 보는 웹 페이지 형태로 표시해줍니다. 이번 글에서는 직접 웹브라우저를 파이썬으로 제작하고 웹 주소(URL)를 입력하고, 페이지를 확대하거나 축소할 수 있는 기능을 갖춘 주소창과 줌 컨트롤 패널을 만드는 방법을 소개합니다.
PySide6으로 나만의 파이썬 웹브라우저 만들기
파이썬에서는 다음과 같은 다양한 방법으로 웹 브라우저 기능을 구현할 수 있습니다:
PyQt5 / PySide6 파이썬 GUI 라이브러리
PyQt5 / PySide6 둘 다 Qt라는 GUI 프레임워크를 파이썬에서 사용할 수 있게 해주는 라이브러리입니다. 파이썬으로 프로그램을 만들다 보면 단순한 텍스트 기반 콘솔 화면만으로는 부족할 때가 있습니다. 이럴 때 “윈도우 창이 있는 프로그램”, 즉 그래픽 사용자 인터페이스(GUI)가 필요할 때가 있는데, 그럴 때 사용하는 대표적인 파이썬 도구가 바로 PyQt5와 PySide6입니다.
| 항목 | PyQt5 | PySide6 |
|---|---|---|
| 개발사 | Riverbank | Qt Company (Qt 공식) |
| 라이선스 | GPL 또는 상용 | LGPL (상업용에도 자유롭게 사용 가능) |
| 버전 | Qt 5 기반 | Qt 6 기반 |
| 설치 | pip install pyqt5 | pip install pyside6 |
| 기능 | 거의 동일 (버튼, 창, 입력창, 레이아웃 등 모두 가능) | 거의 동일 (버튼, 창, 입력창, 레이아웃 등 모두 가능) |
개인 학습 및 오픈소스 프로젝트에 적합한 선택
- 개인 공부용, 오픈소스 프로젝트라면 둘 중 아무거나 써도 괜찮습니다.
- 상업용 소프트웨어를 만들 예정이라면 PySide6이 더 유리합니다. 라이선스 제한이 덜합니다.
- 최신 기술과 장기적인 지원을 고려한다면 PySide6이 더 추천됩니다. (Qt 6 기반)
Qt 프레임워크로 GUI 애플리케이션 개발하기
- Qt 프레임워크 기반 GUI 애플리케이션을 만들 수 있는 도구입니다.
- 내부적으로 QWebEngineView 라는 웹 뷰 컴포넌트를 사용해 웹페이지를 표시할 수 있습니다.
- 실제로 크롬 엔진(Chromium) 을 기반으로 하기에 매우 강력합니다.
가장 추천하는 방법은 PySide6 또는 PyQt5를 활용하는 것입니다. 이 방식은 크롬 기반 웹 뷰를 사용할 수 있고, 사용자가 직접 조작할 수 있는 브라우저 형태로 만들 수 있습니다.

- URL 입력창 만들기
- 이전/다음 이동, 새로고침 버튼 구현
- 페이지 확대/축소 (Zoom In/Out) 기능 추가
- 주소 자동 업데이트 구현
[ 이미지 변환 툴 소개 ] 포토샵 없이 블로그에 활용할 이미지를 손쉽게 변환하는 팁
코딩하기
1. PySide6 설치
pip install PySide6
2. 웹 엔진 모듈 포함 확인
PySide6에는 웹 브라우저를 구성할 수 있는 QWebEngineView가 포함되어 있습니다.
3. 전체 코드 예제 (주소창 + 줌 컨트롤)
from PySide6.QtWidgets import (
QWidget, QVBoxLayout, QHBoxLayout,
QPushButton, QLineEdit
)
from PySide6.QtWebEngineWidgets import QWebEngineView
from PySide6.QtCore import QUrl
class BrowserWidget(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("PySide6 웹 브라우저")
self.resize(1000, 800)
self.webview = QWebEngineView()
self.webview.setUrl(QUrl("https://www.google.com"))
layout = QVBoxLayout(self)
layout.addWidget(self._create_url_input_with_zoom(self.webview, "URL을 입력하세요..."))
layout.addWidget(self.webview)
def _load_url(self, webview, url_input):
url = url_input.text()
if not url.startswith("http"):
url = "https://" + url
webview.setUrl(QUrl(url))
def _create_url_input_with_zoom(self, webview, placeholder):
widget = QWidget()
layout = QVBoxLayout(widget)
layout.setContentsMargins(5, 5, 5, 5)
widget.setFixedHeight(90)
# 네비게이션 버튼 바
nav_bar = QHBoxLayout()
buttons = [
("←", webview.back),
("→", webview.forward),
("↻", webview.reload),
("-", lambda: webview.setZoomFactor(webview.zoomFactor() - 0.1)),
("+", lambda: webview.setZoomFactor(webview.zoomFactor() + 0.1)),
]
for i, (text, action) in enumerate(buttons):
btn = QPushButton(text)
btn.setFixedSize(40, 30)
btn.clicked.connect(action)
nav_bar.addWidget(btn)
if i == 2:
nav_bar.addStretch()
# URL 입력 필드
url_input = QLineEdit()
url_input.setPlaceholderText(placeholder)
url_input.setFixedHeight(50)
url_input.returnPressed.connect(lambda: self._load_url(webview, url_input))
layout.addLayout(nav_bar)
layout.addWidget(url_input)
def update_url():
url_input.setText(webview.url().toString())
nav_bar.itemAt(0).widget().setEnabled(webview.history().canGoBack())
nav_bar.itemAt(1).widget().setEnabled(webview.history().canGoForward())
webview.urlChanged.connect(update_url)
webview.loadFinished.connect(update_url)
update_url()
return widget
파이썬 코드 설명
QWebEngineView란?
QWebEngineView는 웹 브라우저처럼 웹 페이지를 표시할 수 있게 해주는 위젯입니다. 구글, 네이버, 유튜브 등 실제 웹사이트를 그대로 표시할 수 있어요. 단 완벽하지는 않습니다.
URL 입력창 (QLineEdit)
- 사용자가 웹 주소를 입력하는 곳입니다.
- returnPressed.connect()를 사용해 엔터를 누르면 입력된 URL로 이동하게 만듭니다.
- 주소창에 https://가 없으면 자동으로 붙여줍니다.
뒤로, 앞으로, 새로고침 버튼
- 각각 웹브라우저의 기본 기능과 연결합니다.
- webview.back()
- webview.forward()
- webview.reload()
화면 확대/축소 (Zoom In/Out)
- webview.zoomFactor()를 기준으로 배율을 조절합니다.
- 기본 배율은 1.0 (100%)이고, 여기에 +0.1 또는 -0.1씩 가감합니다.
- 예: 1.2면 120%, 0.8이면 80%
주소 자동 갱신
웹 페이지를 이동할 때마다 주소창이 자동으로 바뀌게 하기 위해 다음 시그널을 연결합니다:
webview.urlChanged.connect(update_url) webview.loadFinished.connect(update_url)
실행 코드
아래 코드를 추가하면 브라우저를 실행할 수 있습니다.
if __name__ == "__main__":
import sys
from PySide6.QtWidgets import QApplication
app = QApplication(sys.argv)
browser = BrowserWidget()
browser.show()
sys.exit(app.exec())