Как писать программы с интерфейсом в python

Статьи

Автор Admin На чтение 9 мин Просмотров 2.7к. Опубликовано 02.03.2023

Введение

В ходе статьи напишем GUI калькулятор на языке программирования Python с использованием модуля tkinter.

Написание GUI калькулятора

Для начала импортируем библиотеку tkinter:

from tkinter import *

Создадим объект класса Tk(), укажем разрешение окна 268×288, заголовок “Калькулятор” и запретим возможность изменять разрешение окна:

from tkinter import * root = Tk() root.geometry(«268×288») root.title(«Калькулятор») root.resizable(0, 0) root.mainloop()

Создадим виджет Frame() и отобразим его методом grid():

from tkinter import * root = Tk() root.geometry(«268×288») root.title(«Калькулятор») root.resizable(0, 0) frame_input = Frame(root) frame_input.grid(row=0, column=0, columnspan=4, sticky=»nsew») root.mainloop()

Добавим текстовое поле (виджет Entry()) на фрейм, укажем шрифт Arial 15 размера жирного начертания, толщину 24 и запретим возможность писать в нём. Отобразим его методом pack():

Кратко про Python Tkinter | Как создавать GUI Приложения


from tkinter import * root = Tk() root.geometry(«268×288») root.title(«Калькулятор») root.resizable(0, 0) frame_input = Frame(root) frame_input.grid(row=0, column=0, columnspan=4, sticky=»nsew») input_field = Entry(frame_input, font=’Arial 15 bold’, width=24, state=»readonly») input_field.pack(fill=BOTH) root.mainloop()

Далее создадим кортеж, в котором будут храниться кнопки будущего калькулятора:

from tkinter import * root = Tk() root.geometry(«268×288») root.title(«Калькулятор») root.resizable(0, 0) frame_input = Frame(root) frame_input.grid(row=0, column=0, columnspan=4, sticky=»nsew») input_field = Entry(frame_input, font=’Arial 15 bold’, width=24, state=»readonly») input_field.pack(fill=BOTH) buttons = ((‘7’, ‘8’, ‘9’, ‘/’, ‘4’), (‘4’, ‘5’, ‘6’, ‘*’, ‘4’), (‘1’, ‘2’, ‘3’, ‘-‘, ‘4’), (‘0’, ‘.’, ‘=’, ‘+’, ‘4’) ) root.mainloop()

Создадим пустую переменную expression строкового типа данных. Она нам пригодится для избежания ошибок в будущем. Также добавим кнопку, которая в последующем
будет служить для очищения текстового поля:

from tkinter import * root = Tk() root.geometry(«268×288») root.title(«Калькулятор») root.resizable(0, 0) frame_input = Frame(root) frame_input.grid(row=0, column=0, columnspan=4, sticky=»nsew») input_field = Entry(frame_input, font=’Arial 15 bold’, width=24, state=»readonly») input_field.pack(fill=BOTH) buttons = ((‘7’, ‘8’, ‘9’, ‘/’, ‘4’), (‘4’, ‘5’, ‘6’, ‘*’, ‘4’), (‘1’, ‘2’, ‘3’, ‘-‘, ‘4’), (‘0’, ‘.’, ‘=’, ‘+’, ‘4’) ) expression = «» button = Button(root, text=’C’, command=lambda: bt_clear()) button.grid(row=1, column=3, sticky=»nsew») root.mainloop()

Теперь добавим основные кнопки калькулятора с помощью цикла. И в основном, и во вложенном циклах будет по 4 итерации. Во вложенном цикле создаётся кнопка, с шириной 2, и высотой 3. Текстом будет являться поиндексное значение из кортежа buttons. Команда будет задаваться с помощью анонимной функции lambda, позиционироваться кнопки будут с помощью метода grid():

Как быстро сделать графический интерфейс на Python


from tkinter import * root = Tk() root.geometry(«268×288») root.title(«Калькулятор») root.resizable(0, 0) frame_input = Frame(root) frame_input.grid(row=0, column=0, columnspan=4, sticky=»nsew») input_field = Entry(frame_input, font=’Arial 15 bold’, width=24, state=»readonly») input_field.pack(fill=BOTH) buttons = ((‘7’, ‘8’, ‘9’, ‘/’, ‘4’), (‘4’, ‘5’, ‘6’, ‘*’, ‘4’), (‘1’, ‘2’, ‘3’, ‘-‘, ‘4’), (‘0’, ‘.’, ‘=’, ‘+’, ‘4’) ) expression = «» button = Button(root, text=’C’, command=lambda: bt_clear()) button.grid(row=1, column=3, sticky=»nsew») for row in range(4): for col in range(4): Button(root, width=2, height=3, text=buttons[row][col], command=lambda row=row, col=col: btn_click(buttons[row][col])).grid(row=row + 2, column=col, sticky=»nsew», padx=1, pady=1) root.mainloop()

Создадим функцию btn_click(), и в качестве аргумента укажем item. Сделаем переменную expression глобальной, после чего добавим конструкцию try … except:

from tkinter import * def btn_click(item): global expression try: pass except: pass root = Tk() root.geometry(«268×288») root.title(«Калькулятор») root.resizable(0, 0) frame_input = Frame(root) frame_input.grid(row=0, column=0, columnspan=4, sticky=»nsew») input_field = Entry(frame_input, font=’Arial 15 bold’, width=24, state=»readonly») input_field.pack(fill=BOTH) buttons = ((‘7’, ‘8’, ‘9’, ‘/’, ‘4’), (‘4’, ‘5’, ‘6’, ‘*’, ‘4’), (‘1’, ‘2’, ‘3’, ‘-‘, ‘4’), (‘0’, ‘.’, ‘=’, ‘+’, ‘4’) ) expression = «» button = Button(root, text=’C’, command=lambda: bt_clear()) button.grid(row=1, column=3, sticky=»nsew») for row in range(4): for col in range(4): Button(root, width=2, height=3, text=buttons[row][col], command=lambda row=row, col=col: btn_click(buttons[row][col])).grid(row=row + 2, column=col, sticky=»nsew», padx=1, pady=1) root.mainloop()

Читайте также:
Автокад это бесплатная программа

В try мы даём возможность писать в текстовое поле, приведя параметр state в normal. Далее к expression прибавляем item. И вводим результат в текстовое поле:

from tkinter import * def btn_click(item): global expression try: input_field[‘state’] = «normal» expression += item input_field.insert(END, item) except: pass root = Tk() root.geometry(«268×288») root.title(«Калькулятор») root.resizable(0, 0) frame_input = Frame(root) frame_input.grid(row=0, column=0, columnspan=4, sticky=»nsew») input_field = Entry(frame_input, font=’Arial 15 bold’, width=24, state=»readonly») input_field.pack(fill=BOTH) buttons = ((‘7’, ‘8’, ‘9’, ‘/’, ‘4’), (‘4’, ‘5’, ‘6’, ‘*’, ‘4’), (‘1’, ‘2’, ‘3’, ‘-‘, ‘4’), (‘0’, ‘.’, ‘=’, ‘+’, ‘4’) ) expression = «» button = Button(root, text=’C’, command=lambda: bt_clear()) button.grid(row=1, column=3, sticky=»nsew») for row in range(4): for col in range(4): Button(root, width=2, height=3, text=buttons[row][col], command=lambda row=row, col=col: btn_click(buttons[row][col])).grid(row=row + 2, column=col, sticky=»nsew», padx=1, pady=1) root.mainloop()

Зададим условие, что если на;ата кнопка “равно”, то будет подсчитываться результат методом eval(). После чего результат будет выведен в текстовое поле, а expression обнулится. В конце try снова замораживаем текстовое поле:

from tkinter import * def btn_click(item): global expression try: input_field[‘state’] = «normal» expression += item input_field.insert(END, item) if item == ‘=’: result = str(eval(expression[:-1])) input_field.insert(END, result) expression = «» input_field[‘state’] = «readonly» except: pass root = Tk() root.geometry(«268×288») root.title(«Калькулятор») root.resizable(0, 0) frame_input = Frame(root) frame_input.grid(row=0, column=0, columnspan=4, sticky=»nsew») input_field = Entry(frame_input, font=’Arial 15 bold’, width=24, state=»readonly») input_field.pack(fill=BOTH) buttons = ((‘7’, ‘8’, ‘9’, ‘/’, ‘4’), (‘4’, ‘5’, ‘6’, ‘*’, ‘4’), (‘1’, ‘2’, ‘3’, ‘-‘, ‘4’), (‘0’, ‘.’, ‘=’, ‘+’, ‘4’) ) expression = «» button = Button(root, text=’C’, command=lambda: bt_clear()) button.grid(row=1, column=3, sticky=»nsew») for row in range(4): for col in range(4): Button(root, width=2, height=3, text=buttons[row][col], command=lambda row=row, col=col: btn_click(buttons[row][col])).grid(row=row + 2, column=col, sticky=»nsew», padx=1, pady=1) root.mainloop()

В except мы будем ловить ошибку ZeroDivisionError, и говорить, что деление на 0 запрещено.
Также добавим ошибку синтаксиса, при которой будет просто выводиться слово “Ошибка”:

from tkinter import * def btn_click(item): global expression try: input_field[‘state’] = «normal» expression += item input_field.insert(END, item) if item == ‘=’: result = str(eval(expression[:-1])) input_field.insert(END, result) expression = «» input_field[‘state’] = «readonly» except ZeroDivisionError: input_field.delete(0, END) input_field.insert(0, ‘Ошибка (деление на 0)’) except SyntaxError: input_field.delete(0, END) input_field.insert(0, ‘Ошибка’) root = Tk() root.geometry(«268×288») root.title(«Калькулятор») root.resizable(0, 0) frame_input = Frame(root) frame_input.grid(row=0, column=0, columnspan=4, sticky=»nsew») input_field = Entry(frame_input, font=’Arial 15 bold’, width=24, state=»readonly») input_field.pack(fill=BOTH) buttons = ((‘7’, ‘8’, ‘9’, ‘/’, ‘4’), (‘4’, ‘5’, ‘6’, ‘*’, ‘4’), (‘1’, ‘2’, ‘3’, ‘-‘, ‘4’), (‘0’, ‘.’, ‘=’, ‘+’, ‘4’) ) expression = «» button = Button(root, text=’C’, command=lambda: bt_clear()) button.grid(row=1, column=3, sticky=»nsew») for row in range(4): for col in range(4): Button(root, width=2, height=3, text=buttons[row][col], command=lambda row=row, col=col: btn_click(buttons[row][col])).grid(row=row + 2, column=col, sticky=»nsew», padx=1, pady=1) root.mainloop()

Теперь добавим функцию для очищения текстового поля. Внутри неё делаем переменную expression глобальной, опять же размораживаем текстовое поле, очищаем его, и снова замораживаем:

from tkinter import * def btn_click(item): global expression try: input_field[‘state’] = «normal» expression += item input_field.insert(END, item) if item == ‘=’: result = str(eval(expression[:-1])) input_field.insert(END, result) expression = «» input_field[‘state’] = «readonly» except ZeroDivisionError: input_field.delete(0, END) input_field.insert(0, ‘Ошибка (деление на 0)’) except SyntaxError: input_field.delete(0, END) input_field.insert(0, ‘Ошибка’) def bt_clear(): global expression expression = «» input_field[‘state’] = «normal» input_field.delete(0, END) input_field[‘state’] = «readonly» root = Tk() root.geometry(«268×288») root.title(«Калькулятор») root.resizable(0, 0) frame_input = Frame(root) frame_input.grid(row=0, column=0, columnspan=4, sticky=»nsew») input_field = Entry(frame_input, font=’Arial 15 bold’, width=24, state=»readonly») input_field.pack(fill=BOTH) buttons = ((‘7’, ‘8’, ‘9’, ‘/’, ‘4’), (‘4’, ‘5’, ‘6’, ‘*’, ‘4’), (‘1’, ‘2’, ‘3’, ‘-‘, ‘4’), (‘0’, ‘.’, ‘=’, ‘+’, ‘4’) ) expression = «» button = Button(root, text=’C’, command=lambda: bt_clear()) button.grid(row=1, column=3, sticky=»nsew») for row in range(4): for col in range(4): Button(root, width=2, height=3, text=buttons[row][col], command=lambda row=row, col=col: btn_click(buttons[row][col])).grid(row=row + 2, column=col, sticky=»nsew», padx=1, pady=1) root.mainloop()

Читайте также:
Для того чтобы выяснить запоминаемость и убедительность рекламной программы используют

В ходе статьи мы с Вами написали код для GUI калькулятора на языке программирования Python с использованием модуля tkinter. Надеюсь Вам понравилась статья, желаю удачи и успехов!

Источник: it-start.online

Python — десктопное приложение с графическим интерфейсом

Python имеет встроенный пакет GUI, который позволяет легко создавать такие формы:

В этом примере используется пакет tkinter. Форма выше принимает значение, введенное в поле ввода, возводит его в квадрат и отображает обратно в поле ввода, таким образом, квадратную кнопку можно нажать снова. Довольно стандартное приложение.

Интересная часть этой статьи — сделать приложение автономным и отправить его кому-то, у кого не установлен python и не нужно работать с консолью. Это 3 маленьких шага, необходимых для написания кода:

  1. Сохраните код Python как *.pyw
  2. Установите «pip install pyinstaller»
  3. Создайте исполняемый файл с помощью «pyinstaller -w InputOutputConsole.pyw»

Когда вы выполните эти шаги, результат будет сохранен в той же папке:

В папке dist находится EXE-файл, который может запустить небольшое приложение. Код приложения здесь:

from tkinter import * class Application(Frame): def __init__(self, master=None): Frame.__init__(self, master) self.grid() self.create_widgets() def create_widgets(self): self.display_label = Label(self, text=»Enter value to square:») self.display_label.grid(row=0, column=0) self.input_field = Entry(self, bd = 5) self.input_field.grid(row=0,column=1) self.result_label = Label(self, text=»Result will be here:») self.result_label.grid(row=1, column=0) self.calculation_button = Button(self, text=»Square!», command=self.calculation) self.calculation_button.grid(row=3,column=3) self.quit_button = Button(self, text=»Quit», command=self.master.destroy) self.quit_button.grid(row=4,column=10) def calculation(self): new_val = int(self.input_field.get())**2 self.result_label[‘text’] = new_val self.input_field.delete(‘0’, ‘end’) self.input_field.insert(‘0’, str(new_val)) if __name__ == «__main__»: app = Application() app.mainloop()

Это небольшой пример того как можно реализовать десктопное приложение с помощью Python

Сделать сборку под OSX можно при помощи утилиты dmgbuild

Источник: dev-gang.ru

Eel Python библиотека для создания интерфейсов на HTML

Eel библиотека Python для HTML интерфейсов

В этой статье вы прочитаете что за библиотека Eel для Python и самое главное как с ней работать думаю многим будет очень интересно и самое главное полезно.

Также если вас интересуют Python библиотеки, то вам возможно будет интересно «Быстрый старт библиотеки scikit-image для Python», уверен будет интересно.

Что за Python библиотека Eel:

Как понятно из названия статьи, это библиотека которая позволяет создавать графический интерфейс с помощью HTML, что на мой взгляд проще, чем например использовать библиотеку Tkinter, хотя возможно такой вариант не самый быстрый.

Как устанавливается Python библиотека Eel:

Тут как обычно для Python нужно использовать Pip, вот что вводим в терминал:

pip install eel

После этого вы можете работать с библиотекой.

Работа с Python библиотекой Eel:

Тут стоит сказать, что всё что дальше, это перевод части официальной документации, ссылку на документацию найдёте ниже.

Структура каталогов:

