Tkinter размещает расширяемый текст над прокручиваемым текстом - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть два объекта Tkinter Text.

У верхнего есть размеры, которые помещаются на экране, однако эти размеры со временем меняются.

У нижнего есть тонна текста и предназначен для прокрутки.

Цель состоит в том, чтобы верхний занимал все необходимое пространство, а нижний заполнял пространство под ним для прокрутки.

Вот текущий процесс

enter image description here

Здесь в верхнем тексте нет инструкций к пакету, а в нижнем - следующее: text.pack(fill=BOTH, expand=1)

Основная проблема с этим заключается в

  1. Фиолетовое (верхнее) текстовое поле закрывает первые несколько строк другого поля независимо от того, что
  2. Когда вы прокручиваете нижний текст, фиолетовое текстовое поле в конечном итоге приводит к появлению этого окна. , Вы должны выделить текст, чтобы получить его на go.

Как я могу получить его так, чтобы фиолетовая коробка заполняла верхнюю часть окна, а белая коробка заполняла остальные?

Если вы хотите поиграть с этим, вот код

from tkinter import *

from logReadTools import *
#https://www.instructables.com/id/Create-a-Simple-Python-Text-Editor/
from tkinter import *
from tkinter import font

#https://stackoverflow.com/a/20567348/5183807
class LogWindow(Text):
    def __init__(self, myroot, event=None, x=None, y=None, size=None, txt=None, *args, **kwargs):
        Text.__init__(self, master=myroot, *args, **kwargs)
        self.font = font.Font(family="Helvetica Neue LT Com 55 Roman",size=10)
        self.place(x=10,y=10)
        self.lift()
        self.insert(INSERT,' Overlay\nThis is an overlay\n\nThing and thing\n ')
        self.config(font=self.font)
        self.config(bg="#720058")
        self.config(foreground="white")
        self.update_size(event=None)
        bindtags = list(self.bindtags())
        bindtags.insert(2, "custom")
        self.bindtags(tuple(bindtags))
        self.bind_class("custom", "<Key>", self.update_size)

    def update_size(self, event):
        width=0
        lines=0
        for line in self.get("1.0", "end-1c").split("\n"):
            width=max(width,self.font.measure(line))
            lines += 1
        self.config(height=lines)
        self.place(width=(width+10)*1.5)

    def setNewText(self, text):
        self.delete(1.0, "end")
        self.insert(INSERT, text)
        self.update_size(None)


#https://stackoverflow.com/a/9720858/5183807
class MyApp(Tk):
    def __init__(self, *args, **kwargs):
        Tk.__init__(self, *args, **kwargs)
        self.text = Text(self)

        self.textStr = "I\nI\nI\nAM\n\Am\n\nAmI\nI\nI\nAM\n\Am\n\nAmI\nI\nI\nAM\n\Am\n\nAmI\nI\nI\nAM\n\Am\n\nAmI\nI\nI\nAM\n\Am\n\nAmI\nI\nI\nAM\n\Am\n\nAmI\nI\nI\nAM\n\Am\n\nAmI\nI\nI\nAM\n\Am\n\nAmI\nI\nI\nAM\n\Am\n\nAmI\nI\nI\nAM\n\Am\n\nAmI\nI\nI\nAM\n\Am\n\nAm"
        self.text.insert(INSERT, self.textStr)
        self.text.config(state=DISABLED)


        self.overlay = LogWindow(self)
        self.text.pack(fill=BOTH, expand=1)




root=MyApp()
root.geometry('600x500')
root.resizable(True, True)          
root.mainloop()

Вот схема того, к чему я стремлюсь enter image description here

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