Уведомления

Группа в Telegram: @pythonsu

#1 Март 28, 2014 12:03:50

den1024
Зарегистрирован: 2014-03-28
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Tkinter: Scrollbar для TreeView в panedwindow

Приветствую, Всех.

Есть проблема с отображением Scrollbar для TreeView, который находиться в panedwindow - прокрутка не видна.

Создаю так:

PanedWindow создаётся в основном окне (Tk).

pwindow = PanedWindow(self, orient=HORIZONTAL)
pwindow.pack(fill=BOTH, expand=1)
sbar = Scrollbar(pwindow)
sbar.pack(side=RIGHT, fill=Y)
tree = ttk.Treeview(pwindow, yscrollcommand=sbar.set)      
tree.pack()
sbar.config(command=tree.yview)
tree.heading('#0', text='Проекты', anchor='w')
root_node = tree.insert('', 'end', text='Some text', open=True)
tree.config(height=30)
pwindow.add(tree)                 
pwindow.grid(row=0, column=0)
sbar.grid(row=0, column=1, sticky='ns')
pwindow.grid()
bottom = Label(pwindow, text="Bottom pane")
pwindow.add(bottom)

Подскажите, пожалуйста, что делаю не так?

Офлайн

#2 Март 28, 2014 22:02:45

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

Tkinter: Scrollbar для TreeView в panedwindow

Полный код. Без него никак…
Нужно посмотреть импорт.

Офлайн

#3 Март 29, 2014 15:50:12

den1024
Зарегистрирован: 2014-03-28
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Tkinter: Scrollbar для TreeView в panedwindow

4kpt_II
Полный код. Без него никак…Нужно посмотреть импорт.

Вот полный код:

from tkinter import *
from tkinter import ttk
root = Tk()
pwindow = PanedWindow(root, orient=HORIZONTAL)
pwindow.pack(fill=BOTH, expand=1)
sbar = Scrollbar(pwindow)
sbar.pack(side=RIGHT, fill=Y)
tree = ttk.Treeview(pwindow, yscrollcommand=sbar.set)      
tree.pack()
sbar.config(command=tree.yview)
tree.heading('#0', text='Проекты', anchor='w')
root_node = tree.insert('', 'end', text='Some text', open=True)
tree.config(height=30)
pwindow.add(tree)                 
pwindow.grid(row=0, column=0)
sbar.grid(row=0, column=1, sticky='ns')
pwindow.grid()
bottom = Label(pwindow, text="Bottom pane")
pwindow.add(bottom)
root.mainloop()

Офлайн

#4 Март 29, 2014 16:38:43

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

Tkinter: Scrollbar для TreeView в panedwindow

Код мегажуткий
1. Разные методы геометрии объектов не дружат друг с другом. В результате нельзя совместно использовать методы grid, pack, place.
2. Если Вы используете PanedWindow, то упаковщики вообще не нужны.
3. Я до конца не понял, что Вы хотели, но мне кажется, что это…

import tkinter
import ttk
#
root = tkiner. Tk()
root.geometry("400x400+100+100")
#
pwindow = tkinter.PanedWindow(root, orient="horizontal")
pwindow.pack(fill="both", expand=True)
#
sbar = tkinter.Scrollbar(pwindow)
tree = ttk.Treeview(pwindow, yscrollcommand=sbar.set)
sbar.config(command=tree.yview)
pwindow.add(tree)
#
tree.heading('#0', text='Проекты', anchor='w')
tree.insert('', 'end', text='First linet', open=True)
port = tree.insert("", "end", text="Second Line", open=True)
tree.insert(port, "end", text="Inner second line", open=True)
tree.config(height=15)
#
bottom = tkinter.Label(pwindow, text="Right pane")
pwindow.add(bottom)
#
root.mainloop()

P.S. Конструкцию

from tkinter import *

Использовать нельзя. Почему? Можно прочитать по ссылке ниже.
Нажимаем сюда.

P.S.S.

Добавил документацию по PanedWindow.

P.S.S.S. Будут вопросы - пишите…

Отредактировано 4kpt_II (Март 29, 2014 16:42:54)

Прикреплённый файлы:
attachment tk_panedwindow.pdf (40,4 KБ)

Офлайн

#5 Апрель 1, 2014 12:10:59

den1024
Зарегистрирован: 2014-03-28
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Tkinter: Scrollbar для TreeView в panedwindow

Почему-то инструкция: import ttk выдаёт ошибку, мол нет такого модуля. Хотя from ttk import * нормально отрабатывает.

Офлайн

#6 Апрель 1, 2014 12:19:36

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

Tkinter: Scrollbar для TreeView в panedwindow

Прошу прощения. Просто за 3.Х не работаю.
Забыл, что там ttk внесли в tkinter.
Поэтому нужно так:

tree = tkinter.ttk.Treeview(pwindow, yscrollcommand=sbar.set)

В этом случае не забудьте удалить строку с импортом ttk.

Или так:

import  tkinter
from tkinter import ttk

P.S. Будут вопросы - пишите…

Отредактировано 4kpt_II (Апрель 1, 2014 12:20:23)

Офлайн

#7 Апрель 1, 2014 12:21:35

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

Tkinter: Scrollbar для TreeView в panedwindow

den1024
Почему-то инструкция: import ttk выдаёт ошибку, мол нет такого модуля. Хотя from ttk import * нормально отрабатывает.

А нормально оно отрабатывает, потому как Вы уже все пространство имен tkinter импортировали в свой модуль и ttk в том же числе.

Офлайн

#8 Апрель 1, 2014 12:31:28

den1024
Зарегистрирован: 2014-03-28
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Tkinter: Scrollbar для TreeView в panedwindow

Привел код к правильному состоянию, но прокрутка в дереве не появилась

import tkinter
from tkinter import ttk
root = tkiner. Tk()
root.geometry("400x400+100+100")
pwindow = tkinter.PanedWindow(self, orient="horizontal")
pwindow.pack(fill="both", expand=1)
sbar_y = tkinter.Scrollbar(pwindow)
sbar_x = tkinter.Scrollbar(pwindow)
tree = ttk.Treeview(pwindow, yscrollcommand=sbar_y.set, xscrollcommand=sbar_x.set)
sbar_y.config(command=tree.yview)
sbar_x.config(command=tree.xview)
pwindow.add(tree)                 
tree.heading('#0', text='Проекты', anchor='w')
root_node = tree.insert('', 'end', text='Root item fskdjfhjkdshfsdkfsdfsdfsdfsdfsdfsdffsdfsdf', open=True)
tree.config(height=30)
bottom = tkinter.Label(pwindow, text="Bottom pane")
pwindow.add(bottom)
root.mainloop()

Офлайн

#9 Апрель 1, 2014 15:36:54

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

Tkinter: Scrollbar для TreeView в panedwindow

1. Вы не привели к номральному состоянию
2. Упаковывать не надо объекты, которые передаются как базовые в PanedWindow.
3. Если Вам нужны полосы прокрутки придется их упаковать вмести с Treeview в отделную рамку.

Короче. Держите:

import tkinter
from tkinter import ttk
#
root = tkinter. Tk()
root.geometry("400x400+100+100")
#
pwindow = tkinter.PanedWindow(root, orient="horizontal")
pwindow.pack(fill="both")
#
frame = tkinter.Frame(pwindow)
pwindow.add(frame)
#
sbar_x = ttk.Scrollbar(frame, orient="horizontal")
sbar_y = ttk.Scrollbar(frame, orient="vertical")
sbar_y.grid(row=0, column=1, sticky="NS")
sbar_x.grid(row=1, column=0, sticky="EW")
#
tree = ttk.Treeview(frame)
tree.grid(row=0, column=0)
tree.column("#0", minwidth=800)
tree.config(yscrollcommand=sbar_y.set, height=15, xscrollcommand=sbar_x.set)
tree.heading("#0", text='Проекты', anchor='w')
#
sbar_y.config(command=tree.yview)
sbar_x.config(command=tree.xview)
#
for i in xrange(30):
    text = "%s" % i
    tree.insert('', 'end', text=20*text)
#
bottom = Tkinter.Label(pwindow, text="Bottom pane")
pwindow.add(bottom)
#
root.update()
root.mainloop()

P.S. Будут вопросы - пишите …

Отредактировано 4kpt_II (Апрель 1, 2014 15:37:45)

Офлайн

#10 Апрель 4, 2014 10:34:46

den1024
Зарегистрирован: 2014-03-28
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Tkinter: Scrollbar для TreeView в panedwindow

Что-то вышло не то, видно на скриншоте во вложении. Код:

import tkinter
from tkinter import ttk
#
root = tkinter. Tk()
root.geometry("400x400+100+100")
#
pwindow = tkinter.PanedWindow(root, orient="horizontal")
        pwindow.pack(fill="both")
#
        frame = tkinter.Frame(pwindow)
        pwindow.add(frame)
#
        sbar_y = ttk.Scrollbar(frame, orient="vertical")
        sbar_x = ttk.Scrollbar(frame, orient="horizontal")
        sbar_y.grid(row=0, column=1, sticky="NS")
        sbar_y.grid(row=1, column=0, sticky="EW")
#
        tree = ttk.Treeview(frame)      
        tree.grid(row=0, column=0)
        tree.column("#0", minwidth=800)
        tree.config(yscrollcommand=sbar_y.set, height=15, xscrollcommand=sbar_x.set)
#
        tree.heading("#0", text="Проекты", anchor="w")
#
        sbar_y.config(command=tree.yview)
        sbar_x.config(command=tree.xview)
#
        root_node = tree.insert('', 'end', text='fskdjfhjkdshfsdkfsdfsdfsdfsdfsdfsdffsdfsdf', open=True)
#
        bottom = tkinter.Label(pwindow, text="Bottom pane")
        pwindow.add(bottom)
        root.update()
root.mainloop()

Прикреплённый файлы:
attachment TK.JPG (18,7 KБ)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version