Ограничить размер wxListCtrl в wxpython - PullRequest
2 голосов
/ 13 апреля 2011

Я хочу ограничить размер блока управления списком. Давайте возьмем следующий код:

import wx

class Students(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, size=(380, 230))

        hbox = wx.BoxSizer(wx.HORIZONTAL)
        panel = wx.Panel(self, -1)

        self.list = wx.ListCtrl(panel, -1, style=wx.LC_REPORT)
        self.list.InsertColumn(0, 'name')
        self.list.InsertColumn(1, 'age')        

        hbox.Add(self.list, 1,wx.EXPAND)
        panel.SetSizer(hbox)

        self.Centre()
        self.Show(True)

app = wx.App()
Students(None, -1, 'studs')
app.MainLoop()

Если я сделаю пропорцию горизонтального бокса = 0, как это:

hbox.Add(self.list, 0,wx.EXPAND)

тогда возникает другая проблема. Проблема с пропорцией = 1 заключается в том, что после столбца «Возраст» много пустого пространства, которое блок управления списком сгорает для третьего столбца, который не существует. Проблема с пропорцией = 0 в том, что она слишком короткая по ширине. Я хочу отобразить блок управления списком только со столбцами «Имя» и «Возраст» и сохранить оставшееся пространство. Как мне это сделать?

Ответы [ 2 ]

4 голосов
/ 14 апреля 2011

Вы можете установить ширину элемента управления списком вручную, а затем установить пропорцию на 0.

Ширина столбцов может быть установлена ​​вручную:

import wx

class MainWindow(wx.Frame):
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)
        self.panel = wx.Panel(self)
        self.panel.SetBackgroundColour(wx.GREEN)

        self.list = wx.ListCtrl(self, style=wx.LC_REPORT, size=(200, -1))
        column_size = self.list.GetSize()[0] / 2 - 2
        self.list.InsertColumn(0, 'Name')
        self.list.InsertColumn(1, 'Age')   
        self.list.SetColumnWidth(0, column_size)
        self.list.SetColumnWidth(1, column_size)

        self.sizer = wx.BoxSizer()
        self.sizer.Add(self.list, proportion=0, flag=wx.EXPAND)
        self.sizer.Add(self.panel, proportion=1, flag=wx.EXPAND)

        self.SetSizerAndFit(self.sizer)
        self.SetSize((600, 400))       
        self.Show()

app = wx.App(False)
win = MainWindow(None)
app.MainLoop()

Или может использоваться ListCtrlAutoWidthMixin:

import wx
import wx.lib.mixins.listctrl as listmix

class TestListCtrl(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin):
    def __init__(self, *args, **kwargs):
        wx.ListCtrl.__init__(self, *args, **kwargs)
        listmix.ListCtrlAutoWidthMixin.__init__(self)

class MainWindow(wx.Frame):
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)
        self.panel = wx.Panel(self)
        self.panel.SetBackgroundColour(wx.GREEN)

        self.list = TestListCtrl(self, style=wx.LC_REPORT, size=(200, -1))
        self.list.InsertColumn(0, 'Name')
        self.list.InsertColumn(1, 'Age')   

        self.sizer = wx.BoxSizer()
        self.sizer.Add(self.list, proportion=0, flag=wx.EXPAND)
        self.sizer.Add(self.panel, proportion=1, flag=wx.EXPAND)

        self.SetSizerAndFit(self.sizer)
        self.SetSize((600, 400))       
        self.Show()

app = wx.App(False)
win = MainWindow(None)
app.MainLoop()
0 голосов
/ 13 апреля 2011

Не используйте wx.EXPAND, если вы не хотите изменять размер элемента управления.Вы также можете поместить проставку в горизонтальный классификатор сразу после элемента управления списком и вместо этого сделать его расширенным.Тогда проставка займет все доступное пространство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...