Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Непонятное поведение горизонтального tk.Scrollbar c ttk.Treeview при масштабировании окна [RSS Feed]

#1 Ноя. 28, 2014 01:07:26

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

Непонятное поведение горизонтального tk.Scrollbar c ttk.Treeview при масштабировании окна

Здравствуйте.
Объясните, пожалуйста, почему при изменении размера окна по вертикали, появление и исчезновение прокрутки происходит, а при изменении по горизонтали нет.
Спасибо.

import tkinter as tk
import tkinter.font as tkFont
import tkinter.ttk as ttk


class treeListBox:
def __init__(self, master):
self.master = master
self.tree = None

def go(self, element_header, element_list, selectmode = 'extended'):
self.selectValue = None
self.selectmode = selectmode
self.element_header = element_header
self.element_list = element_list

self._setup_widgets()
self._build_tree()

self.master.mainloop()

return self.selectValue

def _setup_widgets(self):
rootheight = self.master.winfo_reqheight()
rootwidth = self.master.winfo_reqwidth()
container = tk.Frame(self.master, height=rootheight, width=rootwidth)
container.propagate(False)
container.pack()

self.tree = ttk.Treeview(container,columns=self.element_header, show="headings", selectmode = self.selectmode )
self.tree.bind("<Double-Button-1>", self.myselect,'+')
self.tree.bind("<Return>", self.myselect,'+')

self.fry = tk.Frame(container)
self.fry.pack(side='right', fill='y')

mylabel = tk.Label(self.fry, borderwidth=1, relief='raised', font= "Arial 8").pack(side='bottom',fill='x')

self.vsb = tk.Scrollbar(self.fry,orient="vertical", command=self.tree.yview)
self.vsb.pack(expand='yes', fill='y')

self.frx = tk.Frame(container)
self.frx.pack(side='bottom', fill='x')
self.hsb = tk.Scrollbar(self.frx,orient="horizontal", command=self.tree.xview)
self.hsb.pack(expand='yes', fill='x')

self.tree.configure(yscrollcommand=self.vsb.set, xscrollcommand=self.hsb.set)

self.tree.pack(fill='both',expand='yes')



def _build_tree(self):
#без этого дополнения не влазят полностью надписи в выделенный размер столбцов
dopolnenie=10
for col in self.element_header:
self.tree.heading(col, text=col.title(),
command=lambda c=col: self.sortby(self.tree, c, 0))
self.tree.column(col, width=tkFont.Font().measure(col.title())+dopolnenie)

for item in self.element_list:
myrow=self.tree.insert('', 'end', values=item)
for ix, val in enumerate(item):
col_w = tkFont.Font().measure(val)+dopolnenie
if (self.tree.column(self.element_header[ix], width=None)+dopolnenie) < col_w:
self.tree.column(self.element_header[ix], width=col_w)


def isnumeric(self, s):
"""test if a string is numeric"""
for c in s:
if c in "1234567890-.":
numeric = True
else:
return False
return numeric

def change_numeric(self, data):
"""if the data to be sorted is numeric change to float"""
new_data = []
if self.isnumeric(data[0][0]):
for child, col in data:
new_data.append((float(child), col))
return new_data
return data

def sortby(self, tree, col, descending):
"""sort tree contents when a column header is clicked on"""
# grab values to sort
data = [(tree.set(child, col), child) for child in tree.get_children('')]
# if the data to be sorted is numeric change to float
data = self.change_numeric(data)
# now sort the data in place
data.sort(reverse=descending)
for ix, item in enumerate(data):
tree.move(item[1], '', ix)
# switch the heading so that it will sort in the opposite direction
tree.heading(col,
command=lambda col=col: self.sortby(tree, col, int(not descending)))

def myselect(self, event):
try:
print(self.tree.item(self.tree.selection()[0],'values')[1])
except IndexError:
#print ('Выбор не сделан')
pass
#self.tree.set(self.tree.selection()[0],column='ipaddress',value='111')




# тестовая команда
if __name__ == '__main__':
element_header = ['symbol', 'name', 'atomic weight', 'melt (K)', 'boil (K)']

element_list = [
('H', 'Hydrogen', '1.00794', '13.81', '20.28') ,
('He', 'Helium', '4.00260', '0.95', '4.216') ,
('Li', 'Lithium', '6.941', '453.7', '1615') ,
('Be', 'Beryllium', '9.01218', '1560', '3243') ,
('B', 'Boron', '10.811', '2365', '4275') ,
('C', 'Carbon', '12.011', '3825', '5100') ,
('N', 'Nitrogen', '14.0067', '63.15', '77.344') ,
('O', 'Oxygen', '15.9994', '54.8', '90.188') ,
('F', 'Fluorine', '18.99840', '53.65', '85.0')
]

root = tk.Tk()
frame = tk.Frame(root)
frame.config(height=300, width=400)
frame.pack()
myTest = treeListBox(frame)
myTest.go(element_header, element_list)

Офлайн

  • Начало
  • » GUI
  • » Непонятное поведение горизонтального tk.Scrollbar c ttk.Treeview при масштабировании окна [RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version