Найти - Пользователи
Полная версия: Подскажите, как удалить Label в Tkinter?
Начало » GUI » Подскажите, как удалить Label в Tkinter?
1 2
Franek
Python 3.5, Tkinter.
Подскажите, пожалуйста. Когда на метке (Label) появляется текстовая надпись 2-ой раз, то она накладывается на предыдущую надпись. Как очистить метку?
В Викиверситете ответа не нашёл.
 #  Создание программы для изучения английских непр. глаголов
from tkinter import *
class Application(Frame):
    spis = [("воровать", "steal", "stole", "stolen"),
            ("кусать", "bite", "bit", "bitten"),
            ("делать", "do", "did", "done")]
    i = 0
    j = 0
    def __init__(self, master):
        super(Application, self).__init__(master)
        self.grid()
        self.create_widgets()
    def create_widgets(self):
        cort = self.spis[self.j]
        lbl = Label(text=cort[0], fg="green", font='arial 14')
        lbl.grid(row=0, column=2)
        btn = Button(width=15, text="перевод", command=self.transl)
        btn.grid()
    def transl(self):
        cort = self.spis[self.j]
        ruslbl = Label(text=cort[0], fg="green", font='arial 14')  # Russian word
        ruslbl.grid(row=0, column=1, columnspan=3)
        self.i += 1
        englbl = Label(text=cort[self.i], font='arial 15')              # English word
        englbl.grid(row=self.i+1, column=1, columnspan=3)
        if self.i == 3:
            self.i = 0
            self.j += 1
root = Tk()
root.title("Программа изучения английских слов")
root.geometry("400x150")
app = Application(root)
root.mainloop() 
4kpt_IV
Не создавать новый лейб, а просто в старом поменять свойство text

 label["text"] = "new text"
Franek
4kpt_IV
Спасибо!! Думал никак не решу.
 #  Создание программы для изучения английских непр. глаголов
from tkinter import *
class Application(Frame):
    spis = [("воровать", "steal", "stole", "stolen"),
            ("кусать", "bite", "bit", "bitten"),
            ("делать", "do", "did", "done")]
    i = 0
    j = 0
    def __init__(self, master):
        super(Application, self).__init__(master)
        self.grid()
        self.create_widgets()
    def create_widgets(self):
        cort = self.spis[self.j]
        ruslbl = Label(text=cort[0], fg="green", font='arial 14')  # Russian word
        self.ruslbl = ruslbl
        ruslbl.grid(row=0, column=2)
        englbl = Label(text=cort[self.i+1], font='arial 15')         # English word
        self.englbl = englbl
        englbl.grid(row=self.i + 1, column=1, columnspan=3)
        btn = Button(width=15, text="перевод", command=self.transl)
        btn.grid()
    def transl(self):
        self.i += 1
        cort = self.spis[self.j]
        self.ruslbl["text"] = cort[0]
        self.englbl["text"] = cort[self.i]
        if self.i == 3:
            self.i = 0
            self.j += 1
root = Tk()
root.title("Программа изучения английских слов")
root.geometry("400x150")
app = Application(root)
root.mainloop() 
Franek
4kpt_IV
Почему текст на лейбе появляется строго в одной строке? Упаковщик grid работает когда нажимаешь кнопку Button, в нём расположение строк должны меняться (переменная i). Но текст размещается строго в одной строке.
Полный текст проги:
 from tkinter import *
class Application(Frame):
    spis = [("воровать", "steal", "stole", "stolen"),
            ("кусать", "bite", "bit", "bitten"),
            ("делать", "do", "did", "done")]
    i = 0
    j = 0
    def __init__(self, master):
        super(Application, self).__init__(master)
        self.grid()
        self.create_widgets()
    def create_widgets(self):
        cort = self.spis[self.j]
        ruslbl = Label(text=cort[0], fg="green", font='arial 14')  # Russian word
        self.ruslbl = ruslbl
        ruslbl.grid(row=0, column=3)
        englbl = Label(font='arial 15')                            # English word
        self.englbl = englbl
        btn = Button(width=15, text="перевод", command=self.transl)
        btn.grid(column=2)
    def transl(self):
        self.i += 1
        print("i = ", self.i)
        cort = self.spis[self.j]
        self.ruslbl["text"] = cort[0]
        self.englbl["text"] = cort[self.i]
        self.englbl.grid(row=self.i + 1, column=2)
        if self.i == 3:
            self.j += 1
            print("j = ", self.j)
            self.i = 0
root = Tk()
root.title("Программа изучения английских слов")
root.geometry("400x150")
app = Application(root)
root.mainloop() 
4kpt_IV
Давайте так. Что Вы хотите сделать? Вы меняете grid для действующего label и он должен куда-то передвинуться?
Franek
4kpt_IV
Я хочу чтобы виджет self.englbl при первом клике на кнопку Button располагался в 1-ом ряду, при втором клике - во 2-ом… Номер ряда содержит переменная i, которая меняется, но расположение ряда - не меняется. Я не знаю почему.
4kpt_IV
А что становится на место этого label?
Franek
4kpt_IV
Для этого нужно создавать каждый раз новый лейб, наверное. Но тогда при втором клике мышкой новый текст будет накладываться на старый (как у меня получилось в самом первом сообщении этого поста).
4kpt_IV
Даже при упаковке его новым grid?
Franek
4kpt_IV
Да, для виджета englbl каждый раз (при клике кнопки) создаётся новый лейб и упаковывается новым grid.
 #  Создание программы для изучения английских непр. глаголов
from tkinter import *
class Application(Frame):
    spis = [("воровать", "steal", "stole", "stolen"),
            ("кусать", "bite", "bit", "bitten"),
            ("делать", "do", "did", "done")]
    i = 0
    j = 0
    def __init__(self, master):
        super(Application, self).__init__(master)
        self.grid()
        self.create_widgets()
    def create_widgets(self):
        cort = self.spis[self.j]
        lbl = Label(text=cort[0], fg="green", font='arial 14')
        lbl.grid(row=0, column=2)
        btn = Button(width=15, text="перевод", command=self.transl)
        btn.grid()
    def transl(self):
        cort = self.spis[self.j]
        ruslbl = Label(text=cort[0], fg="green", font='arial 14')  # Russian word
        ruslbl.grid(row=0, column=1, columnspan=3)
        self.i += 1
        englbl = Label(text=cort[self.i], font='arial 15')              # English word
        englbl.grid(row=self.i+1, column=1, columnspan=3)
        if self.i == 3:
            self.i = 0
            self.j += 1
root = Tk()
root.title("Программа изучения английских слов")
root.geometry("400x150")
app = Application(root)
root.mainloop() 
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB