Прокручиваемый фрейм () внутри Text () в tkinter - PullRequest
0 голосов
/ 05 сентября 2011

Я вложил 100 строк в 2 столбца.Каждая строка находится внутри одного фрейма, и все упаковано внутри текстового виджета.Я пытаюсь добавить полосу прокрутки, но она прокручивает только текст, а столбцы не двигаются.

    frame_fields = tk.Text(self.window)
    frame_fields.pack_propagate(0)
    tf = {}
    text_labels = tk.Text(frame_fields)
    text_labels.pack(side='left', expand='yes', fill='both')

    scrollbar = tk.Scrollbar(frame_fields)
    scrollbar.config(command=text_labels.yview)
    scrollbar.pack(side='right', fill='y')
    text_labels.config(yscrollcommand=scrollbar.set)

    for f in range(100):
        tf[f] = tk.Frame(text_labels)
        e_find = tk.Entry(tf[f])
        e_replace = tk.Entry(tf[f])
        e_find.pack(side='left')
        e_replace.pack(side='left')
        tf[f].pack()
    frame_fields.pack()

Как мне изменить этот код, поэтому text_labels прокрутка?

A Решение

http://i56.tinypic.com/2edaaeg.png

Приведенный ниже код создаетпрокручиваемые ячейки:

def create_cells(self):
    """Create cells for exception text"""
    # ----------------------------------------------
    frame_fieldsscroll = tk.Text(self.main, relief='flat')
    text_fields = tk.Text(frame_fieldsscroll, relief='flat')
    frame_fieldsscroll.window_create('insert', window=text_fields)

    tf = {}
    for f in range(31):

        e_find = tk.Entry(text_fields, width=16, relief='flat')
        e_replace = tk.Entry(text_fields, width=16, relief='flat')

        e_find.insert(0, 'find'+str(f))
        e_replace.insert(0, 'replace'+str(f))

        e_find.grid(row=0, column=0)
        e_replace.grid(row=0, column=1)

        text_fields.window_create('insert', window=e_find)
        text_fields.window_create('insert', window=e_replace)

        text_fields.insert('end', '\n')

    scrollbar = tk.Scrollbar(frame_fieldsscroll, width=15)
    scrollbar.config(command=text_fields.yview)
    text_fields.config(yscrollcommand=scrollbar.set)

    frame_fieldsscroll.pack()
    scrollbar.pack(side='right', fill='y')
    text_fields.pack(fill='both')

    text_fields.configure(state='disabled')
    frame_fieldsscroll.configure(state='disabled')

1 Ответ

1 голос
/ 05 сентября 2011

Чтобы объекты в окне можно было прокручивать вместе с текстом, необходимо добавить их с помощью метода window_create текстового виджета вместо использования pack или grid или place.

...