Графический пользовательский интерфейс
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_html as 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 = getattr(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)
)
interactive_plot
<function __main__.plot(fname, omega, color, title, grid, fontsize)>