Форум сайта python.su
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()
Отредактировано Franek (Янв. 14, 2017 17:41:41)
Офлайн
Не создавать новый лейб, а просто в старом поменять свойство text
label["text"] = "new text"
Отредактировано 4kpt_IV (Янв. 14, 2017 17:48:34)
Офлайн
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()
Офлайн
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()
Офлайн
Давайте так. Что Вы хотите сделать? Вы меняете grid для действующего label и он должен куда-то передвинуться?
Офлайн
4kpt_IV
Я хочу чтобы виджет self.englbl при первом клике на кнопку Button располагался в 1-ом ряду, при втором клике - во 2-ом… Номер ряда содержит переменная i, которая меняется, но расположение ряда - не меняется. Я не знаю почему.
Отредактировано Franek (Янв. 16, 2017 11:19:26)
Офлайн
А что становится на место этого label?
Офлайн
4kpt_IV
Для этого нужно создавать каждый раз новый лейб, наверное. Но тогда при втором клике мышкой новый текст будет накладываться на старый (как у меня получилось в самом первом сообщении этого поста).
Офлайн
Даже при упаковке его новым grid?
Офлайн
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()
Офлайн