Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 14, 2023 12:29:42

Simka
Зарегистрирован: 2020-02-15
Сообщения: 71
Репутация: +  1  -
Профиль   Отправить e-mail  

Сделать функцию для вывода текста в окно Tk (ткинтера)

Написана программа с выводом цветного текста в окно ткинтера. Суть программы:
Выводится случайно выбранное название цвета (красный, оранжевый и т.д.) Цвет текста также выбирается случайно из того же набора. То-есть цвета могут совпасть или нет. Однако испытуемый должен назвать ЦВЕТ текста, а не написанное название. Время на решение 2 секунды ( это пока не написано, как и число попыток в цикле). Задача кажется простой, но по мере нарастания числа попыток весьма усложняется.
Программа уже “задышала”, работает корректно. Пока 5 цветов, будет больше. Но уже для 5 цветов получается 25 комбинаций и соответственно 25 строк для вывода текста - для каждого варианта.
Программа здесь:
https://pastebin.com/hsvQGNpv
ColorText
Попытался сделать функцию вывода на печать с заменой цветов соответственно случайной комбинации. Но не справился. Сокращенный вариант программы для двух вариантов:
https://pastebin.com/swayWBxi
Вариант с def
Окно tk появляется, но программа выдает ошибку:
https://pastebin.com/HxkSUhYf
Error
Что “не так” или вообще такой путь нереализуем?
Извините, если не получилось сделать нормальную ссылку на pasterin!

Отредактировано Simka (Апрель 14, 2023 12:36:31)

Офлайн

#2 Апрель 14, 2023 17:17:28

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1354
Репутация: +  119  -
Профиль   Отправить e-mail  

Сделать функцию для вывода текста в окно Tk (ткинтера)

  
import tkinter as tk
import random
 
COLORS = {
    'белый': 'white',
    'черный': 'black',
    'красный': 'red',
    'зеленый': 'green',
    'синий': 'blue',
    'желтый': 'yellow',
    'серый': 'gray',
    'розовый': 'pink',
    'оранжевый': 'orange'
}
 
def change_text():
    while 1:
        color_name = random.choice(list(COLORS.keys()))
        if color_name != sv.get():
            sv.set(color_name)
            break
    while 1:
        color = random.choice(list(COLORS.values()))
        if color != lbl['foreground']:
            lbl.config(foreground=color)
            break
 
main_window = tk.Tk()
main_window.geometry('300x200')
sv = tk.StringVar()
lbl = tk.Label(textvariable=sv, font='Arial 36 bold')
lbl.pack(padx=10, pady=10)
btn = tk.Button(text='следующий', command=change_text)
btn.pack(side=tk.BOTTOM)
change_text()
main_window.mainloop()

Офлайн

#3 Апрель 14, 2023 18:01:38

Simka
Зарегистрирован: 2020-02-15
Сообщения: 71
Репутация: +  1  -
Профиль   Отправить e-mail  

Сделать функцию для вывода текста в окно Tk (ткинтера)

Спасибо за быстрый ответ и предложенный вариант. Как я понял, я выбрал тупиковый вариант. Вы предлагаете отказаться от попыток заменять строки цветов в команде вывода текста. Предложено красивое изящное решение с применением виджетов. Если честно - не все в коде понял, и с логикой и с синтаксисом, это пока точно не мой уровень. Я пока на уровне книги Дж. Бриггса. Буду разбираться, ныряю в книги. Буду благодарен, если порекомендуете книги, которые помогут разобраться в синтаксисе вашего кода. Сейчас открыл Лутца.
Еще раз спасибо!

Отредактировано Simka (Апрель 14, 2023 18:54:08)

Офлайн

#4 Апрель 15, 2023 12:08:06

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1354
Репутация: +  119  -
Профиль   Отправить e-mail  

Сделать функцию для вывода текста в окно Tk (ткинтера)

Simka
Буду благодарен, если порекомендуете книги, которые помогут разобраться в синтаксисе вашего кода

Книгу читать мало, нужно обдумывать то что прочитано, упражняться с этим.
Simka
Если честно - не все в коде понял, и с логикой и с синтаксисом, это пока точно не мой уровень.
вот словарь, что тут удивительного

  
COLORS = {
    'белый': 'white',
    'черный': 'black',
    'красный': 'red',
    'зеленый': 'green',
    'синий': 'blue',
    'желтый': 'yellow',
    'серый': 'gray',
    'розовый': 'pink',
    'оранжевый': 'orange'
}

заглянул в книгу Бриггс “Питон для детей”, там про это рассказывается

далее
  
main_window = tk.Tk()
main_window.geometry('300x200')
sv = tk.StringVar()
lbl = tk.Label(textvariable=sv, font='Arial 36 bold')
lbl.pack(padx=10, pady=10)
btn = tk.Button(text='следующий', command=change_text)
btn.pack(side=tk.BOTTOM)
change_text()
main_window.mainloop()

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

Отредактировано xam1816 (Апрель 15, 2023 17:10:03)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version