как сделать кнопку в python
Как создать функцию, которая создает окно с двумя кнопками, где каждая кнопка имеет указанную строку и, если она нажата, возвращает указанную переменную? Подобно @3:05 в этом видео https://www.khanacademy.org/science/computer-science-subject/computer-science/v/writing-a-simple-factorial-program—python-2 (я знаю это учебник для очень простой программы для новичков, но это единственное видео я), но без текстового окна, и у меня есть больше элементов управления, что делают кнопки «ok» и «cancel».
Мне нужно создать окно, нарисовать прямоугольник со строкой внутри него, а затем создать цикл, который проверяет движение мыши/щелчки мыши, а затем возвращать что-то, когда мышиные координаты находятся внутри одной из кнопок, и щелкнуть мышью? Или есть функция/набор функций, которые облегчили бы окно с кнопками? Или модуль?
Обзор
Нет, вам не нужно «рисовать прямоугольник, а затем делать петлю». Что вам нужно будет сделать, это импортировать набор инструментов графического интерфейса, и использовать методы и объекты, встроенные в этот инструментарий. Вообще говоря, одним из этих методов будет запуск цикла, который прослушивает события и вызывает функции, основанные на этих событиях. Этот цикл называется циклом события. Итак, хотя такой цикл должен выполняться, вам не нужно создавать цикл.
Предостережение
Если вы хотите открыть окно из приглашения, например, связанного с видео, проблема немного сложнее. Эти инструментальные средства не предназначены для использования таким образом. Как правило, вы пишете полную программу на основе графического интерфейса, где все входные и выходные данные выполняются через виджеты. Это не невозможно, но, на мой взгляд, при обучении вы должны придерживаться всего текста или всего графического интерфейса, а не смешивать их.
Пример использования Tkinter
Например, один такой набор инструментов — tkinter. Tkinter — это инструментарий, встроенный в python. Любой другой набор инструментов, такой как wxPython, PyQT и т.д., Будет очень похож и работает так же хорошо. Преимущество Tkinter заключается в том, что вы, вероятно, уже имеете его, и это фантастический инструментарий для обучения графическому интерфейсу. Это также фантастически для более продвинутого программирования, хотя вы найдете людей, которые не согласны с этим. Не слушайте их.
Вот пример в Tkinter. Этот пример работает в python 2.x. Для python 3.x вам нужно импортировать из tkinter , а не tkinter .
Выдали задание — создать приложение для работы с базой данных. Пока что с одной таблицей из базы. Изучали пока только Tkinter, поэтому и работаю в нём. Также для подключения к базе в PostgreSQL — Psycopg2.
Пока что создала только каркас для будущего приложения, красотой и функциональностью пока не занималась.
Изображение работы ниже.
Дальше я хочу заставить работать кнопки. С этого начинаются мои проблемы. (Хотя мне кажется, что для многих это и не проблемы вовсе)
Начинаю с кнопки «Следующая запись». Для этих целей я хочу, чтобы бралась переменная number_of_string и к ней добавлялась единица, после чего бы записи заменялись на последующие.
Для этого я выносила начало функции Formi в отдельную функцию.
Также добавила функцию «Next»:
После чего добавила события для кнопок «Продолжить» и «Следующая запись».
Вылетала такая ошибка:
Ну поняла, что это потому что функции я создала, но их результат никуда не записала.
В итоге текст приобретает такой вид:
В общем, несколько дней я билась над этим. Понимаю, что чем дольше я не прошу помощи, тем больше сама себя путаю. Поэтому и пишу сюда. За помощь буду благодарна.
- Текст программы обрабатывается интерпретатором сверху вниз, но функциям и классам только дается определение, и выполнение кода в них не происходит. Удобнее сначала дать определение всем функциям и классам, а потом использовать их.
- Следует различать функции, которые вы вызываете вручную, и те которые привязываете в качестве обработчиков событий Tkinter. Функции, которые вы вызываете самостоятельно, принимают аргументы и возвращают значения через return , и желательно чтобы они не использовали глобальных переменных. Функции-обработчики (для Tkinter) принимают один аргумент — event (описание события, по случаю которого была вызвана функция (например, нажатие на кнопку)). Функции-обработчики всегда должны быть объявлены с этим аргументом, даже если они его никак не используют, т.к. Tkinter попытается его передавать, а передавать некуда (Ошибка ‘TypeError: Schitivanie() missing 1 required positional argument: ‘event’ ‘ из комментария к другому ответу). Обработчики общаются через глобальные переменные или через поля класса, к которому они относятся (если функция является методом). В функции Schitivanie вы пытаетесь совместить обе роли, это получается не очень хорошо.
- Имена аргументов, указанных при объявлении функций, никак не связаны с глобальными переменными, названными так же (например, entry_0 , который является аргументом функции Schitivanie , никак не связан с глобальной переменной entry_0 ). Соответственно, глобальные переменные не подставляются автоматически при вызове функций с аргументами, названными так же. Если нужно обратиться к глобальной переменной из функции, просто обратитесь к ней, не добавляя ее имя в список аргументов функции (главное, чтобы переменная уже была доступна на момент вызова).
Исходя из этого:
Вообще, для Tkinter лучше использовать классы, это позволяет лучше структурировать программу, и избавиться от использования global (т.к. вместо глобальных переменных используются поля объекта). Я не сторонник объектно-ориентированного подхода, но программирование пользовательского интерфейса — это тот случай, когда ООП действительно полезен.
Я делаю игру в pygame, и на первом экране я хочу, чтобы там были кнопки, которые вы можете нажать, чтобы (i) запустить игру, (ii) загрузить новый экран с инструкциями и (iii) выйти из программа.
Я нашел этот код онлайн для создания кнопок, но я его не понимаю (я не так хорошо разбираюсь в объектно-ориентированном программировании). Если бы я мог получить какое-то объяснение относительно того, что он делает, это было бы здорово. Кроме того, когда я использую его и пытаюсь открыть файл на своем компьютере с помощью пути к файлу, я получаю ошибку sh: filepath: Permission denied, который я не знаю, как решить.
Спасибо всем, кто может мне помочь.
У меня нет кода для вас, но как бы я это сделал:
- Сделать класс Button, текст должен быть включен в качестве аргумента конструктора
- Создайте поверхность PyGame, будь то изображение или заполненный Rect
- Измените текст на нем с помощью материала Font.Render в Pygame
Это похоже на то, что делает ваш пример, хотя все еще отличается.
«Код», который вы нашли в Интернете, не так хорош. Все, что вам нужно сделать, это кнопка. Поместите это рядом с началом вашего кода:
Поместите следующее в свой игровой цикл. Также где-то в вашем игровом цикле:
Также помещайте это в свой игровой цикл, где бы вы ни делали for event in pygame.event.get
Итак, buttonify загружает изображение, которое будет на кнопке. Это изображение должно быть файлом .jpg или любым другим файлом PICTURE в том же каталоге, что и код. Картинка — это его имя. Имя должно иметь .jpg или что-нибудь еще после него, и имя должно быть в кавычках. Параметр coords в Buttonify — это верхняя правая координата на вашем экране или окне, которое открывается из pygame. Поверхность — это вещь:
Таким образом, функция делает что-то, называемое «образ», которое является поверхностью пигмейка, оно помещает вокруг него прямоугольник под названием «imagerect» (чтобы установить его в месте и для второго параметра, когда blitting), а затем он устанавливает его местоположение и близит его на второй и последней последней строке.
Следующий бит кода делает «изображение» кортежем как «образа», так и «imagerect».
В последнем коде есть if event.type == MOUSEBUTTONDOWN and event.button == 1: , что в основном означает, что нажата левая кнопка мыши. Этот код ДОЛЖЕН быть в for event in pygame.event.get . Следующая строка делает мышь кортежем положения мыши. Последняя строка проверяет, столкнулась ли мышь с Image [1], которая, как мы знаем, «imagerect». Код следует за этим.
Скажите мне, если мне нужно объяснить дальше.
В этой части урока программирования с Tkinter мы познакомимся с менеджерами разметки. Когда мы создаем графический интерфейс нашего приложения, мы определяем, какие виджеты будем использовать, и как они будут расположены в приложении. Для того, чтобы организовать виджеты в приложении, используются специальные невидимые объекты – менеджеры разметки.
Существует два вида виджетов: контейнеры и их дочерние виджеты. Контейнеры объединяют их дочерние виджеты для формирования разметки. У Tkinter есть три встроенных менеджера разметки: pack, grid и place.- Place – это менеджер геометрии, который размещает виджеты, используя абсолютное позиционирование.
- Pack – это менеджер геометрии, который размещает виджеты по горизонтали и вертикали.
- Grid – это менеджер геометрии, который размещает виджеты в двухмерной сетке.
Абсолютное позиционирование
В большинстве случаев разработчикам необходимо использовать менеджеры разметки. Есть несколько ситуаций, в которых следует использовать именно абсолютное позиционирование. В рамках абсолютного позиционирования разработчик определяет позицию и размер каждого виджета в пикселях. Во время изменения размеров окна размер и позиция виджетов не меняются.
Таким образом, на разных платформах приложения выглядят по-разному. То, что выглядит нормально на Linux, может отображаться некорректно на Mac OS. Изменение шрифтов в нашем приложении также может испортить разметку. Если мы переведем наше приложение на другой язык, мы должны доработать и разметку.
Эта статья предназначена для тех, кто только начинает своё знакомство с созданием приложений с графическим интерфейсом (GUI) на Python. В ней мы рассмотрим основы использования PyQt в связке с Qt Designer. Шаг за шагом мы создадим простое Python GUI приложение, которое будет отображать содержимое выбранной директории.
Что нам потребуется
Нам понадобятся PyQt и Qt Designer, ну и Python, само собой.
В этой статье используется PyQt5 с Python 3, но особых различий между PyQt и PySide или их версиями для Python 2 нет.
Windows: PyQt можно скачать здесь. В комплекте с ним идёт Qt Designer.
macOS: Вы можете установить PyQt с помощью Homebrew:
$ brew install pyqt5
Скачать пакет с большинством компонентов и инструментов Qt, который содержит Qt Designer, можно по этой ссылке.
Linux: Всё нужное, вероятно, есть в репозиториях вашего дистрибутива. Qt Designer можно установить из Центра Приложений, но PyQt придётся устанавливать через терминал. Установить всё, что нам понадобится, одной командой можно, например, так:
После того как вы закончили с приготовлениями, откройте командную строку/терминал и убедитесь, что вы можете использовать команду pyuic5 . Вы должны увидеть следующее:
Если вы видите сообщение, что такой команды нет или что-то в таком роде, попробуйте загуглить решение проблемы для вашей операционной системы и версии PyQt.
Если вы используете Windows, то, скорее всего, путь C:\Python36\Scripts (измените 36 на вашу версию Python) не прописан в вашем PATH . Загляните в этот тред на Stack Overflow, чтобы узнать, как решить проблему.
Теперь, когда у нас всё готово к работе, давайте начнём с простого дизайна.
Откройте Qt Designer, где вы увидите диалог новой формы, выберите Main Window и нажмите Create.
После этого у вас должна появиться форма — шаблон для окна, размер которого можно менять и куда можно вставлять объекты из окна виджетов и т.д. Ознакомьтесь с интерфейсом, он довольной простой.
Теперь давайте немного изменим размер нашего главного окна, т.к. нам не нужно, чтобы оно было таким большим. А ещё давайте уберём автоматически добавленное меню и строку состояния, поскольку в нашем приложении они не пригодятся.
Все элементы формы и их иерархия по умолчанию отображаются в правой части окна Qt Designer под названием Object Inspector. Вы с лёгкостью можете удалять объекты, кликая по ним правой кнопкой мыши в этом окне. Или же вы можете выбрать их в основной форме и нажать клавишу DEL на клавиатуре.
В итоге мы имеем почти пустую форму. Единственный оставшийся объект — centralwidget , но он нам понадобится, поэтому с ним мы ничего не будем делать.
Теперь перетащите куда-нибудь в основную форму List Widget (не List View) и Push Button из Widget Box.
Вместо использования фиксированных позиций и размеров элементов в приложении лучше использовать макеты. Фиксированные позиции и размеры у вас будут выглядеть хорошо (пока вы не измените размер окна), но вы никогда не можете быть уверены, что всё будет точно так же на других машинах и/или операционных системах.
Макеты представляют собой контейнеры для виджетов, которые будут удерживать их на определённой позиции относительно других элементов. Поэтому при изменении размера окна размер виджетов тоже будет меняться.
Давайте создадим нашу первую форму без использования макетов. Перетащите список и кнопку в форме и измените их размер, чтобы вышло вот так:
Теперь в меню Qt Designer нажмите Form, затем выберите Preview и увидите что-то похожее на скриншот выше. Выглядит хорошо, не так ли? Но вот что случится, когда мы изменим размер окна:
Наши объекты остались на тех же местах и сохранили свои размеры, несмотря на то что размер основного окна изменился и кнопку почти не видно. Вот поэтому в большинстве случаев стоит использовать макеты. Конечно, бывают случаи, когда вам, например, нужна фиксированная или минимальная/максимальная ширина объекта. Но вообще при разработке приложения лучше использовать макеты.
Основное окно уже поддерживает макеты, поэтому нам ничего не нужно добавлять в нашу форму. Просто кликните правой кнопкой мыши по Main Window в Object Inspector и выберите Lay out → Lay out vertically. Также вы можете кликнуть правой кнопкой по пустой области в форме и выбрать те же опции:
Ваши элементы должны быть в том же порядке, что и до внесённых изменений, но если это не так, то просто перетащите их на нужное место.
Так как мы использовали вертикальное размещение, все элементы, которые мы добавим, будут располагаться вертикально. Можно комбинировать размещения для получения желаемого результата. Например, горизонтальное размещение двух кнопок в вертикальном будет выглядеть так:
Если у вас не получается переместить элемент в главном окне, вы можете сделать это в окне Object Inspector.
Последние штрихи
Теперь, благодаря вертикальному размещению, наши элементы выровнены правильно. Единственное, что осталось сделать (но не обязательно), — изменить имя элементов и их текст.
В простом приложении вроде этого с одним лишь списком и кнопкой изменение имён не обязательно, так как им в любом случае просто пользоваться. Тем не менее правильное именование элементов — то, к чему стоит привыкать с самого начала.
Свойства элементов можно изменить в разделе Property Editor.
Подсказка: вы можете менять размер, передвигать или добавлять часто используемые элементы в интерфейс Qt Designer для ускорения рабочего процесса. Вы можете добавлять скрытые/закрытые части интерфейса через пункт меню View.
Нажмите на кнопку, которую вы добавили в форму. Теперь в Property Editor вы должны видеть все свойства этого элемента. В данный момент нас интересуют objectName и text в разделе QAbstractButton . Вы можете сворачивать разделы в Property Editor нажатием по названию раздела.
Измените значение objectName на btnBrowse и text на Выберите папку.
Должно получиться так:
Именем объекта списка является listWidget , что вполне подходит в данном случае.
Сохраните дизайн как design.ui в папке проекта.
Превращаем дизайн в код
Конечно, можно использовать .ui -файлы напрямую из Python-кода, однако есть и другой путь, который может показаться легче. Можно конвертировать код .ui -файла в Python-файл, который мы потом сможем импортировать и использовать. Для этого мы используем команду pyuic5 из терминала/командной строки.
Чтобы конвертировать .ui -файл в Python-файл с названием design.py , используйте следующую команду:
Теперь у нас есть файл design.py с нужной частью дизайна нашего приложения и мы начинать работу над созданием его логики.
Создайте файл main.py в папке, где находится design.py .
Используем дизайн
Для Python GUI приложения понадобятся следующие модули:
Также нам нужен код дизайна, который мы создали ранее, поэтому его мы тоже импортируем:
Так как файл с дизайном будет полностью перезаписываться каждый раз при изменении дизайна, мы не будем изменять его. Вместо этого мы создадим новый класс ExampleApp , который объединим с кодом дизайна для использования всех его функций:
В этом классе мы будем взаимодействовать с элементами интерфейса, добавлять соединения и всё остальное, что нам потребуется. Но для начала нам нужно инициализировать класс при запуске кода. С этим мы разберёмся в функции main() :
И чтобы выполнить эту функцию, мы воспользуемся привычной конструкцией:
В итоге main.py выглядит таким образом:
Если запустить этот код: $ python3 main.py , то наше приложение запустится!
Но нажатие на кнопку ничего не даёт, поэтому нам придётся с этим разобраться.
Добавляем функциональность в наше Python GUI приложение
Примечание Весь дальнейший код пишется внутри класса ExampleApp .
Начнём с кнопки Выберите папку. Привязать к функции событие вроде нажатия на кнопку можно следующим образом:
Добавьте эту строку в метод __init__ класса ExampleApp , чтобы выполнить привязку при запуске приложения. А теперь взглянем на неё поближе:
- self.btnBrowse : здесь btnBrowse — имя объекта, который мы определили в Qt Designer. self говорит само за себя и означает принадлежность к текущему классу;
- clicked — событие, которое мы хотим привязать. У разных элементов разные события, например, у виджетов списка есть itemSelectionChanged и т.д.;
- connect() — метод, который привязывает событие к вызову переданной функции;
- self.browse_folder — просто функция (метод), которую мы описали в классе ExampleApp .
Для открытия диалога выбора папки мы можем использовать встроенный метод QtWidgets.QFileDialog.getExistingDirectory :
Если пользователь выберет директорию, переменной directory присвоится абсолютный путь к выбранной директории, в противном случае она будет равна None . Чтобы не выполнять код дальше, если пользователь закроет диалог, мы используем команду if directory: .
Для отображения содержимого директории нам нужно импортировать os :
И получить список содержимого следующим образом:
Для добавления элементов в listWidget мы используем метод addItem() , а для удаления всех элементов у нас есть self.listWidget.clear() .
В итоге функция browse_folder должна выглядеть так:
Теперь, если запустить приложение, нажать на кнопку и выбрать директорию, мы увидим:
Так выглядит весь код нашего Python GUI приложения:
Это были основы использования Qt Designer и PyQt для разработки Python GUI приложения. Теперь вы можете спокойно изменять дизайн приложения и использовать команду pyuic5 без страха потерять написанный код.
Создание кнопки в Python
Для того, чтобы создать кнопку в Python 3 с обработкой нажатия мыши, понадобится использовать пакет или библиотеку tkinter. По сути tkinter package является стандартным интерфейсом Python для инструментария Tk GUI. Поэтому его можно использовать для создания кнопки. Для осваивания данного языка это будет интересная и полезная практика. Для начала следует импортировать данный пакет и протестировать был ли он установлен в используемой вами среде разработки.
Установить tkinter в Линуксе (Убунту) можно через терминал (вызов терминала: Alt-Ctrl-T) набрав в терминале sudo apt-get install python3-tk. Там же в терминале можно узнать и установленную версию Питона (python — v).
Протестировать и узнать установлен ли tkinter в среде разработки можно следующим образом:
Самый простой пример кнопки без обработчика нажатия мыши можно прописать так:
Ещё пример простой до безобразия кнопки в Python 3:
Создание кнопки в Python 3 при помощи tkinter
А вот интересный пример, в котором сразу три кнопки в одном фрейме (окне) при помощи библиотеки tkinter:
- первая кнопка обрабатывает нажатие мыши и выводит после него сообщение на экран,
- вторая кнопка при нажатии выводит актуальное на данный момент время на самой кнопке,
- третья кнопка после нажатия на неё завершает свою работу (работу всего виджета).
Импорт пакета как tk (сокращённо). Импорт библиотеки времени.
Создание окна, в котором будут отображаться кнопки. master — родительский виджет. pack () — упаковщик для размещения блоков один под другим. Создание виджета.
Cоздание верхней кнопки. Первая кнопка обрабатывает нажатие мыши и выводит после него сообщение на экран. Текст на кнопке, также кнопку можно оформить в нужные цвета (цвет текста и фона), также можно выбрать шрифт (правда, прописанный шрифт у меня не сработал, но описан ниже для примера) и прописать размер кнопки.
сommand прописывает обращение к методу нажатия мыши на кнопку. Упаковщик pack необходим для размещения блоков один над другим.
Создание второй кнопки Выхода из программы в том же методе создания виджета. Создание кнопки выхода из программы с удалением всех виджетов. Упаковщик для размещения блоков один под другим.
Обработка нажатия мыши. Создание кнопки с указанием времени на ней на данный момент. Обращение к методу при нажатии на кнопку, который выведет актуальное на данный момент время.
Метод нажатия кнопки. Создание метода для вывода информации после нажатия на кнопку.
Создание метода, который выведет актуальное на данный момент время.
Создание собственного окна.
Создание экземпляра класса.
Запуск главного цикла обработки событий.
А вот и полностью весь код примера трёх кнопок, который по кусочкам описан выше:
Как сделать кнопку, чтобы перейти к следующей странице (файлу) в python? [Дубликат]
Это очень распространенная проблема, с которой мы сталкиваемся, борясь с «таинствами» JavaScript.
Давайте начнем с простой функции JavaScript:
Это простой синхронный вызов функции (где каждая строка кода выполняется одна за другой в последовательность), и результат будет таким же, как ожидалось.
Теперь добавим немного завихрения, введя небольшую задержку в нашей функции, чтобы все строки кода не выполнялись последовательно. Таким образом, он будет эмулировать асинхронное поведение функции:
Итак, вы идете, эта задержка просто сломала функциональность, которую мы ожидали! Но что именно произошло? Ну, на самом деле это довольно логично, если вы посмотрите на код. функция foo() после выполнения ничего не возвращает (таким образом, возвращаемое значение равно undefined ), но оно запускает таймер, который выполняет функцию после 1s, чтобы вернуть «wohoo». Но, как вы можете видеть, значение, присвоенное бару, является немедленно возвращенным материалом из foo (), а не что-либо еще, что приходит позже.
Итак, как мы решаем эту проблему?
Давайте попросим нашу функцию для ОБЕЩАНИЯ. Обещание действительно о том, что это означает: это означает, что функция гарантирует, что вы предоставите любой результат, который он получит в будущем. поэтому давайте посмотрим на это в нашей маленькой проблеме выше:
Таким образом, резюме — для решения асинхронных функций, таких как вызовы на основе ajax и т. д., вы можете использовать обещание resolve значение (которое вы намерены вернуть). Таким образом, короче говоря, вы разрешаете значение вместо возврата в асинхронных функциях.
3 ответа
Один способ состоит в том, чтобы складывать кадры друг на друга, тогда вы можете просто поднять один над другим в порядке укладки. Тот, что сверху, будет тем, который виден. Это лучше всего работает, если все кадры имеют одинаковый размер, но с небольшой работой вы можете заставить его работать с кадрами любого размера.
Примечание: для этого все виджеты для страницы должны есть эта страница (т.е.: self ) или потомок как родитель (или мастер, в зависимости от выбранной вами терминологии).
Вот немного надуманного примера, чтобы показать вам общую концепцию:
Если вы обнаружите, что концепция создания экземпляра в классе запутанна или разные страницы нуждаются в разных аргументах во время построения, вы можете явно вызвать каждый класс отдельно. Цикл служит в основном для иллюстрации того, что каждый класс идентичен.
Например, чтобы создать классы по отдельности, вы можете удалить цикл ( for F in (StartPage, . ) с помощью этого:
С течением времени люди задавали другие вопросы, используя этот код (или онлайн-учебник, который скопировал этот код). Вы можете прочитать ответы на эти вопросы:
Как сделать кнопку в python
Вопрос по python, window, button, user-input, module – Как сделать окно с кнопками в python
Как мне создать функцию, которая создает окно с двумя кнопками, где каждая кнопка имеет указанную строку и, если нажать на нее, возвращает указанную переменную? Аналогично @ 3:05 в этом видеоhttps://www.khanacademy.org/science/computer-science-subject/computer-science/v/writing-a-simple-factorial-program—python-2 (Я знаю, что это учебник для очень простой программы для начинающих, но это единственное видео, которое я смог найти), но без текстового поля, и у меня есть больше контроля над тем, что делают кнопки «ОК» и «Отмена».
Должен ли я создать окно, нарисовать прямоугольник со строкой внутри него, а затем создать цикл, который проверяет движение мыши / щелчки мыши, а затем возвращает что-то, как только координаты мыши находятся внутри одной из кнопок, и мышь нажата? Или есть функция / набор функций, которые облегчили бы окно с кнопками? Или модуль?
этот код создает простые нетекстовые кнопки:
чтобы создать окно с кнопкой «Hello!» и когда это закрывается, открывается новое окно с «Cool!»
обзор
Нет, вам не нужно «рисовать прямоугольник, а затем делать петлю». Что тыбудут нужно импортировать некоторый инструментарий GUI и использовать методы и объекты, встроенные в этот инструментарий. Вообще говоря, одним из этих методов будет запуск цикла, который прослушивает события и вызывает функции, основанные на этих событиях. Этот цикл называется циклом событий. Таким образом, хотя такой цикл должен выполняться, вам не нужно создавать цикл.
Предостережения
Если вы хотите открыть окно из приглашения, такого как в видео, на которое вы ссылались, проблема немного сложнее. Эти наборы инструментов не предназначены для использования таким образом. Как правило, вы пишете полную программу на основе графического интерфейса, где весь ввод и вывод осуществляется через виджеты. Это не невозможно, но, на мой взгляд, при обучении вы должны придерживаться всего текста или всего графического интерфейса, а не смешивать их.
Пример использования Tkinter
Например, одним из таких инструментов является tkinter. Tkinter — это инструментарий, встроенный в python. Любой другой инструментарий, такой как wxPython, PyQT и т. Д., Будет очень похож и работает так же хорошо. Преимущество Tkinter в том, что вы, вероятно, уже имеете его, и это фантастический инструментарий для обучения программированию GUI. Это также фантастика для более продвинутого программирования, хотя вы найдете людей, которые не согласны с этим. Не слушай их.
Вот пример в Tkinter. Этот пример работает в Python 2.x. Для Python 3.x вам нужно импортировать из tkinter скорее, чем Tkinter .
Создание кнопки в Python
Для того, чтобы создать кнопку в Python 3 с обработкой нажатия мыши, понадобится использовать пакет или библиотеку tkinter. По сути tkinter package является стандартным интерфейсом Python для инструментария Tk GUI. Поэтому его можно использовать для создания кнопки. Для осваивания данного языка это будет интересная и полезная практика. Для начала следует импортировать данный пакет и протестировать был ли он установлен в используемой вами среде разработки.
Установить tkinter в Линуксе (Убунту) можно через терминал (вызов терминала: Alt-Ctrl-T) набрав в терминале sudo apt-get install python3-tk. Там же в терминале можно узнать и установленную версию Питона (python — v).
Протестировать и узнать установлен ли tkinter в среде разработки можно следующим образом:
Самый простой пример кнопки без обработчика нажатия мыши можно прописать так:
Ещё пример простой до безобразия кнопки в Python 3:
Создание кнопки в Python 3 при помощи tkinter
А вот интересный пример, в котором сразу три кнопки в одном фрейме (окне) при помощи библиотеки tkinter:
- первая кнопка обрабатывает нажатие мыши и выводит после него сообщение на экран,
- вторая кнопка при нажатии выводит актуальное на данный момент время на самой кнопке,
- третья кнопка после нажатия на неё завершает свою работу (работу всего виджета).
Импорт пакета как tk (сокращённо). Импорт библиотеки времени.
Создание окна, в котором будут отображаться кнопки. master — родительский виджет. pack () — упаковщик для размещения блоков один под другим. Создание виджета.
Cоздание верхней кнопки. Первая кнопка обрабатывает нажатие мыши и выводит после него сообщение на экран. Текст на кнопке, также кнопку можно оформить в нужные цвета (цвет текста и фона), также можно выбрать шрифт (правда, прописанный шрифт у меня не сработал, но описан ниже для примера) и прописать размер кнопки.
сommand прописывает обращение к методу нажатия мыши на кнопку. Упаковщик pack необходим для размещения блоков один над другим.
Создание второй кнопки Выхода из программы в том же методе создания виджета. Создание кнопки выхода из программы с удалением всех виджетов. Упаковщик для размещения блоков один под другим.
Обработка нажатия мыши. Создание кнопки с указанием времени на ней на данный момент. Обращение к методу при нажатии на кнопку, который выведет актуальное на данный момент время.
Метод нажатия кнопки. Создание метода для вывода информации после нажатия на кнопку.
Создание метода, который выведет актуальное на данный момент время.
Создание собственного окна.
Создание экземпляра класса.
Запуск главного цикла обработки событий.
А вот и полностью весь код примера трёх кнопок, который по кусочкам описан выше:
Графический пользовательский интерфейс в питон
Пользовательский графический интерфейс с Tkinter в Python Питон.
В этом уроке мы разберём создание простого графического пользовательского интерфейса (GUI) в Python Питон.
GUI расшифровывается как Graphical User Interface. На русском это означает пользовательский графический интерфейс. GUI используется во всех современных программах, он позволяет значительно облегчить работу с этими программами.
Для создания GUI в Python используется модуль tkinter. Импортируем этот модуль в нашу программу.
import tkinter as tk
Для создания GUI в Питоне нужно создать окно для него. Чтобы создать окно win, используйте команду tk.Tk()
win = tk.Tk()
В конце любой программы на tkinter в Питон нужно писать команду win.mainloop(), win это название окна для интерфейса. Команда mainloop() не позволяет окну закрываться сразу же при исполнении программы. Если не поместить эту команду в конец программы на Python, то окно для интерфейса закроется сразу же после запуска программы.
win.mainloop()
Изменим название окна для интерфейса Питон с помощью команды win.title(“”). В кавычках пишется текст, который будет отображаться в названии окна.
win.title(«itrobo.ru»)
Зададим окно размером 350×200 пикселей. Для этого в Python используется команда win.geometry(AxB), где A это ширина окна, B это высота окна. A и B пишутся в кавычках и разделяются символом “x”.
win.geometry(«350×200»)
Элементы в tkinter в Питоне создаются с помощью команды
элемент = tk.название_элемента(параметры_элемента)Элемент метка label в Python
Метка в Python создаётся с помощью команды
txt = tk.Label(win, text = «Комментарий»)
txt это название элемента-метки, Label это название метки, win это окно, в котором отображается метка, text это параметр, отвечающий за текст в метке, “Комментарий” это текст который будет отображаться в метке. Все параметры приведены в этом уроке. (ссылка на урок с метками, все 3 урока надо выложить вместе)
Элементы в tkinter в Питоне располагаются по сетке. Чтобы поставить элемент в определённое место сетки, используйте команду txt.grid(row = m, column = n) , где txt это название элемента, который нужно расположить, row и column это параметры, отвечающие за строку и столбец с элементом, m и n это номера строки и столбца.
txt.grid(row = 2, column = 1)Пример программы на Python графический интерфейс метка
import tkinter as tk
win = tk.Tk()
win.title(«itrobo.ru»)
win.geometry(«300×300»)
res = tk.Label(win, text = «Привет»)
res.grid(row = 3, column = 0)
win.mainloop()Для изменения надписи на метке используется команда имя метки.configure(text=»новый текст метки»)
Например
res.configure(text=»мою надпись поменяли»)Элемент Button кнопка в Python
Чтобы задать кнопку в графическом интерфейсе python необходимо использовать команду
название объекта кнопка = tk.Button(win, text = “надпись на кнопке”, сomand = имя функции при нажатии)
Например
button=tk.Button(win, text = “нажми меня”, comand =onclick)
создаст нкнопку с именем button надпись на кнопке Нажми меня, при нажатии будет вызываться процедура onclik
для вывода кнопки на экран мы используем разметку и команду
имя кнопки.grid(row = номер строки, column = номер столбца)
например
button.grid(row = 1, column = 1)
Приведем пример программы графический интерфейс на Python с кнопкой и меткой, при нажатии на кнпоку название метки меняется на Меня нажали
import tkinter as tk
win = tk.Tk()
win.title(«itrobo.ru»)
win.geometry(«300×300»)
res = tk.Label(win, text = «-«)
res.grid(row = 3, column = 0)
def onclick():
res.configure(text = «меня нажали»)
button = tk.Button(win, text = «нажми меня», command = onclick)
button.grid(row = 1, column = 1)
win.mainloop()Элемент текстовое поле в графическом интерфейсе python
Для задания тектового поля в графическом пользовательском интерфейсе Python используется команда
имя текстового поля=tk.Entry(имя окна)
например команда
text1=tk.Entry(win)
cоздаст объект текстовое поле с именем text1 в окне win
для отображения в окне интерфейса python используется команда
имя элемента.grid(row=номер строки, column=номер столбца)
Например
text1.grid(row=1,column=1)
Чтобы получить данные из текстового поля в Python используется команда
имя поля.get()
Например
znach=float(text1.get())
записывает в переменную znach числовое значение поля text1Пример программы с графическим пользовательским интерфейсом в Python простейший калькулятор
Сделаем программу калькулятор на Python. В двух текстовых полях пользователь вводит два числа. При нажатии на кнопку в метке будет показываться сумма этих чисел.
Введём два текстовых поля и метку. Первое поле назовём num1, второе num2, метку назовём res. Зададим кнопку button. Поля для ввода текста задаются с помощью команды tk.Entry(win)
num1 = tk.Entry(win)
num1.grid(row = 0, column = 0)
num2 = tk.Entry(win)
num2.grid(row = 2, column = 0)
res = tk.Label(win, text = «-«)
res.grid(row = 3, column = 0)
Зададим кнопку button с помощью команды
button = tk.Button(win, text = “Сумма”)
button это название кнопки, win это окно, где отображается кнопка, text = “Сумма” это параметр, определяющий текст на кнопке.
Если вы просто зададите кнопку, запустите программу на Питоне и нажмёте на кнопку, ничего не произойдёт. Чтобы задать действие по нажатию кнопки, нужно использовать параметр кнопки command. Разберём процедуру нахождения суммы и нажатия кнопки.
При нажатии на кнопку в Python мы должны получить значения двух чисел в текстовых полях, сложить эти числа и вывести сумму в метку. Создадим для этого отдельную процедуру summation(). Подробно о процедурах в Python
Чтобы получить числа из текстовых полей в Питоне, используем команду num1.get() Обратите внимание, что текстовые поля всегда возвращают данные в виде строк, поэтому переведём их числа, используя команду float()
one = float(num1.get())
two = float(num2.get())
Теперь создадим переменную result, в которой будет храниться сумма полученных чисел.
result = one + two
После того, как мы задали метку res с результатом в Питон, нужно изменить текст в ней с “-” на результат. Это можно сделать с помощью команды res.configure(text) и форматированного вывода.
res.configure(text = «= %s» % result)
После того, как мы создали процедуру для вывода чисел в Python, назначим нажатие кнопки на неё. Это можно сделать, присвоив параметр command созданной процедуре.
button = tk.Button(win, text = «Сумма», command = summation)
button.grid(row = 1, column = 1)
Полный код программы на python с графическим пользовательским интерфейсом простейший калькулятор.
import tkinter as tk
win = tk.Tk()
win.title(«itrobo.ru»)
win.geometry(«400×400»)
num1 = tk.Entry(win)
num1.grid(row = 0, column = 0)
num2 = tk.Entry(win)
num2.grid(row = 2, column = 0)
res = tk.Label(win, text = «-«)
res.grid(row = 3, column = 0)
def summation():
one = float(num1.get())
two = float(num2.get())
result = one + two
res.configure(text = «= %s» % result)
button = tk.Button(win, text = «Сумма», command = summation)
button.grid(row = 1, column = 1)
win.mainloop()Вернуться к содержанию
Следующая тема Словари в Питон