16. Создание графических интерфейсов #
Создание графических интерфейсов (GUI) в Python позволяет разрабатывать приложения с визуальным взаимодействием с пользователем. Python поддерживает несколько библиотек для разработки GUI, таких как Tkinter, PyQt/PySide, а также интеграцию с веб-интерфейсами.
16.1. Tkinter #
Tkinter — стандартная библиотека Python для разработки GUI. Она простая в использовании и не требует установки.
Основные компоненты Tkinter #
- Окна (
Tk
). - Виджеты (кнопки, метки, поля ввода).
- Менеджеры размещения (
pack
,grid
,place
).
Пример: базовое окно с кнопкой #
import tkinter as tk
def on_click():
label.config(text="Кнопка нажата!")
# Создание окна
root = tk.Tk()
root.title("Пример Tkinter")
# Виджеты
label = tk.Label(root, text="Привет, мир!")
label.pack()
button = tk.Button(root, text="Нажми меня", command=on_click)
button.pack()
# Запуск приложения
root.mainloop()
Расширенный пример: калькулятор #
import tkinter as tk
def calculate():
try:
result = eval(entry.get())
label_result.config(text=f"Результат: {result}")
except Exception as e:
label_result.config(text="Ошибка")
# Окно
root = tk.Tk()
root.title("Калькулятор")
# Поле ввода
entry = tk.Entry(root)
entry.pack()
# Кнопка
button = tk.Button(root, text="Вычислить", command=calculate)
button.pack()
# Результат
label_result = tk.Label(root, text="Результат:")
label_result.pack()
root.mainloop()
16.2. PyQt/PySide #
PyQt и PySide — это мощные библиотеки для создания сложных GUI на основе фреймворка Qt. Они требуют предварительной установки.
Установка #
pip install pyqt5
или
pip install pyside6
Пример: базовое окно с кнопкой #
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QLabel
def on_click():
label.setText("Кнопка нажата!")
app = QApplication([])
# Главное окно
window = QWidget()
window.setWindowTitle("Пример PyQt")
layout = QVBoxLayout()
label = QLabel("Привет, мир!")
layout.addWidget(label)
button = QPushButton("Нажми меня")
button.clicked.connect(on_click)
layout.addWidget(button)
window.setLayout(layout)
window.show()
app.exec_()
Расширенный пример: текстовый редактор #
from PyQt5.QtWidgets import QApplication, QMainWindow, QTextEdit, QAction, QFileDialog
class TextEditor(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Текстовый редактор")
# Текстовое поле
self.text_edit = QTextEdit()
self.setCentralWidget(self.text_edit)
# Меню
menu = self.menuBar().addMenu("Файл")
open_action = QAction("Открыть", self)
open_action.triggered.connect(self.open_file)
menu.addAction(open_action)
save_action = QAction("Сохранить", self)
save_action.triggered.connect(self.save_file)
menu.addAction(save_action)
def open_file(self):
filename, _ = QFileDialog.getOpenFileName(self, "Открыть файл")
if filename:
with open(filename, "r") as file:
self.text_edit.setText(file.read())
def save_file(self):
filename, _ = QFileDialog.getSaveFileName(self, "Сохранить файл")
if filename:
with open(filename, "w") as file:
file.write(self.text_edit.toPlainText())
app = QApplication([])
editor = TextEditor()
editor.show()
app.exec_()
16.3. Интеграция с веб-интерфейсами #
Веб-интерфейсы — популярный способ создания GUI, поскольку они работают в браузере и не зависят от платформы.
Flask + HTML для GUI #
Использование Flask позволяет создать серверное приложение с веб-интерфейсом.
Установка #
pip install flask
Пример: простое веб-приложение #
from flask import Flask, render_template, request
app = Flask(__name__)
@app.route("/")
def index():
return render_template("index.html")
@app.route("/submit", methods=["POST"])
def submit():
name = request.form.get("name")
return f"Привет, {name}!"
# HTML (index.html)
"""
<!DOCTYPE html>
<html>
<head>
<title>Пример Flask</title>
</head>
<body>
<form action="/submit" method="post">
<input type="text" name="name" placeholder="Введите имя">
<button type="submit">Отправить</button>
</form>
</body>
</html>
"""
if __name__ == "__main__":
app.run(debug=True)
Использование библиотеки PyWebIO #
PyWebIO позволяет создавать интерактивные веб-приложения без необходимости написания HTML или CSS.
Установка #
pip install pywebio
Пример #
from pywebio.input import input, TEXT
from pywebio.output import put_text
from pywebio import start_server
def main():
name = input("Введите ваше имя:", type=TEXT)
put_text(f"Привет, {name}!")
start_server(main, port=8080)
Рекомендации #
- Tkinter подходит для создания простых и кроссплатформенных приложений.
- Используйте PyQt/PySide для разработки сложных приложений с профессиональным интерфейсом.
- Веб-интерфейсы (Flask, PyWebIO) удобны для распределенных систем или приложений, работающих через браузер.