Как сделать визуальную программу на python

В прошлой главе (фух, это было сложно!) мы с тобой создали текстовый квест, и, в целом, ты теперь умеешь создавать достаточно большие программы в текстовым интерфейсом. Но вот не задача: большинство программ, с которыми мы работаем на ПК — текстовые редакторы, браузеры, проигрыватели фильмов — выглядят совсем по-другому: у них есть кнопки, поля ввода, графика, иными словами — графический интерфейс пользователя (GUI).

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

Можно ли создавать такие приложения на питоне? Конечно, да! И более того, для этого есть множество разных библиотек, например, PyQt и Kivy (последняя, кстати, позволяет в том числе создавать мобильные приложения), однако устроены они довольно сложно. Поскольку мы с тобой только начинаем, мы возьмем самый простой вариант — библиотеку TkInter которая, как и random , time , winsound уже встроена в дистрибутив питона.

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

Я должен заранее признаться, что TkInter — местами достаточно топорный и запутанный инструмент, но зато — максимально простой для освоения. В этой главе я не смогу объяснить все досконально (обычно эту тему проходят чуть позже), зато смогу показать, как уже сейчас ты сможешь добавлять графический интерфейс в свои программы. А постепенно, в дальнейшем, ты будешь понимать что же такое мы написали с технической точки зрения.

В качестве практического проекта в этот раз я предлагаю тебе создать инженерный калькулятор, который ты сможешь использовать для математических расчетов в школе. Но перед этим нам предстоить освоить создание окон, кнопок, текстовых полей и полей для ввода. Поехали!

Создаем окно приложения

Для начала работы с TkInter, необходимо импортировать модуль:

import tkinter

Однако в этот раз, чтобы не писать постоянно tkinter. перед каждой командой, давайте импортируем из модуля сразу все, что в нем есть. Делается это следующим образом:

from tkinter import *

Теперь все команды из модуля tkinter можно писать без префикса tkinter. , как будто это часть самого языка.

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

window = Tk()

Только, кажется, есть проблема! Если попробовать запустить наше приложение, оно сразу же закрывается. Для этого нужно попросить питон дождаться, пока пользователь не нажмет на крестик. Для этого в tkinter встроена функция mainloop() — она ждет, пока мы не закроем окно, а еще обеспечивает работу кнопок и обработку любых действий пользователя с окном.

В общем, важная вещь!

from tkinter import * window = Tk() mainloop()

Вот теперь-то все запустилось!

При желании окошку можно задать название:

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


from tkinter import * window = Tk() window.title(«Графическое приложение») mainloop()

Кстати, если у нас есть команда создания окна, мы же наверняка можем запустить ее несколько раз.

from tkinter import * window1 = Tk() window2 = Tk() window3 = Tk() window4 = Tk() mainloop()

Добавляем кнопку

Итак, мы научились создавать окна. Только как-то в этих окнах пока пустовато. TkInter позволяет добавлять на окно различные элементы пользовательского интерфейса — виджеты. Давайте что-нибудь добавим, например, кнопку!

from tkinter import * # создаем окно window = Tk() window.title(«Графическое приложение») # создаем кнопку внутри окна window с текстом «Нажми меня!» Button(window, text=»Нажми меня!») mainloop()

Запускаем. Кажется, кнопки нет. На самом деле, мы просто забыли попросить ее показаться с помощью метода pack() .

from tkinter import * # создаем окно window = Tk() window.title(«Графическое приложение») # создаем кнопку внутри окна window с текстом «Нажми меня!» button = Button(window, text=»Нажми меня!») # просим кнопку «нарисоваться» button.pack() mainloop()

Вот теперь, конечно, топорно, но кнопка появилась.

В коде выше есть два момента, которые нужно отдельно обсудить. Во-первых, мы с тобой уже видели, что функции могут принимать один или несколько параметров, причем в зависимости от ситуации их может быть разное количество. Например, в print(. ) мы можем передать сколько угодно строк через запятую, а можем не передавать вообще. А вот random.randint(from, to) хочет от нас ровно два параметра — самое маленькое и самое большое число, которые можно сгенерировать.

Иногда бывает, что необязательных параметров у функции так много, что нужно указать, какие именно мы передаем. В частости, в функцию (сейчас немного лукавлю, но это во благо!) Button(window, text=»Нажми меня!») мы передали окно и текст для кнопки. Первый параметр — это всегда окно, поэтому его имя можно не указывать, а вот чтобы уточнить, что за ним мы передаем именно текст, мы и добавили text= .

Читайте также:
Как создать прайс лист в программе 1с

Тогда какие могут быть еще параметры? Их много, например, еще есть ширина и высота.

from tkinter import * # создаем окно window = Tk() window.title(«Графическое приложение») # создаем кнопку внутри окна window с текстом «Нажми меня!» button = Button(window, text=»Нажми меня!», width=30, height=5) # просим кнопку «нарисоваться» button.pack() mainloop()

Хорошо, с этим понятно. А что тогда во-вторых? Возможно ты заметил, что мы как-то странно вызываем функцию button.pack() ? Раньше мы использовали такой синтаксис с точкой для вызова функции из модуля, но ведь button — это не модуль, а кнопка (что-бы это не было)?

Здесь я должен заметить две вещи: во-первых, в переменных могут лежать не только строки и числа, как было в прошлой главе, но и более сложные объекты, например, кнопки и окна, как мы уже видели в коде выше. А во-вторых, иногда объект из переменной можно не только передать в функцию в качестве параметра, как мы передаем строки в print и окно в Button , но и попросить у объекта, чтобы он сделал что-то сделал сам.

Если мы просим объект что-то сделать, то команду для него мы запускаем через точку, такая команда называется методом объекта. Например, у строк есть метод lower() , который приводит их к нижнему регистру, а у кнопок и других виджетов из TkInter метод pack() , который просит виджет нарисоваться.

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

s = «HaHaHaHa» print(s) print(s.lower())

Вывод:

HaHaHaHa hahahaha

По аналогии работает и отрисовка виджетов. pack — это метод кнопки, т.е. действие которое мы просим выполнить саму кнопку.

# создаем кнопку внутри окна window с текстом «Нажми меня!» button = Button(window, text=»Нажми меня!», width=30, height=5) # просим кнопку «нарисоваться» button.pack()

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

from tkinter import * # создаем окно window = Tk() window.title(«Графическое приложение») # создаем кнопку внутри окна window с текстом «Нажми меня!» и сразу рисуем ее Button(window, text=»Нажми меня!», width=30, height=5).pack() mainloop()

Обрабатываем нажатие на кнопку

Отлично, теперь у нас есть кнопка, только беда в том, что она ничего не делает. Чтобы заставить нашу программу реагировать на нажатие кнопки, нам понадобится создать функцию (не зря мы научились это делать в прошлой главе!), которую TkInter вызовет в момент нажатия пользователем на кнопку, и указать эту функцию при создании кнопки.

То есть алгоритм действий следующий:

  1. написать функцию, которую мы хотим вызвать после нажатия кнопки;
  2. указать название этой функции про создании кнопке в параметре command .

from tkinter import * # описываем функцию my_action def my_action(): print(«Пользователь нажал на кнопку!») window = Tk() window.title(«Графическое приложение») # сообщаем имя функции (только имя, без скобочек!) в параметре command Button(window, text=»Нажми меня!», width=30, height=5, command=my_action).pack() mainloop()

Обрати внимание, что имя функции мы передаем без скобочек, иначе она вызовется только в момент создания кнопки (и больше работать не будет). А мы хотим, чтобы TkInter вызывал ее при каждом нажатии кнопки. После запуска программы в самом окне ничего по-прежнему меняться не будет (а мы ничего и не меняем), а вот в консоли питона будет выводится сообщение при каждом нажатии.

Кстати, ничто не мешает нам добавить вторую кнопку, например, для закрытия окна. Для этого добавим еще одну функцию-обработчик и создадим еще одну кнопку.

from tkinter import * # описываем функцию my_action def my_action(): print(«Пользователь нажал на кнопку!») # описываем функцию для закрытия окна def close_window(): # закрыть окно quit() window = Tk() window.title(«Графическое приложение») # сообщаем имя функции (только имя, без скобочек!) в параметре command Button(window, text=»Нажми меня!», width=30, height=5, command=my_action).pack() # добавляем вторую кнопку — для закрытия окна, передаем в command нашу функцию close_window Button(window, text=»Закрыть окно», width=30, height=5, command=close_window).pack() mainloop()

Добавляем текстовое поле

Давайте сделаем приложение, которое при нажатии на кнопку будет показывать пользователю случайную пословицу. Мы уже умеем создавать окно и можем добавить в него кнопку, а вот выводить у нас пока получалось только в консоль питона. Чтобы вывести какой то текст в окно нам потребуется текстовое поле — Label .

Создается текстовое поле так:

from tkinter import * window = Tk() window.title(«Графическое приложение») # создаем текстовое поле в окне window с текстом «Привет, мир» Label(window, text=»Привет, мир!», width=25, height=5).pack() mainloop()

Читайте также:
Как сделать чтобы программа была совместимой

Теперь можно попробовать менять текст в поле после нажатия на кнопку. И тут все становится немного сложнее: проще всего менять текст полей в tkinter с помощью «прокси-переменных». Это такой объект-посредник, который привязывается к одному или нескольким текстовым полям, и в момент его изменения изменятся и все поля.

from tkinter import * # создаем окно window = Tk() # создаем посредника и кладем его в переменную StringVar text_var = StringVar() # создаем поле и привязываем к его к нашему посреднику (вместо text передаем параметр textvariable) Label(window, textvariable=text_var).pack() # теперь можно задать текст с помощью text_var.set(НОВЫЙ ТЕКСТ) text_var.set(«Привет») # узнать, что написано в поле можно через text_var.get() new_text = text_var.get() + «, Вася!» # поменять текст можно тоже с помощью text_var.set(НОВЫЙ ТЕКСТ) text_var.set(new_text)

Для примера, давайте напишем рандомный генератор курса акций Tesla . Говорят, они часто делают крутое «пике»!

import random from tkinter import * # 1. Описываем функцию, которая будет срабатывать при нажатии на кнопку def print_price(): # Генерируем случайное число от 100 до 3000 price = random.randint(100, 3000) # Превращаем число в строку с помощью str и добавляем знак доллара # Результат отправляем в text_label через price_var.set(НОВЫЙ ТЕКСТ) price_var.set(str(price) + «$») # 2. Создаем окно window = Tk() window.title(«Стоимость акций Tesla») # 3. Создаем StringVar() — посредника для изменения текста в поле # и кладем его в переменную price_var price_var = StringVar() # 3. Добавляем текстовое поле text_label # и привязываем к нему price_var text_label = Label(window, textvariable=price_var, width=25, height=5).pack() # 4. Добавляем кнопку # При нажатии вызывается функция print_price Button(window, text=»Узнать стоимость», width=25, height=5, command=print_price).pack() mainloop()

Теперь при каждом нажатии наша рандомная стоимость будет меняться.

Добавляем поле для ввода

Отлично, мы совладали с текстовыми полями и кнопками. Последнее, что осталось изучить для нашего «starter pack» — это как добавить поле для ввода текста, чтобы пользователь смог что-то ввести. Например, давайте напишем программу, которая разворачивает строку задом наперед .

Кнопку для разворота мы создавать уже умеем, а для создания поля для ввода нам понадобится Entry . Принцип получения и изменения текста такой же, как и с Label — через StringVar

import random from tkinter import * def reverse_text(): # берем текст из поля для ввода text = input_var.get() # эта магия разворачивает текст, вернемся к ней в следующей главе text = text[::-1] # кладем текст обратно input_var.set(text) window = Tk() window.title(«Разворачиватель строк») # Как и с Label, создаем объект для хранения текста input_var = StringVar() # По аналогии с Label добавляем поле для ввода и показываем его Entry(window, textvariable=input_var, width=25).pack() # Добавляем кнопку Button(window, text=»Развернуть», width=25, height=3, command=reverse_text).pack() mainloop()

Тренировочное задание — попробуй сделать «упрощенный» калькулятор, в нем есть два поля ввода для чисел, текстовое поле для ответа и две кнопки — сложить и вычесть. После нажатия на одну из них, результат должен показываться в поле для ответа. Попробуй отловить все баги, они там будут!

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

Визуальный редактор графического интерфейса для tkinter

введите сюда описание изображения

Пожалуйста можете посоветовать визуальный редактор графического интерфейса для tkinter кроме Visual Python Tkinter IDE. И можно ли в «Blend for Visual Studio 2015» сделать? Я использую Python 3.4.4

Отслеживать
46.4k 16 16 золотых знаков 56 56 серебряных знаков 97 97 бронзовых знаков
задан 8 апр 2017 в 15:48
819 4 4 золотых знака 14 14 серебряных знаков 31 31 бронзовый знак
вы хотите ui designer/builder типа Qt Creator или Deco IDE (React Native), но для Tkinter?
8 апр 2017 в 16:09
да gui designer/builder
8 апр 2017 в 17:43
8 апр 2017 в 18:16
Может Rapyd-tk?Я сам не пользуюсь ,но слышал.

4 июн 2019 в 18:12

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Актуальные инструменты

PAGE (документация)

  • позволяет создавать интерфейс перетаскиванием компонентов;
  • на основе «нарисованного» интерфейса генерирует python модули;
  • фактическое размещение компонентов с помощью метода place (по координатам).

Скриншот PAGE

Pygubu

  • визуальный редактор графического интерфейса;
  • размещение компонентов не перетаскиванием, а выбором ячейки контейнера (сетки) и выбором нужного компонента
  • созданный интерфейс сохраняется в собственном xml формате (с расширением ui), полученные файлы в своей программе можно «подключить» для создания окон;
  • размещение компонентов с помощью метода grid (по сетке).

Скриншот Pygubu

Tkinter-Designer

  • генератор кода и изображений для графического интерфейса на основе дизайна, разработанного с помощью Figma;
  • в сгенерированном коде элементы управления размещаются с помощью place .

Tkinter-Designer

Formation

  • визуальный редактор интерфейса
  • размещение компонентов перетаскиванием
  • описание интерфейса сохраняется в своем xml формате (подход схожий с Pygubu)
  • размещение элементов возможно через grid , pack , place (выбирается в свойствах контейнера — окна или фрейма — перед добавлением компонента).

Formation Studio

Устаревшие, неактуальные, неподдерживаемые инструменты

Rapyd-tk

IDE с визуальным редактором графического интерфейса. Поддерживает Python 2.6-2.7. Больше не разрабатывается (ориентировочно с 2014 года). Страница проекта в архиве: ссылка

Скриншот Rapyd-tk

Visual Python Tkinter IDE

Не разрабатывается с 2010 года.

Читайте также:
Как запустить программу справка и поддержка

Visual Python Tkinter IDE

SpecTcl

Визуальный редактор графического интерфейса с генерацией кода на tcl и других языках. На sourceforge последние изменения были в 2011 году, похоже, что больше не разрабатывается.

Источник: ru.stackoverflow.com

Визуальное программирование на Питон

Поговорим о визуальном программирование на Питон) возможно вы не в курсе, но существует единственная в мире программа-игровой движок на Питон , при чем программирования ведется Визуально.Отличие от большинства программ еще и в том что программу можно сразу сохранять *. jad, ехе, apk , HTML5. Это как раз ответ на статью о том ,что Программа Питон не кому не нужна мол она медленная, и не способна работать с многими процессами, а зачем ей много поточность? если она способна выполнять 80% всего что нужно простым потребителям продукта?

12 375 просмотров

давайте на кое что посмотрим

но по факту все выглядит так)

Посмотрим внимательно , нет проблемы на каком языке программировать ,

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

какой бы не был язык программирование, блок и его действие не низменны

то есть присвоив блоку действие, программно мы лишь опишим его выполнение.

Из блока собирается шаблон.

И вместо писать одно и то же самое действие миллион раз мы просто вызовим шаблон,который при необходимости можем добавить и расширить .

Не один потребитель и покупатель не использует мощности и возможности даже на 10 % от возможности машин. Какой простому обывателю смысл от вашей скорости? если он хочет просто посмотреть фильм или почитать книгу или поиграть в игру? с этим успешно справлялись даже машины выпущеные более 8 лет назад.

с этим отлично справляется банальный чип на АРМ.

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

Я скажу больше)))) есть возможность писать код на питон, но при этом программа будет работать на С++ ))

обьект дерево будет обьктом дерево на любом языке программирования.

Если ошибок нет то код будет работать с любым языком программирования

вы просто не следили за развитием визуальных языков и не видели возможность. И пока вы пишите текстом кто то ведет разработку в 50 -100 раз быстрее чем текст используя просто шаблон.

кто то писал про то что он пишет на дельфи плеер, не вижу проблем))на питоне это еще проще.

Питон отлично работает везде, от игр до бухгалтерии,смысл хотеть от него чего то большее?

он отлично справляется как с синтезом текста ,так и с переводом на любой язык.

для более чем 80% нужд его достаточно,а следовательно его можно продать) и это решение намного проще и лучше чем убогий Bubble который не иметь даже 50 % нужного функционала, Питон проще и понятнее

всего то и требовалось сделать программирование на русском языке и сделать более понятный дизайн ,)

Программа не продана всего по одной причине

Но не факт что уже в скором будущем мы не увидим аналоги этих программ

у меня нет интереса писать интересную для кого то заметку бесплатно и бесплатно слушать еще и отзывы))

сделайте лучше и покажите. ^^ ,покажите что сделали вы и тогда я возможно вас послушаю,

Я не обязана всем нравитсья и уж что мне не нужно это любовь миллиона людей,которые не дадут мне даже апелсинку.

Я готова послушать мнение Сергей Брин , готова даже послушать Митчел Резник , я не против общения Юсаку Мээдзава ,я с удовольствием пообщалась бы с Игорь Сысоев и Максим Коновалов , у меня есть решение для Джек Дорси, но лично ваше мнение мне мало интересно .

простая программа для денежного перевода упрощенная версия время разработки 7 минут . через простейшие списки.

просто пару минут назад увидела конкурс)) вот простое решение , что бы показать как работает перевод денег , просто времени нету на разработку еще дизайна интерфейса не было, да и на конкурсы мне мало интересны, но идея была интересной.

итого меньше 7 минут разработка ,кто то сделает быстрее?

23 комментария
Написать комментарий.
Аккаунт удален
Развернуть ветку

Вы про Блокли от гугла не слышали?)
https://developers.google.com/blockly/
Только благодаря Блокли я понял, что смогу)))

Развернуть ветку

Не единственная.
Вот программа которая может строить программы используя Python с помощью блок схем. Визуально. И не только Питон..
Вот пример создания бота для betcity используя Питон и Selenium.
https://youtu.be/dT6jO1PreR4
А вот программа. https://kibor-bot.com/forum/topic.php?forum=1https://vc.ru/dev/133925-vizualnoe-programmirovanie-na-piton» target=»_blank»]vc.ru[/mask_link]

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