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

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

14.12.2022, 11:04. Показов 2044. Ответов 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
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
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
Ответ Создать тему
Новые блоги и статьи
Функция установки текстового статуса в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru