(Python 3.7) Как я могу печатать символы сообщений с задержкой между ними, используя tkinter? - PullRequest
0 голосов
/ 03 марта 2020

Прежде всего, я новичок в python и кодирую

Я хочу сделать что-то довольно простое с tkinter , когда вы нажимаете кнопку, она показывает вам текст, например в старых играх буква за буквой с небольшой задержкой между символами

Я не могу найти способ сделать задержку между символами, я пробовал time.sleep с помощью al oop но текст показывается в конце l oop

Я видел функцию после , но я не знаю, как ее использовать, и я не понимаю, как это работает

Должен ли я использовать sleep или после ? И как я должен использовать их, чтобы он работал?

Кстати, если у вас есть какие-либо советы или рекомендации по поводу кода, скажите мне

    #MainFrame
root.title("Project")
root.geometry('400x400')
root.configure(bg="plum1")
    #Frame
BlackBorder=Frame(root,width=400,height=300,bg='Black')
BlackBorder.place(x=0,y=80)
TxtFrame=Frame(BlackBorder,width=370,height=270,bg='lavender')
TxtFrame.place(x=15,y=15)
    #Display
Cunter=Text(root,width=24,height=1,bg='lavender',font='Fixedsys')
Cunter.place(x=100,y=22)
Cunter.insert(END, str(len(LoList))+" Résultats Différents")


#defTxt
def LoMsg(self):
    self=Text(TxtFrame,wrap='word',borderwidth=0,width=35,height=10,bg='lavender',font='Fixedsys')
    self.place(x=50,y=100)
    LoTxt=str(LovList[randrange(len(LovList))])
    LoNum=0
    while LoNum!=len(LoTxt):
        self.insert(END,LoTxt[LoNum])
        sleep(0.1)
        LoNum+=1

    #Button
buttonMain=Button(root,width=9,height=3,bg='thistle2',text="Try me",font='Fixedsys')
buttonMain.place(x=5,y=5)
#ButtonEvent
buttonMain.bind('<1>', LoMsg)

Ответы [ 2 ]

1 голос
/ 03 марта 2020

Ниже приведен пример, иллюстрирующий использование метода after(ms, callback) для получения желаемого результата (соответственно измените ms в методе after):

import tkinter as Tk

def insert():
    global LoNum
    text.insert(Tk.END, word[LoNum])
    LoNum += 1
    if LoNum != len(word):
        root.after(300, insert)
    else:
        return

root = Tk.Tk()
root.geometry('600x200')

LoNum = 0
word = [x for x in 'abcdefg'] # get the word to a list format
text = Tk.Text(root, wrap='word', borderwidth=0, width=35, height=10, bg='lavender')
text.pack()

Tk.Button(root, text='Try Me', width=9, height=3, bg='thistle2', command=insert).pack()

root.mainloop()
0 голосов
/ 03 марта 2020

Добро пожаловать на Python и кодирование! Прежде чем ответить на ваш вопрос, я хочу рассмотреть несколько вещей:

  1. Будет полезно, если вы зададите минимальный воспроизводимый пример при задании вашего вопроса. Я не могу понять, в чем проблема в вашем коде, потому что так много всего происходит, и я не могу запустить его на своем компьютере, потому что отсутствуют некоторые части. Например, LoList не определено и нет import операторов.)

  2. У PEP8 есть огромный список предложений о том, как стилизовать ваш код - слишком много, чтобы прочитать все на один раз. Но я хотел бы обратить ваше внимание на Имена функций и переменных , которые предполагают, что переменные и функции используют все строчные буквы со словами, разделенными подчеркиванием. Обычно Имена классов начинаются с заглавной буквы. Поэтому многие ваши переменные и функции выглядят для меня как классы.

Чтобы ответить на ваш вопрос, я думаю, что использование time.sleep() будет работать. Вот простой пример, который запускается в консоли и может помочь вам понять, как ее использовать:

import time
text = "I've been awaiting your arrival..."
for char in text:
    # end='' will prevent each letter from getting its own line on the console
    # flush=True will make sure that the character is printed right away in the console
    print(char, end='', flush=True) 
    time.sleep(0.1)
...