Как сделать несколько окон tkinter

Обновлено: 06.07.2024

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

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

Базовым моментом в построении графических программ является создание окна. Затем в окно добавляются все остальные компоненты графического интерфейса. Поэтому создадим вначале простейшее окно. Для этого определим следующий скрипт:

Для создания графического окна применяется конструктор Tk() , который определен в модуле tkinter. Создаваемое окно присваивается переменной root, и через эту переменную мы можем управлять атрибутами окна. В частности, с помощью метода title() можно установить заголовок окна.

С помощью метода geometry() - размер окна. Для установки размера в метод geometry() передается строка в формате "Ширина x Высота". Если при создании окна приложения метод geometry() не вызывается, то окно занимает то пространство, которое необходимо для размещения внутреннего содержимого.

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

В результате при запуске скрипта мы увидим такое пустое окошко:

Графическая программа на Python

Начальная позиция окна

По умолчанию окно позиционируется в верхний левый угол экрана. Но мы можем изменить его положение, передав нужные значения в метод geometry() :

Теперь строка в методе geometry имеет следующий формат: "Ширина x Высота + координатаX + координатаY". То есть при запуске окно будет находиться на 300 пикселей вправо и на 250 пикселей вниз от верхнего левого угла экрана.

Редактируемый графический интерфейс, который поставляется с Python, представляет собой окно изображения.

Tkinter - это модуль для проектирования окон с использованием Python. Простая структура, многоплатформенность, совместимость с несколькими системами могут сделать его хорошим помощником для быстрого начала работы и настройки файлов окон. Это простой тип в оконном модуле Python. Следовательно, необходимо начать и уметь пользоваться окнами.

виджеты tkinter

2.1 Ярлык и кнопка Ярлык и кнопка

Рамка главного окна

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

Сначала создайте метку описания tk.Label (обратите внимание, что первая буква объекта обычно заглавная), пример кода выглядит следующим образом:

Результат бега показан на рисунке:


Мы также можем управлять отображением меток в виде переменных, на этот раз мы вводим кнопки tk.Button Концепция, каждый раз, когда нажимается кнопка, метка меняется один раз. Замените метку выше следующим содержанием. И сохраните текст, который нужно изменить, как переменную. var:

Затем делаем кнопку т.к.

Функция hit_me выглядит следующим образом:

Результаты операции следующие:

Когда нет щелчка:


Нажмите в первый раз:


Щелкните второй раз:


2.2 Ввод и ввод текста, текстовое поле

На основе определения окна сначала определите Entry, код будет следующим:

Обратите внимание, что для показа здесь вы можете настроить символы, которые хотите отображать в записи, например, при вводе пароля вы можете сделать show = ‘*’


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

Определение функции следующее:


Полный код выглядит следующим образом:

Результат выполнения выглядит следующим образом: сначала введите 111111 в Entry и нажмите кнопку 1, как показано ниже:


Выберите определенную точку в качестве позиции для вставки, затем введите 2 в поле ввода и нажмите кнопку 1.


Введите 3 в Entry и нажмите кнопку 2.


Кроме того, insert также может выполнять вставку содержимого в определенном месте. Например, измените функцию insert_end следующим образом:

Реализация insert_end перечисляет вставленный контент в строке 2 текста, и результат выполнения выглядит следующим образом:


2.3 Виджет списка Listbox

Функции примеров в этом разделе следующие: сверху вниз, это метка, кнопка и список. Button понимает, что контент, выбранный в данный момент курсором в окне списка, отображается в метке.


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

Наконец, Listbox определен, и настройка, вставка и удаление содержимого в Listbox реализованы, как показано ниже.

Полный код выглядит следующим образом:

2.4 Кнопка выбора радиокнопки


Как показано на рисунке, Radiobutton - это выбираемая кнопка на рисунке выше.Этот раздел понимает, что при выборе разных Radiobutton печатается соответствующее содержимое.

