Як робити веб інтерфейси з python
Ви можете знати про такі штуки як electron.
По факту це інтерфейс для програми на html, css, js.
Для пайтона є така бібліотека як eel, завдяки неї ми сьогодні напишемо простеньку програму яка показує час при натисненні на кнопку.
Поставити її можна командою:
pip install eel
Тепер створимо в папці нашого проекта папку web, туди будемо кидати наші файли html, css, js та якісь інші файлі(наприклад картинки).
Сьогодні нам вистачть одного файлу html, але в більш великих проектах бажано розділяти html, css та js по різним файлам.
Тепер глянемо код в нашому main.py
import eel from datetime import datetime
Імпортуємо eel для інтерфейсу та datetime для часу.
@eel.expose()
def what_time():
return datetime.now().strftime("%d/%m/%Y %H:%M:%S")
Розберемо по рядкам.
@eel.expose це декоратор(що це таке можете глянути тут https://docs.python.org/3/glossary.html тут взагалі про багато штук в пайтоні і в тому числі про декоратори), цей декоратор дає можливість нам викликати цю функцію з javascript на нашій сторінці.
На наступному рядку ми оголушеємо функцію.
На наступному рядку ми одразу повертаємо дату в форматі який ми вказали в функції strftime.
eel.init("web")
eel.start("main.html", mode="chrome", cmdline_args=["--kiosk"])
Ініціалізуємо eel в папці web.
На настпному рядку ми відкриваємо файл main.html в режимі chrome і в аргументах вказуємо --kiosk він означає що програма буде в повноекранному режимі.
Тепер розглянемо файл main html.
На першому рядку вказуєм що це найновіше версія html.
а наступному відкриваєм тег html
<meta charset="UTF-8"> <title>Crypto Pidval</title> <script type="text/javascript" src="eel.js"></script>
Вказуєм кодування utf-8 назву вікна Crypto Pidval та додаєм скрипт eel через який ми і будемо запускати функції з пайтона.
<style>
body{
background: linear-gradient(to right, #40E0D0, #FF8C00, #FF0080);
}
Відкриваєм тег style.
Для тега body(основний тег) ставимо фон градієнта(його я взяв з https://uigradients.com/ прикольний сайт з градієнтами).
button{
background: linear-gradient(to right, #00F260, #0575E6);
border: none;
color: white;
width: 190px;
height: 108px;
font-size: 2em;
margin-left: 21em;
}
button:hover{
background: linear-gradient(to right, #6EE856, #006BD2);
}
Для кнопок ставимо фон градієнтом, прибираємо контури(вони мені не подобаються), ставимо колір тексту білим, ставимо ширину та висоту, а далі ставимо розмір тексту 2em(це одиниця виміру яку часто використовують для тексту), і відступаємо 21em щоб кнопка була по цетру(так я знаю що можна відцентрувати по нормальному, але тут це не обов'язково).
Далі ми ставимо щоб мінявся фон при наведені на кнопку.
#time{
color: #40E0D0;
text-align: center;
}
Ставимо колір нашому тексту з айді time і центруємо його.
</style> </head>
Закриваємо теги style та head.
<body>
<button onclick="what_time();">What is the time?</button>
<h1 id="time">Result</h1>
Відкриваємо тег body.
Також створюєм кнопку яка при нажатті вкикликає функцію what_time.
Також текст з айді time.
<script>
async function what_time(){
result = await eel.what_time()();
document.getElementById('time').innerHTML = result;
}
</script>
В цьому скрипті ми створюємо асинхронну функцію what_time(яка якраз і вкикликається при натисненні на кнопку).
Далі вкиликаємо функцію what_time вже із пайтона і зберігаємо результат її виконання в змінну.
Далі міняємо текст нашому тегу h1 на час.
</body> </html>
import eel
from datetime import datetime
@eel.expose()
def what_time():
return datetime.now().strftime("%d/%m/%Y %H:%M:%S")
eel.init("web")
eel.start("main.html", mode="chrome", cmdline_args=["--kiosk"])
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Crypto Pidval</title>
<script type="text/javascript" src="eel.js"></script>
<style>
body{
background: linear-gradient(to right, #40E0D0, #FF8C00, #FF0080);
}
button{
background: linear-gradient(to right, #00F260, #0575E6);
border: none;
color: white;
width: 190px;
height: 108px;
font-size: 2em;
margin-left: 21em;
}
button:hover{
background: linear-gradient(to right, #6EE856, #006BD2);
}
#time{
color: #40E0D0;
text-align: center;
}
</style>
</head>
<body>
<button onclick="what_time();">What is the time?</button>
<h1 id="time">Result</h1>
<script>
async function what_time(){
result = await eel.what_time()();
document.getElementById('time').innerHTML = result;
}
</script>
</body>
</html>
На цьому все, Ось тут є документація eel.
Всім удачі!
Підготовлено каналом: https://t.me/cryptopidval