WxPython несколько экземпляров сетки - PullRequest
0 голосов
/ 25 апреля 2010

Кто-нибудь знает, как я могу получить несколько экземпляров одной и той же сетки для отображения на одном кадре? Всякий раз, когда я создаю более одного экземпляра одного и того же объекта, отображение исходного виджета сетки полностью сворачивается, и я не могу ничего с ним сделать.

Для справки вот код:

import wx
import wx.grid as gridlib

class levelGrid(gridlib.Grid):
    def __init__(self, parent, rows, columns):
        gridlib.Grid.__init__(self, parent, -1)
        self.moveTo = None
        self.CreateGrid(rows, columns)

        self.SetDefaultColSize(32)
        self.SetDefaultRowSize(32)
        self.SetColLabelSize(0)
        self.SetRowLabelSize(0)
        self.SetDefaultCellBackgroundColour(wx.BLACK)
        self.EnableDragGridSize(False)


class mainFrame(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, size=(768, 576))
        editor = levelGrid(self, 25, 25)
        panel1 = wx.Panel(editor, -1)

        #vbox = wx.BoxSizer(wx.VERTICAL)
        #vbox.Add(editor, 1, wx.EXPAND | wx.ALL, 5)

        #selector = levelGrid(self, 1, 25)
        #vbox.Add(selector, 1, wx.EXPAND |wx.BOTTOM, 5)

        self.Centre()
        self.Show(True)

app = wx.App()
mainFrame(None, -1, "SLAE")
app.MainLoop()

1 Ответ

1 голос
/ 25 апреля 2010

Вам нужно будет добавить sizer (vbox) на панель, поэтому вы должны сделать это

  1. Создание панели внутри рамки
  2. Создание 2-х уровневых сеток как дочерних для панели
  3. Добавить levelGrids в vbox sizer
  4. Добавить размер панели на панель

, например

class mainFrame(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, size=(768, 576))

        panel = wx.Panel(self, -1)

        editor = levelGrid(panel, 15, 25)
        selector = levelGrid(panel, 1, 25)
        selector.SetDefaultCellBackgroundColour(wx.BLUE)
        vbox = wx.BoxSizer(wx.VERTICAL)
        vbox.Add(editor, 0, wx.EXPAND | wx.ALL, 5)
        vbox.Add(selector, 1, wx.EXPAND |wx.BOTTOM, 5)
        panel.SetSizerAndFit(vbox)

        self.Centre()
        self.Show(True)
...