Сначала определите метку с желтым фоном. Код см. В полном коде.

Затем нам нужно определить три Radiobuttons:

Определение функции print_selection следующее:

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

Полный код выглядит следующим образом:

Результат операции следующий: если он не выбран, содержимое метки отображается как пустое, при выборе Radiobutton соответствующее содержимое отображается в метке.


2.5 Масштаб

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


Полный код выглядит следующим образом:

При определении атрибута Scale имя - label, from to - это диапазон значений, from_ - отличать от в python, а Scale также имеет атрибуты horizontal и vertical. Обратите внимание, что это tk. Horizontal / vertical. Длина - это длина дисплея, которая отличается от ширины метки. Единица измерения ширины - символы, а длина - пиксели. showvalue означает, следует ли отображать выбранное число. Оно не отображается, если значение равно 0, и отображается, когда оно равно 1. Единицей длины отображаемой метки является интервал в тиках, который представляет собой интервал между отображаемыми числами.Если значение равно 3, отображаются 5, 8, 11. Разрешение - это количество сохраняемых десятичных знаков.

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

2.6 Вариант проверки с помощью кнопки

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

Определите две контрольные кнопки следующим образом:

Сначала определите две переменные var1 и var2, которые являются целыми числами.

Переменные двух контрольных кнопок равны var1 и var соответственно, и значение равно 1, когда выбрано, то есть onvalue = 1 и offvalue = 0, когда не выбрано.

Print_selection команды определяется следующим образом, и соответствующая операция выполняется в соответствии со значениями var1 и var2.

Полный код выглядит следующим образом:

Результаты операции следующие:


Когда Python выбирается индивидуально:



Когда C ++ выбран отдельно:


Выбраны оба:


Ничего не выберите:

2.7 Холст

Укажите область, в которой можно разместить изображения, графику и т. Д., А также изменить положение и форму.

Сначала определите Canvas.

Чтобы разместить изображение, сначала прочтите изображение и сохраните его в image_file, затем Canvas поместите изображение на холст через create.image. Обратите внимание, что 10 и 10 - это координаты места размещения, а привязка означает точку привязки, то есть положение привязки. Доступные для выбора атрибуты следующие:


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

Затем create.line рисует прямую линию от координат (90, 90) до (120, 120).

create.oval - нарисовать круг и залить цветом.

create.arc - нарисовать сектор, начало и протяженность указывают, что сектор от 0 ° до 180 °.

create.rectangle - нарисовать квадрат.

Кроме того, определяется кнопка. Функция кнопки состоит в том, что каждый раз, когда вы щелкаете мышью, прямоугольный объект, представляющий собой нарисованный квадрат, перемещается на два квадрата вниз. В функции moveit 0 означает, что смещение в направлении x равно 0, а 2 - это изменение смещения в направлении y. шкала. Результаты показаны ниже.



Кнопка перемещения одиночной машины, положение квадрата меняется:

2.8 Меню меню

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


Сначала определите меню в окне window `` python menubar = tk.Menu (window) `` Затем создайте параметр "Файл" в строке меню. Сначала определите также и меню. В этот раз меню помещается в строку меню и передается add_cascade (cascade: cascade) помещается в строку меню

Затем, как показано на рисунке выше, в опции File добавьте New, Open, Save, divider и Exit.

Таким же образом добавьте опцию Edit, смотрите полный код для кода


Затем давайте создадим подменю в файле, как показано ниже


В коде do_job выполняет простую функцию отображения, как показано ниже:

2.9 Рама

Нижняя рама, на нее можно ставить различные мелкие детали


Сначала определите главный фрейм и поместите его в окно

Затем определите две рамки второго слоя, расположенные соответственно слева и справа от основного кадра.

Две метки помещаются в левую рамку, а одна метка - в правую.

Определите кнопку на основе окна

tk.Button(window, text='hit me', command=hit_me).pack()

как показано на картинке:


Затем определите всплывающее окно, ошибка возникает во время выполнения

AttributeError: module ‘tkinter’ has no attribute ‘messagebox’

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

from tkinter import messagebox

Messagebox имеет несколько функций, которые будут подробно описаны ниже.



tk.messagebox.showerror(title='Hi', message='No!! never')




Требуемая операция может быть дополнительно выбрана в соответствии со значением возврата

Возвращается Истина или Ложь


Вы также можете выполнять дальнейшие операции на основе возвращенного значения.

Но я не знаю, почему возникает ошибка во время выполнения: AttributeError: module'tkinter.messagebox 'has no attribute'asktrycancel'



2.11 место для сетки

Атрибут side определяет позицию для размещения, есть верхняя, нижняя, левая, правая


По сетке (размещенной в виде сетки)

Без подушечки и подушечки:


Среди них padx и pady используются для заполнения дисплея, padx и pady используются для установки внешнего отображения заполнения кадра, а ipadx и ipady используются для настройки внутреннего отображения кадра.


Может быть точно размещен по определенной координате


Пример окна входа в систему

3.1 Пример 1 Окно входа в систему

На основе предыдущего учебного материала создайте следующее окно


Код выглядит следующим образом:

3.2 Пример 1 Окно входа в систему

В этом разделе добавлена ​​функция входа в систему, код выглядит следующим образом:

Сначала откройте и загрузите файл с информацией о пользователе, прочитав двоичную систему. Если файл не существует, создайте файл и добавьте пользователя с именем admin и паролем admin.

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

Если пользователь не существует, всплывающее окно спрашивает, регистрироваться ли, и операция регистрации выполняется с помощью возвращенного значения True или False.

Результаты операции следующие:
При вводе неправильного пароля:



Если пароль введен правильно:


Когда пользователя не существует:

3.3 Пример 1 Окно входа в систему

Во время регистрации появится новое окно, как показано ниже:


Сначала определите новое окно

Определите имя пользователя, пароль и подтверждение пароля, а также три входа и кнопку

Затем определите функцию sign_to_Mofan_Python

Откройте и прочтите файл usrs_info, сначала проверьте, равны ли пароли, если нет, всплывающее окно предложит, что пароли несовместимы

Если регистрация квалифицирована, информация будет сохранена. В pickle содержится словарь, exist_usr_info [nn] = Это предложение np - имя пользователя: пароль, и новая регистрационная информация передается в файл информации о пользователе посредством дампа. И всплывающее окно сообщает, что регистрация прошла успешно.

Наконец закройте окно регистрации через уничтожение

Полный код выглядит следующим образом:

Результаты бега следующие:

Когда имя пользователя уже существует:


Если пароль введен неверно:



Когда регистрация прошла успешно:

Окно регистрации закрывается после нажатия ОК.

Интеллектуальная рекомендация

UIWebView-OC и взаимодействие JS

1. Перехватить указанный URL-адрес в прокси-методе webView. 2. По перехваченному URL-адресу определите специальное поле, указанное в URL-адресе, для обработки соответствующего события. 3. Передайте ис.

Реализация стека


[Libuv эффективное программирование] Libuv обучение супер подробный учебник 2 - основы Libuv

Каталог статьи рамки Libuv Синхронный I / O Асинхронный ввод / вывод Ручки и просит цикл событий Ссылаться на рамки Libuv Из официальной документации, вы можете найти картину дизайн рамы:libuv/docs/sr.

Ваш городской слоган? Python Trawly Анализ национальных купонов выпустил данные

| Лю рано Источник | Ранний Python (ID: Zaoqi-Python) Недавно в различных формах поощряется более разнообразные формы купонов потребления и субсидии потребления, а некоторые города постоянно добавляют.


Нажмите на картинку, чтобы выделить картинку

Код Поскольку включенные js и css больше, нелегко копировать, пожалуйста, загрузите интерфейс загрузки "Мышь Нажмите на картинку, изображение большой .rar" для загрузки.

