wx.lib.agw.ultimatelistctrl.Запретить увеличение высоты элемента - PullRequest
0 голосов
/ 28 декабря 2018

Существует объект UltimateListCtrl

from wx.lib.agw import ultimatelistctrl as ULC

self._ulc_graphs = ULC.UltimateListCtrl(self, size = (-1, 150),
    agwStyle=wx.LC_REPORT|wx.LC_VRULES|wx.LC_HRULES|ULC.ULC_HAS_VARIABLE_ROW_HEIGHT|ULC.ULC_SINGLE_SEL)

Этот список содержит шесть столбцов.Последний столбец «Комментарий».Поскольку этот объект не разрешает прямое редактирование значения элемента в n-м столбце (редактировать можно только 0-й столбец).Было решено вставить кнопку в каждый ряд последнего столбца, щелкнув по которому вылетает диалог с помощью wx.TextCtrl.Пользователь вводит там комментарий, нажимает кнопку ОК, и текст комментария вводится в последний столбец n-го элемента списка.5-й столбец (если с 0):

self._ulc_graphs.InsertColumn(5, 'Комментарий', ULC.ULC_FORMAT_CENTER, 100)

# in the loop I add rows to the list
self._ulc_graphs.SetStringItem (self._ulc_graphs_index, 5, '')
button_comment = wx.Button(self._ulc_graphs, -1, '...', size=(23, 23))
self._ulc_graphs.SetItemWindow(self._ulc_graphs_index, 5, button_comment, False)
button_comment.Bind(wx.EVT_BUTTON, self.OnButtonComment)
self._ulcItem_btn[self._ulc_graphs_index] = button_comment

Результат:

enter image description here

Конечно, вынуждая пользователя писать текст водин ряд - плохая идея.Поэтому я включил стиль wx.TE_MULTILINE для объекта wx.TextCtrl.Но когда я вставляю многострочный текст в ячейку списка, эта ячейка увеличивает свой размер: высота элемента = количество строк в тексте.

Конечно, выглядит ужасно:

enter image description here

Можно ли как-то забанить (увеличение высоты)?

1 Ответ

0 голосов
/ 30 декабря 2018

Возможно, я неправильно понял вашу проблему, но почему бы вам просто не заменить все переводы строк в результате диалога.
Что-то вроде этих строк:

def OnButtonComment(self,event):
    dlg = wx.TextEntryDialog(self, "Comment", caption="Input Data",
            value="", style=wx.OK|wx.CANCEL|wx.TE_MULTILINE)
    dlg.ShowModal()
    txt = dlg.GetValue()
    txt = txt.replace('\n',' ')
    self.list.SetStringItem(self.index, 1, txt)
...