Как иметь переменный текст в метке в tkinter? - PullRequest
0 голосов
/ 20 июня 2019

Я хочу, чтобы метка содержала один символ текста, затем два, затем три, затем четыре и т. Д. Я понимаю, что мне нужно использовать StringVar и / или параметр textvariable в Label.Я пытался использовать StringVar (), как вы можете видеть.Я также попытался textvariable (с использованием и без использования .get ()) и просто текст с .get ().Во всех случаях текст либо не появляется, либо появляется мгновенно, чем в стагнации.Вот мой код:

class gui:
 def __init__(self, master):
     self.master = master
     master.title("VisualNovelPrototype")

     self.str = StringVar()
     self.str.set("Welcome to the game")
     self.label = Label(master, text=self.str.get())
     self.label.grid(row=0,column=1)

     self.button0 = Button(master, text="yes", command=self.start)
     self.button0.grid(row=1,column=1)

     self.button1 = Button(master, text="no", command=master.quit)
     self.button1.grid(row=2,column=1)

 def label_change(self, text):
     str = self.str
     store = ""
     for index in range(len(text)):
         store += text[index]
         str.set(store)
         time.sleep(0.08)
         self.label.config(text=self.str.get())

 def button_change(self, master, text0="", command0="", text1="", command1=""):
     self.button0.config(text=text0, command=command0)
     self.button1.config(text=text1, command=command1)

 def start(self):
     self.label_change("Its a cold night. A storm rages outside. You hear a knock at the door.")

1 Ответ

0 голосов
/ 20 июня 2019

Я думаю, что лучше использовать label.config (text = "TEXT") во время итерации, как я это делал в своем коде. Я бы посоветовал использовать больше self.variables для подключения их к каждой функции.

Вот код:

from tkinter import *
import time
class gui:
 def __init__(self, master):
     self.master = master
     self.master.geometry("365x100")
     self.master.title("VisualNovelPrototype")

     self.str1 = StringVar()
     self.str1.set("Welcome to the game")
     self.label = Label(self.master, text=self.str1.get())
     self.label.grid(row=0,column=1)

     self.button0 = Button(self.master, text="yes", command=self.start)
     self.button0.place(x=180,y=40)

     self.button1 = Button(self.master, text="no", command=self.master.destroy)
     self.button1.place(x=180,y=70)

 def label_change(self, text):
     def process():
         self.store += text[self.index]
         self.index += 1
         self.label.config(text=self.store)
         self.master.update()
         self.label_change(self.txt)
     if self.store!=text:
         time.sleep(0.100)
         process()
     else:
         pass

 def button_change(self, master, text0="", command0="", text1="", command1=""):
     self.button0.config(text=text0, command=command0)
     self.button1.config(text=text1, command=command1)

 def start(self):
     self.store=""
     self.index=0
     self.txt="Its a cold night. A storm rages outside. You hear a knock at the door."
     self.label_change(self.txt)

window=Tk()
et=gui(window)

Когда вы нажали yes, запускается эта функция, которая инициализирует self.index и self.txt для индексации строки, а другая - для хранения строки соответственно. Затем он переходит к функции label_change с параметром self.txt.

 def start(self):
     self.store=""
     self.index=0
     self.txt="Its a cold night. A storm rages outside. You hear a knock at the door."
     self.label_change(self.txt)

Функция label_change будет повторяться до тех пор, пока self.store не станет таким же, как self.txt.

 if self.store!=text:
     time.sleep(0.100)
     process()
 else:
     pass

Затем он вызовет функцию процесса, чтобы добавить один символ в переменную self.store и увеличить self.index на 1. Наконец, он обновит self.master (окно GUI).

def process():
     self.store += text[self.index]
     self.index += 1
     self.label.config(text=self.store)
     self.master.update()
     self.label_change(self.txt)

Это мой первый ответ, поэтому, если возникнут какие-либо проблемы, я готов помочь. Ciao!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...