У меня есть два объекта Tkinter Text.
У верхнего есть размеры, которые помещаются на экране, однако эти размеры со временем меняются.
У нижнего есть тонна текста и предназначен для прокрутки.
Цель состоит в том, чтобы верхний занимал все необходимое пространство, а нижний заполнял пространство под ним для прокрутки.
Вот текущий процесс
![enter image description here](https://i.stack.imgur.com/2fUq2.png)
Здесь в верхнем тексте нет инструкций к пакету, а в нижнем - следующее: text.pack(fill=BOTH, expand=1)
Основная проблема с этим заключается в
- Фиолетовое (верхнее) текстовое поле закрывает первые несколько строк другого поля независимо от того, что
- Когда вы прокручиваете нижний текст, фиолетовое текстовое поле в конечном итоге приводит к появлению этого окна. , Вы должны выделить текст, чтобы получить его на 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](https://i.stack.imgur.com/PHo21.png)