Приложение Eel будет разделено на интерфейс, состоящий из различных файлов веб-технологий (.html, .js, .css), и серверную часть, состоящую из различных скриптов Python.

Читайте также:
Какие программы используют салоны красоты

Все файлы внешнего интерфейса должны быть помещены в один каталог (при необходимости их можно разделить на папки внутри него).

my_python_script . py < — Python scripts
other_python_module . py
static_web_folder / < — Web folder
main_page . html
style . css

Запуск приложения:

Предположим, вы поместили все файлы внешнего интерфейса в каталог с именем web, включая вашу стартовую страницу main.html, затем приложение запускается следующим образом;

import eel
eel . init ( ‘web’ )
eel . start ( ‘main.html’ )

Это запустит веб-сервер с настройками по умолчанию (http://localhost:8000) и откроет браузер на http://localhost:8000/main.html.

Если установлен Chrome или Chromium, то по умолчанию он будет открываться в режиме приложения (с флагом —app cmdline), независимо от того, какой браузер ОС по умолчанию установлен (это поведение можно переопределить).

Параметры приложения:

Дополнительные параметры могут быть переданы в eel.start() в качестве аргументов ключей словаря.

Некоторые из параметров включают режим, в котором находится приложение (например, «chrome»), порт, на котором работает приложение, имя хоста приложения и добавление дополнительных флагов командной строки.

Начиная с версии Eel v0.12.0, для start() доступны следующие параметры:

  • mode — Cтрока, указывающая, какой браузер использовать (например, «chrome», «electro», «edge», «custom»). Также может быть None или False , чтобы не открывать окно. По умолчанию: «хром»;
  • host — Строка, указывающая, какое имя хоста использовать для сервера Bottle. По умолчанию: «localhost»);
  • port — Целое число, указывающий, какой порт использовать для сервера Bottle. Используйте 0 для автоматического выбора порта. По умолчанию: 8000;
  • block — Буливое значение, указывающее, должен ли вызов start() блокировать вызывающий поток. По умолчанию: True ;
  • jinja_templates — Строка, указывающая папку, используемую для шаблонов Jinja2, например. «my_templates». По умолчанию: None ;
  • cmdline_args — Список строк, которые необходимо передать команде для запуска браузера. Например, мы можем добавить дополнительные флаги для Chrome; eel.start(‘main.html’, mode=’chrome-app’, port=8080, cmdline_args=[‘—start-fullscreen’, ‘—browser-startup-dialog’]) . По умолчанию: [] ;
  • size — Кортеж целых чисел, указывающий (ширину, высоту) главного окна в пикселях. По умолчанию: None ;
  • position — Кортеж целых чисел, указывающий (слева, сверху) главного окна в пикселях. По умолчанию: None ;
  • geometry — Словарь, определяющий размер и положение для всех окон. Ключи должны быть относительным путем страницы, а значения должны быть словарем вида . По умолчанию: <> ;
  • close_callback — Лямбда или функция, которая вызывается, когда веб-сокет для окна закрывается (т. е. когда пользователь закрывает окно). Он должен принимать два аргумента; строка, представляющая собой относительный путь только что закрытой страницы и список других веб-сокетов, которые все еще открыты. По умолчанию: None ;
  • app — Экземпляр Bottle, который будет использоваться, а не создавать новый. Это можно использовать для установки промежуточного программного обеспечения на экземпляр перед запуском угря, например. для управления сессиями, аутентификации и т. д.;
  • shutdown_delay — Таймер, настраиваемый для механизма обнаружения выключения Eel, при котором, когда какой-либо веб-сокет закрывается, он ожидает shutdown_delay секунд, а затем проверяет, есть ли сейчас какие-либо соединения с веб-сокетом. Если нет, то Eel закрывается. В случае, если пользователь закрыл браузер и хочет выйти из программы. По умолчанию значение shutdown_delay равно 1,0 секунде;

Экспонирование функций:

В дополнение к файлам в папке внешнего интерфейса библиотека Javascript будет обслуживаться в «/eel.js». Вы должны включать это на любые страницы:

Источник: prognote.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru