При отрисовке элементов интерфейса в цикле теряется один элемент
коллеги! Пишу небольшую программу по сбору данных с счетчиков, сейчас делаю интерфейс. Проблема в том при создании данного класса
class RemoteSiteTab(ttk.Frame):
def __init__(self, root, boreholes, site, **kw):
super().__init__(root, **kw)
self.boreholes = boreholes
self.site = site
self.frames = [SensorFrame(self, text=borehole_name) for borehole_name in self.boreholes[site]]
self.tab_columns = 0
self.tab_row = 0
for sensor_frame in self.frames:
if self.tab_columns != 5:
sensor_frame.grid(row=self.tab_row, column=self.tab_columns, padx=10, pady=5)
self.tab_columns += 1
else:
self.tab_columns = 0
self.tab_row += 1
sensor_frame.grid(row=self.tab_row, column=self.tab_columns, padx=10, pady=5)
Должно создаться 12 фреймов, однако по какой-то неизвестной мне причине - создается 11. Один элемент теряется. Я подозреваю, что проблема связана с счетчиками внутри цикла. Ссылка на проект . Если что-то оформил не правильно, заранее извиняюсь.
Ответы (2 шт):
Автор решения: N. Turshiev
→ Ссылка
В таком случае при переходе в блок else после добавления 6 элемента нужно увеличить переменную снова на 1
else:
self.tab_columns = 0
self.tab_row += 1
sensor_frame.grid(row=self.tab_row, column=self.tab_columns, padx=10, pady=5)
self.tab_columns += 1
Автор решения: gil9red
→ Ссылка
Можно сделать проще:
self.column_count = 5
for i, sensor_frame in enumerate(self.frames):
tab_row, tab_columns = divmod(i, self.column_count)
sensor_frame.grid(row=tab_row, column=tab_columns, padx=10, pady=5)
Полностью:
class RemoteSiteTab(ttk.Frame):
def __init__(self, root, boreholes, site, **kw):
super().__init__(root, **kw)
self.boreholes = boreholes
self.site = site
self.frames = [SensorFrame(self, text=borehole_name) for borehole_name in self.boreholes[site]]
self.column_count = 5
for i, sensor_frame in enumerate(self.frames):
tab_row, tab_columns = divmod(i, self.column_count)
sensor_frame.grid(row=tab_row, column=tab_columns, padx=10, pady=5)
PS.
Тот divmod соответствует делению нацело и получению остатка от деления:
tab_row = i // self.column_count
tab_columns = i % self.column_count