- Сообщения
- 14,053
- Решения
- 1
- Реакции
- 5,745
Python:
class Brend_table():
'''
Класс работы с таблицей отображения на форме
с данными .....
'''
def __init__(self, root = 'tab_2', file_1 = br.VTelevizor_brand_1,
file_2 = br.VTelevizor_brand_2):
self.root = root
....все лишнее убрал, что бы не мешало читать код
# Пакуем Canvas в качестве контейнера и прикручиваем ScrollBar
self.canvas = tk.Canvas(self.root,
width=600, height=600, bg="gray",)
self.canvas.pack(side="left", fill="both", expand=True)
self.scroll = ttk.Scrollbar(self.root, orient='vertical',
command=self.canvas.yview)
self.scroll.pack(side="right", fill="y")
self.scroll_frame = ttk.Frame(self.canvas)
self.scroll_frame.pack(fill="both", expand=True)
self.scroll_frame.bind("<Configure>", self.config_cnv)
self.scroll_frame.bind("<MouseWheel>", self._on_mousewheel)
self.canvas.create_window((0, 0),
window=self.scroll_frame, anchor="nw")
self.canvas.configure(yscrollcommand=self.scroll.set)
def config_cnv(self, event):
self.canvas.config(scrollregion=self.canvas.bbox('all'))
self.canvas.coords('self.scroll_frame', 1500,1500,1500,1500)
def _on_mousewheel(self, event):
# Метод обрабатывает событие прокрутки колесика мыши
self.canvas.yview_scroll(int(-1*(event.delta/120)), "units")
def add_grid(self, text='', rows_=0, column_=0, color='yellow',
types_='lb'):
'''
Метод отрисовывает таблицу на форме, необходимые атрибуты
передаются в качестве аргументов
'''
# Палитра цветов:
# '#0F3' Зеленый
# '#9F6' Светло зеленый
# '#f21b1b' Красный
# '#a4e6f5' Ячейки с именами ...
# '#FFE1FF' Легкий фон ...
root = self.scroll_frame if self.tab_id == 4 else self.root
if types_ == 'bt':
self.bt = tk.Button(root, text=text,
bd=1,
bg=color,
font=('TkDefaultFont', 7),
wraplength=120,
justify='center',)
self.bt.grid(row=rows_,
column=column_,
sticky='N'+'S'+'W'+'E',
)
self.bt.bind('<Button-1>', self.change)
# bt.bind('<Enter>', self.showMenu_bt)
# bt.bind('<Leave>', self.showMenu_bt_out)
# bt.bind("<Button-3>", self.showMenu_bt_ButtonPress)
else:
self.lb = tk.Label(root,
text=text,
width=30,
bd=1,
bg=color,
wraplength=120,
justify='center',)
self.lb.grid(row=rows_,
column=column_,
sticky='N'+'S'+'W'+'E',
pady=2,
padx=2,
)
self.scroll_frame.grid_rowconfigure(rows_, weight=1)
self.scroll_frame.grid_columnconfigure(column_, weight=1)
self.lb.bind("<MouseWheel>", self._on_mousewheel)
Привет всем.
Собственно, если опустить лишнее, то суть такова:
1) Есть окно, внутри которого некоторая таблица.
2) Таблицу надо скроллить - поэтому доолнительно размещен canvas
3) Внутри canvas - фрейм, на котором размещена таблица, упакована через grid, конечно.
По идее эти две стоки
self.scroll_frame.grid_rowconfigure(rows_, weight=1)
self.scroll_frame.grid_columnconfigure(column_, weight=1)
Должны отвечать за растягивание таблицы, но где то не срастается.
Но увы - нет.
Возможно кто то сталкивался и подскажет как сделать, что бы тянулось?
Весь проект тут не скину - несколько тысяч строк.
Последнее редактирование: