Форум сайта python.su
Приветствую, Всех.
Есть проблема с отображением 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)
Офлайн
Полный код. Без него никак…
Нужно посмотреть импорт.
Офлайн
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()
Офлайн
Код мегажуткий
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()
from tkinter import *
Отредактировано 4kpt_II (Март 29, 2014 16:42:54)
Прикреплённый файлы: tk_panedwindow.pdf (40,4 KБ)
Офлайн
Почему-то инструкция: import ttk выдаёт ошибку, мол нет такого модуля. Хотя from ttk import * нормально отрабатывает.
Офлайн
Прошу прощения. Просто за 3.Х не работаю.
Забыл, что там ttk внесли в tkinter.
Поэтому нужно так:
tree = tkinter.ttk.Treeview(pwindow, yscrollcommand=sbar.set)
import tkinter from tkinter import ttk
Отредактировано 4kpt_II (Апрель 1, 2014 12:20:23)
Офлайн
den1024
Почему-то инструкция: import ttk выдаёт ошибку, мол нет такого модуля. Хотя from ttk import * нормально отрабатывает.
Офлайн
Привел код к правильному состоянию, но прокрутка в дереве не появилась
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()
Офлайн
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()
Отредактировано 4kpt_II (Апрель 1, 2014 15:37:45)
Офлайн
Что-то вышло не то, видно на скриншоте во вложении. Код:
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()
Прикреплённый файлы: TK.JPG (18,7 KБ)
Офлайн