Tkinter window_create в текстовом виджете перекрывает другой графический интерфейс

#python-3.x #tkinter #python-3.8 #tkinter-text

#python-3.x #tkinter #python-3.8 #tkinter-текст

Вопрос:

Я создаю чат, используя Python 3.8 и Tkinter. Я реализовал цветной текст с помощью метода window.create() текстового виджета. Но когда вы начинаете прокручивать вверх, этот текст перекрывает остальную часть интерфейса программы. Как я могу это исправить? скриншот

Вот код, который я использую:

     def coloredOutput(self, bg, fg, text):
        try:
            a = []
            for line in text.split('n'):
                a.append(len(line))

            if len(a) <= 10:
                label = Text(bg=bg, fg=fg, width=max(a), height=len(a), borderwidth=0)
                label.insert(1.0, text)
                label.configure(state=DISABLED)
            else:
                msg = "~ too many lines! 10 is max, but there's "   str(len(a))   " lines in this message ~"
                label = Text(bg="red", fg="white", width=len(msg), height=1, borderwidth=0)
                label.insert(1.0, msg)
                label.configure(state=DISABLED)
        except Exception as e:
            print(e)
            msg = "Formatting error! Maybe your message is not properly formatted?"
            label = Text(bg="red", fg="white", width=len(msg), height=1, borderwidth=0)
            label.insert(1.0, msg)
            label.configure(state=DISABLED)
        self.text.window_create(END, window=label)
  

Спасибо за вашу помощь. Извините за любые ошибки в моем английском, я из Украины.

Комментарии:

1. Не могли бы вы показать нам минимальный пример?

2. @jizhihaoSAMA одна секунда

3. @jizhihaoSAMA 1. Клонировать репозиторий ( github.com/3elDU/SecureChat ) 2. Сделайте как здесь ( youtube.com/watch?v=TdJGwTuJSZ8amp;feature=youtu.be ) Чтобы открыть чат, просто запустите Chat.pyw или, скорее, «Начать чат с debug console.bat», также введите 176.8.99.2 в качестве ip

Ответ №1:

Окно, которое добавляется с window_create , должно быть дочерним для текстового виджета, а не дочерним для корневого окна.

 label = Text(self.text, ...)
self.text.window_create(END, label)
  

Комментарии:

1. Спасибо, это помогло! Я бы никогда не поверил, что вы ответите мне, я видел много ваших ответов!