Как можно изменить текст при нажатии кнопки в tkinter?

ВладисLove

Новичок
Пользователь
Апр 17, 2021
10
0
1
Windows 10
Python (3.8)
Библиотека pillow 8.1.2



Здраствуйте, я хочу изменить текст Label'a на текст из словаря, но я точно не знаю какую команду использовать, когда я использую команду .text мне выдает ошибки
"self.getresault[self.answer_num] = '0'
IndexError: list assignment index out of range" Хотя во время нажатия на кнопку должен меняться текст Label'a (10 нажатий на кнопку ничего не происходит)

Код:

main:
Python:
from tkinter import *
from TestingProgramm import Tester
from Register import Register
from PIL import Image as PilImage
from PIL import ImageTk


class MainWindow(Tk):
    def __init__(self, width, height, title="Math", resizable=(True, True), icon="res/12079.ico"):
        Tk.__init__(self)

        # Список для данных из другого класса (другого окна)
        self.ok = Button(width=30, height=5, text="Регистрация",
                         command=lambda: self.create_window1(400, 500, "Registration"),
                         relief=GROOVE, bd=7, font=("Times New Roman", 15, "bold"))
        self.data = []

        self.Truebility = False
        self.r = Register
        self.title(title)
        self.geometry(f'{width}x{height}+200+200')
        self.resizable(resizable[0], resizable[1])
        if icon:
            self.iconbitmap(icon)
        img = PilImage.open(r"res\math.jpg")
        img = img.resize((560, 750), PilImage.ANTIALIAS)
        self.login = Entry

        self.photo_image = ImageTk.PhotoImage(img)

    # Метод для печати данных из другого класса (другого окна)
    def print_other_class(self):
        print(self.data)

    def run(self):
        self.objects_on_the_screen()
        self.mainloop()

    def objects_on_the_screen(self):
        if not self.Truebility:
            self.ok.place(x=100, y=240)
        else:
            self.ok.state = DISABLED

        Button(width=30, height=5, text="Начать тестирование",
               relief=GROOVE, bd=7, font=("Times New Roman", 15, "bold"),
               command=lambda: self.create_window(400, 500, "Test")).place(x=100, y=410)

        Button(image=self.photo_image).place(x=700, y=200)

        Button(width=30, height=5, text="Выход", command=quit,
               relief=GROOVE, bd=7, font=("Times New Roman", 15, "bold")).place(x=100, y=580)

    def create_window(self, width, height, title="Test", resizable=(True, True), icon=None):
        Tester(self, width, height, title, resizable, icon)

    def create_window1(self, width, height, title="Test2", resizable=(True, True), icon=None):
        Register(self, width, height, title, resizable, icon)


if __name__ == "__main__":
    window = MainWindow(1920, 1080)
    window.run()

TestingProgramm:
Python:
from tkinter import *

class Tester(Toplevel):
    def __init__(self, master, width, height, title="Test", resizable=(True, True), icon=None):
        Toplevel.__init__(self, master)
        self.title(title)
        self.geometry(f"{width}x{height}+200+200")
        self.resizable(resizable[0], resizable[1])
        if icon:
            self.iconbitmap(icon)

        self.variants = {'0': 'Возведи в степень: 3^2 * 11^2, если ^ - знак возведения в степень',
                         '1': 'Решите уравнение: (2x + y) − (3x + y)',
                         '2': 'Найдите верное тождество:',
                         '3': 'Решите уравнение: 9 + 16x = 41 + 14x',
                         '4': 'Решите уравнение: -14x - 49 = 945',
                         '5': 'Найдите наименьший одночлен, если a = 8, b = -3:',
                         '6': 'Найди значение функции y=x^2, соответствующее заданному значению аргумента: x=1,2:',
                         '7': 'Разложите многочлен на множители с помощью формулы квадрата суммы: (a + b)^2',
                         '8': 'У Васи и Пети по 55 гирь весом 1, 2,, 55 кг.\
                                Они по очереди подкладывают свои гири каждый на свою чашу двухчашечных весов.\
                                Первым ходит Вася. Петя выигрывает, если разность масс гирь на чашах окажется равной 50 кг.\
                                Сможет ли он этого добиться?: В ответ впишите да или нет',
                         '9': 'Можно ли из цифр 1, 2, 3, 4, 5 составить одно двузначное и одно трехзначное число так, чтобы второе делилось на первое?\
                                Каждая цифра должна быть использована ровно один раз: В ответ дайте одно число'}
        self.getresault = ['0', '0', '0', '0', '0', '0', '0', '0', '0', '0']
        self.paper = ['1089', '−x', '3 * a * 3 * b == 9 * a * b', '16', '−71',  '25', '1.44', 'a^2 + 2ab + b^2', '145', ('532', '215'), 'да']
        self.answer_entry = Entry(self)
        self.getanswer = self.answer_entry.get()
        self.answer_num = 0
        self.tocontinue = Button(self, width=30, height=5, text="next",
                         command=lambda: self.check_resaults(),
                         relief=GROOVE, bd=7, font=("Times New Roman", 15, "bold"))
        self.tocontinue.pack()
        self.answerlabel = Label(self, text=self.variants[str(self.answer_num)])
        self.answerlabel.pack()
        self.answer_entry.pack()

    def check_resaults(self):
        if self.getanswer == self.paper[self.answer_num]:
            self.getresault[self.answer_num] = 1
        else:
            self.getresault[self.answer_num] = '0'
        self.answer_num += 1
        self.answerlabel = Label(self, text=self.variants[str(self.answer_num)])

if __name__ == '__main__':
    pass
Register:
Python:
from tkinter import *


class Register(Toplevel):

    def __init__(self, master, width, height, title="Test", resizable=(True, True), icon=None):

        Toplevel.__init__(self, master)

        self.title(title)

        self.geometry(f"{width}x{height}+200+200")

        self.resizable(resizable[0], resizable[1])

        if icon:

            self.iconbitmap(icon)



        self.login1 = Label(self, text="").pack()

        self.login2 = Label(self, text="").pack()

        self.login3 = Label(self, text="").pack()

        self.login = Label(self, text="Login:").pack()

        self.login_entry = Entry(self)

        self.login_entry.pack()

        self.age = Label(self, text="Password:").pack()

        self.password_entry = Entry(self, show="*")

        self.password_entry.pack()

        self.password = Label(self, text="Age:").pack()

        self.age_entry = Entry(self)

        self.age_entry.pack()

        self.button = Button(self, width=30, height=5, text="Save", command=self.save,

                             relief=GROOVE, bd=7, font=("Times New Roman", 15, "bold")).pack()



    # Здесь мы добавляем в список из главного класса данные из формы Register

    # и вызываем метод печати из главного класса

    def save(self):

        self.master.data.append(self.login_entry.get())

        self.master.data.append(self.password_entry.get())

        self.master.data.append(self.age_entry.get())

        self.master.Truebility = True

        self.master.print_other_class()

        Register.destroy(self)



if __name__ == '__main__':

    pass
 
Последнее редактирование:

ВладисLove

Новичок
Пользователь
Апр 17, 2021
10
0
1
такую же ошибку выдает и с текстом выше: "self.answerlabel = Label(self, text=self.variants[str(self.answer_num)])"
 

ВладисLove

Новичок
Пользователь
Апр 17, 2021
10
0
1
Все не нужно я нашел решение можно использовать .configure) однако если я достаю из словаря строки склеенные через \ почему то идет много табуляции
 

Форум IT Специалистов