Как заставить полосу прокрутки работать во фрейме Tkinter? - PullRequest
0 голосов
/ 07 мая 2020

Я делаю проект, в котором мне нужно отображать логи во фрейме с помощью Tkinter. Вот мой код для этого конкретного кадра.

# frame3 for logs
frame3 = Frame(
    win,
    bg='black',
    width=310,
    height=140,
    padx=0,
    pady=0)
frame3.pack(fill=X, expand=True, padx=(0, 10), pady=0)
frame3.pack_propagate(0)  # stops frame from shrinking
scroll = Scrollbar(frame3)
scroll.pack(side = RIGHT, fill = Y)

Журналы создаются и печатаются в этом кадре. Вот код для создания и печати журналов

logs = Label(frame3, text = (time.ctime()), font=("Consolas", 9), bg="#000000", fg="#ffffff")
logs.pack(pady=(0, 0))

enter image description here

Полоса прокрутки отображается, но почему-то не работает. Прокрутка скользит, если я нажимаю и передвигаю ее с помощью мыши. Думаю, в Tkinter есть 3 типа полос прокрутки (поправьте меня, если я ошибаюсь).

  1. полоса прокрутки окна.
  2. полоса прокрутки фрейма.
  3. полоса прокрутки метки ( не уверен в этом).

Думаю, проблема в том, что я сделал полосу прокрутки для фрейма. Но мне это нужно для лейбла. Или есть способ распечатать журналы прямо на раме? Не знаю, в чем настоящая проблема. Кроме того, есть ли способ сделать его автоматически прокручиваемым при создании журналов?

Любая помощь будет принята с благодарностью. Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 07 мая 2020

Вот пример использования tkinter.scrolledtext:

from tkinter import *
from tkinter import scrolledtext

root = Tk()

txt = scrolledtext.ScrolledText(root)
txt['font'] = ('consolas', '12')
txt.pack(expand=True, fill='both')
txt.configure(state=DISABLED)

def log(data):
    txt.configure(state=NORMAL)
    txt.insert(END, data+'\n')
    txt.configure(state=DISABLED)

log('abc')
log('abcde')

root.mainloop()

Надеюсь, это поможет!

0 голосов
/ 07 мая 2020

.see("end") метод помогает автопрокрутке.

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