Графический пользовательский интерфейс
Contents
Графический пользовательский интерфейс¶
Библиотеки для разработки графического интерфейса¶
Существует множество инструментов, которые позволяют реализовать графический интерфейс в python
. Среди них особняком стоит модуль встроенной библиотеки tkinter: tkinter
входит в стандартный дистрибутив CPython
, а значит его использование не приводит к раздуванию зависимостей проекта.
Остальные средства разработки графического интерфейса представлены в виде сторонних библиотек. Они, часто, предоставляют более функциональные и удобные инструменты нежели tkinter
, но добавляют зависимостей к проекту, а также нередко требуют следовать лицензионному соглашению. Таких библиотек очень много, среди них:
Здесь пойдет речь о Qt
.
PySide vs PyQt¶
Есть два распространенных расширения Qt
для Python
: PtQt
и PySide
. PyQt
появился раньше и долгое время опережал PySide
. На сегодня это отставание полностью сократилось (более того, PySide6
вышел на месяц раньше PyQt6
). Существование двух расширений объясняется различием в лицензировании: PySide
распространяется под всеми теми же лицензиями, что и сам Qt
(более того, его разрабатывает та же компания), а PyQt
с несколько другим набором вариантов лицензирования.
С точки зрения кода обе библиотеки почти эквиваленты. Оба расширения переносят имена объектов из C++
в python
без изменений. Миграция в обе стороны требует минимальных правок.
Далее везде речь пойдет о PySide6
, но большинство утверждений и примеров останутся корректными, если заменить в них PySide
на PyQt
.
Элементы графического интерфейса в Jupyter
¶
Но прежде чем перейти к изучению полноценного фреймворка для создания приложений с графическим интерфейсом Qt
, упомянем способ воплотить интерфейс прямо в Jupyter
ноутбуке.
Библиотека ipywidgets позволяет добавлять элементы графического интерфейса прямо в Jupyter
ноутбуке. С помощью этого инструмента можно быстро настроить интерактивное взаимодействие с кодом в блокноте. Например, это может быть полезно, чтобы пощупать какую-нибудь параметрическую модель: интерактивно изменяя параметры (например, ползунком), можно составить представления о том, как они влияют на модель.
В качестве примера ниже приводится код, который предоставляет интерактивный интерфейс к построению графика функции \(y=f(\omega x)\):
выбор функции \(f\),
значение параметра функции \(\omega\)
выбор цвета линии,
текст заголовка графика,
вывод сетки,
размера шрифта.
Note
Элементы графического интерфейса будут отображаться на сайте, но взаимодействие с ними не будет ни к чему приводить, т.к. на фоне нет запущенного ядра python
. Чтобы попробовать пример, установите ipywidgets
запустите этот код в jupyter
ноутбуке.
from IPython.display import display
from ipywidgets import interact
import ipywidgets as widgets
import numpy as np
from matplotlib import pyplot as plt
def plot(fname, omega, color, title, grid, fontsize):
plt.rcParams.update({"font.size":fontsize})
x = np.linspace(0, 2 * np.pi, 200)
fig, ax = plt.subplots(figsize=(10, 9))
ax.set_ylim(-1, 1)
ax.set_xlabel("$x$")
ax.set_ylabel("$y$")
f = eval(f"np.{fname}")
y = f(omega * x)
ax.plot(x, y, label=fname, color=color)
ax.set_title(title)
if grid:
ax.grid()
interactive_plot = interact(plot,
fname=["sin", "cos"],
omega=widgets.FloatSlider(min=1., max=4., value=1.),
color=widgets.ColorPicker(concise=False, description='pick a color', value='blue'),
title=widgets.Text(value="Interactive plot", placeholder="type the title",
disription="String:"),
grid=widgets.Checkbox(),
fontsize=widgets.IntSlider(min=12, max=36, step=2, value=18)
)