BitNeBolt

А что конкретно надо? Параллельно запустить абсолютно разные приложения или просто сделать несколько окон в одном приложении?

Biba_neBoba, Надо что бы после правильного ответа (логин пароль) закрылось основное окно и открылось другой

BitNeBolt

Вот удаление старого и создание нового окна по нажатию кнопки(просто чтоб работало):

Это третья часть нашей многосерийной серии по разработке графических интерфейсов на Python с использованием Tkinter. Проверьте ссылки ниже для других частей этой серии:

  • Разработка графического интерфейса Python с помощью Tkinter
  • Разработка графического интерфейса Python с помощью Tkinter: Часть 2
  • Разработка графического интерфейса Python с помощью Tkinter: Часть 3

Вступление

Tkinter – это де-факто стандартный пакет для построения графических интерфейсов в Python. В Stackabuse first и second части учебника Tkinter мы узнали, как использовать основные строительные блоки GUI для создания простых интерфейсов.

В последней части нашего урока мы рассмотрим несколько ярлыков, которые предлагает Tkinter, чтобы мы могли легко предлагать сложные и очень полезные функции. Мы также узнаем о Python MegaWidgets – инструментарии, основанном на Tkinter, который еще быстрее ускоряет создание сложных интерфейсов.

Диалоговое окно файла

Предоставление пользователю возможности выбрать файл на своем компьютере, очевидно, является очень распространенной особенностью графических интерфейсов. Диалоговые окна файлов обычно довольно сложны – они объединяют по крайней мере несколько кнопок (например, Open , Cancel или Create New Folder ) и фрейм, который отображает структуру каталогов нашей среды. Основываясь на наших предыдущих уроках, вы можете предположить, что с помощью Tkinter очень трудно создать такую сложную функцию. Однако на самом деле это не так. Взгляните на следующий пример:

Приведенный выше код-это все, что вам нужно для отображения приятного, полезного диалога File Dialog . В строке 2 мы импортируем содержимое класса filedialog . Затем, после создания нашего окна root в строке 4, мы определяем новую функцию в строке 6 (которая должна выполняться кнопкой, созданной в строке 17 и упакованной в строку 18).

Давайте взглянем на определение функции print_path () . В строке 7 мы выполняем функцию askopenfilename , которая принимает несколько аргументов. Первым аргументом, конечно, является родительский виджет диалогового окна (который в данном случае является нашим корневым окном). Затем в аргументе initialdir мы указываем местоположение, которое будет отображаться в нашем диалоговом окне файла сразу после его открытия. title управляет содержимым строки заголовка диалогового окна.

И тогда у нас есть аргумент file types , благодаря которому мы можем указать, какие файлы будут видны пользователю в диалоговом окне file. Сужение типов файлов может значительно ускорить поиск нужного файла, а также дать пользователю знать, какие типы файлов принимаются.

Аргумент для типов файлов представляет собой список 2-элементных кортежей. В каждом кортеже первым элементом является строка, представляющая собой любое описание, которое мы хотим задать для каждого из типов файлов. Второй элемент – это то, где мы указываем или перечисляем расширения файлов, связанные с каждым типом файла (если есть только одно расширение, это строка, в противном случае это кортеж). Как вы можете видеть на скриншоте вывода выше, пользователь может выбрать отображаемый тип файла из выпадающего списка в правом нижнем углу диалогового окна.

Метод askopenfilename() возвращает строку, которая является путем к файлу, выбранному пользователем. Если пользователь решает нажать Cancel , возвращается пустая строка. В строке 7 мы возвращаем путь к переменной f , а затем в строке 15 (которая выполняется только после закрытия диалогового окна файла) путь печатается в консоли.

Отображение Изображений С Помощью Tkinter

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

Давайте посмотрим, что изменилось внутри функции, выполняемой нашей кнопкой, теперь переименованной в display_image . Мы выводим диалоговое окно файла, используем те же критерии выбора файла, что и раньше, и снова сохраняем возвращенный путь в переменной f . Однако после получения пути к файлу мы не печатаем его в консоли. Мы создаем окно верхнего уровня в строке 14. Затем в строке 16 мы создаем экземпляр объекта класса PhotoImage , заставляя его читать файл .jpg , выбранный пользователем. Затем объект сохраняется в переменной image , которую мы можем передать в качестве аргумента для построения виджета Label в строке 17. В строке 18 мы обязательно сохраняем ссылку на объект image , чтобы он не был очищен сборщиком мусора Python . Затем в строке 19 мы упаковываем нашу метку (на этот раз отображающую изображение, а не текст) внутри new_window .

Выбор Цвета

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

В строке 2 примера, показанного выше, мы импортируем класс с именем color chooser . Мы используем его метод askcolor() в строке 7. Этот метод, как и askopenfilename() , отвечает за открытие красивого, сложного диалога (в данном случае выбор цвета) и возвращает данные, зависящие от выбора пользователя. В этом случае после того, как пользователь выбирает цвет из палитры и принимает свой выбор, объект, возвращаемый переменной color , представляет собой кортеж, содержащий два элемента. Первый элемент-это кортеж, который хранит значения для красного, зеленого и синего каналов выбранного цвета. Второй элемент кортежа имеет тот же цвет, что и в формате hexadecimal . Мы можем видеть содержимое кортежей в нашей консоли, благодаря print() в строке 8.

После того как мы сохраним кортеж , возвращенный askcolor в переменной color , мы затем используем эту переменную в строке 9 для настройки кнопки b1 . Как вы уже знаете, аргумент bg отвечает за управление цветом фона кнопки. Передаем ему первый элемент кортежа color (представление цвета в шестнадцатеричном формате). В результате, после нажатия кнопки b1 пользователь может изменить свой цвет фона, используя хороший выбор цвета.

Как я уже говорил, строки 11-21 содержат код, отвечающий за отображение диалогов для получения решения пользователя. askokcancel (строка 11) возвращает True если пользователь нажимает OK и False если он нажимает Cancel . askyesno (строка 14) возвращает True если пользователь нажимает Yes и False если пользователь нажимает No . askretrycancel (строка 17) возвращает True если пользователь нажимает Retry и False если пользователь нажимает Cancel . askquestion очень похож на askyesno , но возвращает 'yes' если пользователь нажимает Yes и 'no' если пользователь нажимает No .

Индикатор выполнения

Еще одним полезным элементом расширенных графических интерфейсов является индикатор выполнения . В следующем примере показана простая реализация этой функции с помощью Tkinter:

В приведенном выше примере показана реализация Progress bar . Он является частью модуля tkinter.ttk , который обеспечивает доступ к набору тематических виджетов Tk, представленному в Tk 8.5 . Вот почему нам нужно дополнительно импортировать модуль ttk в строке 3.

Состояние нашего индикатора прогресса будет контролироваться временем – индикатор будет прогрессировать в десять шагов, выполняемых с интервалом в одну секунду. Для этого мы импортируем модуль time в строку 2.

Мы определяем наш Индикатор выполнения в строке 20. Мы определяем его родительский виджет ( root ), даем ему “горизонтальную” ориентацию и длину 200 пикселей. Затем мы определяем значение maximum , которое является значением переменной, назначенной индикатору выполнения с помощью аргумента var (в нашем случае переменной progress_var ), что означает, что индикатор выполнения заполнен полностью. Мы устанавливаем mode на “determinate”, что означает, что наш код будет перемещать длину индикатора в точно определенные точки на основе значения progress_var .

Целочисленная переменная progress_var , которая будет управлять прогрессом бара, определена в строке 18. В строке 26, используя задание типа словаря, мы устанавливаем начальное значение индикатора выполнения равным 0.

В строке 15 мы создаем кнопку , которая должна запустить часы, контролирующие ход нашего бара, выполнив функцию start () , определенную между строками 7 и 13. Там у нас есть простой цикл for , который будет перебирать значения от 1 до 10. С каждой итерацией значение progress_var обновляется и увеличивается на 1. Чтобы иметь возможность четко наблюдать за ходом выполнения, мы ждем одну секунду во время каждой итерации (строка 12). Затем мы используем метод корневого окна update_idletasks() в строке 13, чтобы позволить программе обновить внешний вид индикатора выполнения, даже если мы все еще выполняем цикл for (таким образом, технически мы все еще находимся в одной итерации mainloop () ).

Python Mega Widgets

Если вы широко используете Tkinter в своих проектах, я думаю, что это хорошая идея, чтобы рассмотреть возможность включения Python Mega Widgets в ваш код. Python MegaWidgets-это инструментарий, основанный на Tkinter, который предлагает набор megawidgets : сложных, функциональных и относительно эстетически приятных виджетов, сделанных из более простых виджетов Tkinter. Что замечательно в этом пакете, который вы можете скачать здесь , так это то, что общая философия определения и ориентации виджетов такая же, как и в случае с Tkinter, и вы можете смешивать обе библиотеки в своем коде. Давайте закончим наш урок, поцарапав поверхность этого мощного инструментария.

Виджет EntryField

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

На этот раз мы должны не только импортировать tkinter , но и наш недавно установленный Pmw пакет (строка 2). Как всегда, мы используем класс Tk для инициализации нашего корневого окна.

В строках 10-14 и 16-20 мы определяем два Pmw.EntryField виджеты. Поле ввода представляет собой функциональную смесь Tkinter Label и Entry с некоторым добавлением полезных функций. Первым аргументом для инициализации виджета является, конечно же, родительский виджет. label_text , entry_bg и entry_width управляют некоторыми самоочевидными аспектами внешнего вида виджета. Наиболее интересным аргументом в нашем примере, вероятно, является аргумент validate . Здесь мы можем решить, какие данные пользователь может поместить в поле.

В поле entry_color мы ожидаем строку букв, поэтому устанавливаем validate в “алфавитный”. В виджете entry_number мы ожидаем целое число, и именно на него мы устанавливаем значение аргумента validate . Таким образом, если мы попытаемся поместить число внутри первого и букву внутри второго, символы просто не появятся в виджетах, и будет воспроизводиться системный звук, сообщающий нам, что мы пытаемся сделать что-то не так. Кроме того, если виджет ожидает определенного типа данных и его содержимое находится в конфликте с этим условием в момент инициализации, поле EntryField будет выделено красным цветом.

Как вы можете видеть в нашем примере, сразу после того, как мы отобразим наше окно, первое поле ввода будет белым, а второе-красным. Это происходит потому, что пустая строка (содержимое записей по умолчанию) попадает в категорию “алфавитных” сущностей, но это определенно не целое число.

Кнопка, определенная в строке 26, выполняет команду color_entry_label () , определенную между строками 6 и 8. Цель функции-нарисовать фон метки виджета entry_number в соответствии с содержимым виджета entry_color . В строке 7 метод get() используется для извлечения содержимого поля entry_color | Entry . Затем, естественно, метод configure() используется для изменения внешнего вида виджета entry_number . Обратите внимание, что для изменения характеристик виджетов Pmw, состоящих из нескольких более простых виджетов, мы должны указать, какой суб-виджет мы хотим настроить (в нашем случае это метка - именно поэтому мы настраиваем label_bg , а не, скажем, entryfield_bg ).

Виджет EntryField может быть визуально не очень впечатляющим, но даже этот простой пример иллюстрирует потенциал мега-виджетов – создание такого рода самоподтверждающейся части интерфейса более высокой сложности потребовало бы гораздо больше кода, если бы мы попытались достичь того же эффекта с помощью простого Tkinter. Я призываю вас изучить другие мощные мега-виджеты, описанные в документации инструментария .

Вывод

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

Читайте также: