Форум программистов, компьютерный форум, киберфорум
Python: Tkinter
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
 Аватар для Скромник
24 / 5 / 2
Регистрация: 08.01.2013
Сообщений: 94

Замахнулся на tkinter (удаление поля для ввода)

14.12.2022, 11:04. Показов 2010. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет, змееловы!
Ситуация следующая, две недели назад начал изучать Python, поставил версию 3.11 (хотя, думаю, это не важно).
Для изучения этого великолепно-простого языка выбрал книгу Шоу "Легкий способ выучить питон 3". Дошел до 36 упражнения, в котором предлагается написать свою квестовую игру для командной строки (стараясь сделать её как можно сложнее). При этом изучены простейшие циклы, функции и списки.
С этим проблем не возникло - написал, работает (часть кода выкладываю для просмотра).
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
def room_1():
    print("\nНе раз в жизни любой добрый человек увлекается прекрасным!\n")
    print(f"Вот и вы, {name}, залюбовавшись великолепием ранних ландышей, не заметили, как забрели в весеннюю чащу леса.")
    print("Да не просто леса, а самого что ни на есть волшебного! Полного тайн и несбыточных желаний, пугающего и манящего...")
    print("Но пора возвращаться домой, ведь, как известно, в лесу вечер наступает быстрее.")
    print("""\nНемного пройдя по благоухающей лесной опушке, вы увидели тропинку, по которой пришли.\nНо вот незадача. Вы не помните, с какой стороны пришли.\nТеперь у вас выбор, пойти по тропинке налево или направо, что вам подсказывает ваша интуиция?""")
 
def room_2_1():
    while True:
        choice = input("=> ")
 
        if choice == "Налево" or "налево" or "Налево." or "налево." or "лево":
            print("Уверенно ступив на выбранный путь вы быстрым шагом пошли в сторону заходящего солнца.")
            print("Тени становятся всё длиннее и вы прекрасно понимаете, что можете не успеть до темноты выйти из леса.\n")
            room_3()
 
 
        else:
            print("Отличный выбор! Немного пройдя вы заметили впереди свет и ускорили шаг.\n")
            print("Подойдя ближе, вы понимаете, что это конечно же лесная избушка (куда без неё).\n")
            room_4()
 
def room_3():
    print("Придётся все же выбирать, готовиться ли к ночлегу в лесу или пробираться сквозь чащу по темноте.\n")
    print("Если вам не улыбается ночевать в прохладе ночного леса, то наберите: ПУТЬ")
    print("Если вы совсем выдохлись, то стоит поднабраться сил у ночного костра, введите: ХВОРОСТ")
    r3 = input("=> ")
 
    if r3 == "ПУТЬ" or "Путь" or "путь" or "ПУТЬ.":
        print("А есть ли у вас чем освещать себе путь?")
 
name = input("Добрый день, введите ваше имя: ") # Первая строка, выводимая пользователю!
 
room_1()
room_2_1()
Но... решил сделать, как и говориться в задании, как можно сложнее, поэтому задумал: а почему бы не оторваться от PowerShell и не написать графическую оболочку сразу с кнопочками, чтобы пользователю проходить квест было легче, выбирая кнопки, а не вводя постоянно какие-то значения для выбора? Полез в интернет, наткнулся на tkinter и сломался. Я сломался. Пробую переписать, чтобы мой текст теперь был в окне (проверяю через запуск в IDLE), но постоянно что-то идет не так.
Выкладываю что у меня пока получается в коде.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
from tkinter import *
 
def name1():
    name1 = "Привет, {}!".format(txt.get()) # получаем текст воода имени пользователя
    lbl.configure(text=name1) # тут я не пойму, почему именно lbl, видимо заменяем первичный текст Добрый день.... на имя, введенное пользователем.
# как теперь перейти к выполнению room_1 при нажатии кнопки поехали?
#   btn2 = Button(window, text = "Начинаем!", bg = "red", fg = "black", command = room_1)
#   btn2.grid(column = 0, row = 0) # Так что ли? Заменит ли он кнопку btn1 на том же месте?
#
 
def room_1():
        lbl = Label(window, text = f"""\nНе раз в жизни любой добрый человек увлекается прекрасным!\nВот и вы, {name1},
    залюбовавшись великолепием ранних ландышей, не заметили, как забрели в весеннюю чащу леса.\nДа не просто леса, а самого что ни на есть волшебного!
    Полного тайн и несбыточных желаний, пугающего и манящего...\nНо пора возвращаться домой, ведь, как известно, в лесу вечер наступает быстрее.
    \nНемного пройдя по благоухающей лесной опушке, вы увидели тропинку, по которой пришли.\nНо вот незадача. Вы не помните, с какой стороны пришли.\n
    Теперь у вас выбор, пойти по тропинке налево или направо, что вам подсказывает ваша интуиция?""", font=("Arial Bold", 14))# класс Label вставляет текст в окно
    lbl.grid(column=0, row=0)
# какая-то проблема с переносами текста в тройных кавычках (почитать, почему Enter сносит строку. Неужели для длинного абзаца его писать придется в одну строку в блокноте?)
 
 
window = Tk() # Определяем графический модуль
window.title("Первая игра-квест по сценарию дочки")# Называем заголовок окна
window.geometry('800x250')# Указываем размеры окна, в пустых скобках размер будет по умолчанию
lbl = Label(window, text = "Добрый день! Введите Ваше имя, чтобы начать игру: ", font=("Arial Bold", 14))# класс Label вставляет текст в окно
lbl.grid(column=0, row=0)# Функция grid выводит в окно всё, что ты придумал в коде
txt = Entry(window, width = 10) # Entry класс создает текстовое поле для ввода
txt.focus() # Установка фокуса (мигающего курсора) виджета ввода
txt.grid(column = 0, row = 1)
btn1 = Button(window, text = "Поехали!", bg = "red", fg = "black", command = name1)# Красная кнопка "не нажимать" с черными буквами,
# с выполнением функции ckicked, описанной в самом начале
btn1.grid(column=0, row=5)
 
window.mainloop()# Без этой строки окно выполнит весь код в секунды и закроется, а это бесконечный цикл ожидания
# закрытия окна пользователем, обязательно должно быть в конце кода, иначе ничего не увидишь.
Мои вопросы на данном этапе следующие:
1. Команда print("") для вывода текста в графической оболочке не нужна? Нужно использовать класс Label? Как мне мои "принты" переписать, чтобы текст отображался в окне?
2. Вначале я предлагаю пользователю ввести своё имя в текстовое поле Entry и считываю его командой get в функции name1.
А вот как после считывания удалить это текстовое поле для ввода? То есть чтобы написало: Привет, user!, а ниже просто кнопка, при нажатии которой начинается квест.
3. Эту кнопку для начала квеста я должен вписать в функцию name1 и поставить на позицию предыдущей кнопки? Чтобы начала действовать функция room_1() и новый текст отобразился на экране.

Ну и самое главное, если эта задача для меня на данном этапе не решаема, ну прям вы понимаете, что нельзя перепрыгивать кучу тем, пробуя сразу писать квест в окно, то подскажите, пожалуйста, я перестану себя мучить и пойду читать дальше...
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.12.2022, 11:04
Ответы с готовыми решениями:

Организовать поле ввода и кнопку, а также поля для ввода
есть постановка задачи!!! 1.Организовать поле ввода и кнопку, а также поля для вода. 2.Организовать обработку событий по нажатию...

Очистка поля ввода Edit для следующего ввода значения
Здравствуйте! Необходим совет. Нужно реализовать следующую возможность: в поле ввода Edit вводится значение, по нажатию на клавишу Enter...

Python->Tkinter->Canvas получение картинки из поля для рисования
Здравствуйте, столкнулся с проблемой, требуется получить картинку из поля для рисования (self.canv), чтобы программно обработать...

1
 Аватар для Semen-Semenich
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
14.12.2022, 21:42
Лучший ответ Сообщение было отмечено Скромник как решение

Решение

Цитата Сообщение от Скромник Посмотреть сообщение
Команда print("") для вывода текста в графической оболочке не нужна
конечно. весь результат будет выводится в окне
Цитата Сообщение от Скромник Посмотреть сообщение
А вот как после считывания удалить это текстовое поле для ввода?
метод destroy() удаляет виджет - имя_виджета.destroy()
Цитата Сообщение от Скромник Посмотреть сообщение
Эту кнопку для начала квеста я должен вписать в функцию name1 и поставить на позицию предыдущей кнопки?
можно просто сменить название кнопки и обработчик для нее.
задача вполне реализуема, главное 'мухи отдельно от котлет' это значить что тк не должен выполнять логических задач. все должно выполнятся в логике а тк заменять там ввод вывод и служебные сообщения. например вам надо что то вводить. вводим это в окне нажимаем кнопку и считанный ввод передается в код логики где обрабатывается а результат опять возвращается в тк для вывода в окне. вообщем прийдется много читать и учится на своих ошибках
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.12.2022, 21:42
Помогаю со студенческими работами здесь

Создайте четыре текстовые поля – два для ввода часов и два – для ввода минут. Напишите функцию, которая считае
Создайте четыре текстовые поля – два для ввода часов и два – для ввода минут. Напишите функцию, которая считает интервал между двумя...

Заполнение поля для ввода
Привет! Я конечно в джаве ноль совсем, но все таки такой вопрос возник. Вот к примеру, я зашел на сайт нажал на кнопку и появился на сайте...

Проверка поля для ввода
Приветствую, сделал проверку prompt, но при вводе ВЕРНЫХ данных в поле, массив(shopGoods) все равно не заполняется, в чем дело? ...

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

Ограничение для поля ввода
Как сделать чтобы в поле для ввода нельзя было вводить число меньше 0.3 (например)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru