Как сделать диалоговое окно в python

Добавил пользователь Morpheus
Обновлено: 18.09.2024

Методическая разработка урока
Элективный курс: Модуль tkinter. Создание графического интерфейса пользователя с помощью языка программирования Python
Уровень: Программирование для начинающих
Версии Python: 3.*

Диалоговые окна весьма разнообразны. В данном уроке будут рассмотрены лишь несколько.

Рассмотрим, как запрограммировать с помощью Tkinter вызов диалоговых окон открытия и сохранения файлов и работу с ними. При этом требуется дополнительно импортировать "подмодуль" Tkinter - tkinter.filedialog, в котором описаны классы для окон данного типа.

from tkinter import *

from tkinter.filedialog import *

Здесь создаются два объекта (op и sa): один вызывает диалоговое окно "Открыть", а другой "Сохранить как. ". При выполнении скрипта, они друг за другом выводятся на экран после появления главного окна. Если не создать root, то оно все-равно появится на экране, однако при попытке его закрытия в конце возникнет ошибка.

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

from tkinter import *

from tkinter.filedialog import *

При запуске скрипта появляется окно с текстовым полем и сразу диалоговое окно "Открыть". Однако, если мы попытаемся открыть какой-нибудь текстовый файл, то в лучшем случае ничего не произойдет. Как же связать содержимое текстового файла с текстовым полем через диалог "Открыть"?

Что если просто вставить содержимое переменной op в текстовое поле:

После запуска скрипта и попытки открытия файла в текстовом поле оказывается адрес файла. Значит содержимое файла надо прочитать каким-то методом (функцией).

Метод input модуля fileinput может принимать в качестве аргумента адрес файла, читать его содержимое, формируя список строк. Далее с помощью цикла for можно извлекать строки последовательно и помещать их, например, в текстовое поле.

import fileinput

for i in fileinput.input(op):

Обратите внимание на то, как происходит обращение к функции input модуля fileinput и его импорт. Дело в том, что в Python уже встроена своя функция input (ее назначение абсолютно иное) и во избежание "конфликта" требуется четко указать, какую именно функцию мы имеем ввиду. Поэтому вариант импорта 'from fileinput import input' здесь не подходит.

Окно "Открыть" запускается сразу при выполнении скрипта. На самом деле так не должно быть. Необходимо связать запуск окна с каким-нибудь событием. Пусть это будет щелчок на пункте меню.

from tkinter import *

from tkinter.filedialog import *

import fileinput

def _open():

for l in fileinput.input(op):

Теперь попробуем сохранять текст, набранный в текстовом поле. Добавим в код пункт меню и следующую функцию:

def _save():

В переменной sa храниться адрес файла, куда будет производиться запись. В переменной letter – текст, "полученный" из текстового поля. Затем файл открывается для записи, в него записывается содержимое переменной letter, и файл закрывается (на всякий случай).

Дополним нашу программу пунктом Exit в подменю File и пунктом About program в подменю Help.

from tkinter.messagebox import *

def close_win():

if askyesno("Exit", "Do you want to quit?"):

def about():

showinfo("Editor", "This is text editor.\n(test version)")

Диалоги в PyQt5

QInputDialog

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

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

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

Ввод диалога

Рисунок: Ввод диалога

QColorDialog

QColorDialog обеспечивает виджет диалога для выбора цветовых значений.

Пример приложения показывает кнопку и QFrame. Фон виджета устанавливается чёрным цветом. Используя QColorDialog, мы можем менять фон.

Это первоначальный цвет фона QtGui.QFrame.

Это строка высветит QColorDialog.

QFontDialog

QFontDialog – это виджет диалога для выбора шрифта.

В нашем примере, мы имеем кнопку и метку. С помощью QFontDialog, мы меняем шрифт метки.

Диалог со шрифтами

Рисунок: Диалог со шрифтами

QFileDialog

QFileDialog – это диалог, который позволяет пользователям выбирать файлы или папки. Файлы могут быть выбраны и для открытия, и для сохранения.

Пример показывает строку меню, центрально-установленный виджет редактирования текста и строку состояния. Пункт меню показывает QtGui.QFileDialog, который используется для выбора файла. Содержание файла загружается в виджет редактирования текста.

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

Выбранное имя файла читается и содержание файла устанавливается в виджет редактирования текста.

диалоговое окно с ошибкой на win10

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

3 ответа 3

Вы можете использовать messagebox из tkinter .

Он имеет 4 основных метода:

  • showerror
  • showwarning
  • showinfo
  • askyesno

Последнее название, на первый взгляд, выглядит странно. Так выглядит понятнее: AskYesNo или Ask Yes/No

Общая форма вызова:

Вот пример кода:

Метод askyesno() возвращает True , если пользователь нажал "Да", и False в противном случае.

Выглядит не совсем как у системы, но тоже неплохо:


msgbox

Также значок в левом верхнем углу - это значок вашего приложения. Например, я добавил строки:

Редактируемый графический интерфейс, который поставляется с 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" для загрузки.

У меня есть простой скрипт, который анализирует файл и загружает его содержимое в базу данных. Мне не нужен пользовательский интерфейс, но сейчас я запрашиваю у пользователя файл для анализа, используя raw_input , что крайне недружелюбно, особенно потому, что пользователь не может копировать / вставлять путь. Я хотел бы быстрый и простой способ представить диалог выбора файла для пользователя, он может выбрать файл, а затем он загружается в базу данных. (В моем случае использования, если они выбрали неправильный файл, он не сможет выполнить синтаксический анализ и не будет проблемой, даже если он был загружен в базу данных.)

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

Мне не нужно использовать tkInter, но, поскольку он входит в стандартную библиотеку Python, он является хорошим кандидатом на быстрое и простое решение.

Какой быстрый и простой способ запросить файл или имя файла в сценарии без какого-либо другого пользовательского интерфейса?

Tkinter - самый простой способ, если вы не хотите иметь никаких других зависимостей. Чтобы показать только диалоговое окно без каких-либо других элементов графического интерфейса, вы должны скрыть корневое окно, используя withdraw метод:

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