我有几个课程,所以我不想在这里粘贴任何代码(如果可能的话:P)
问题: 我创建了一个创建框架的类,这个框架包含一个面板。 在另一个课程中,我已存储了所有设置。
在面板上有几个sizer和其他属性,它有一个网格。 该网格从x轴上的序列1和y轴上的序列y构建。
要创建我的面板,我将我的代码划分为多个部分(如buildLeft()buildRight()buildTopRight()等,这些部分链接到buildFrame()方法中的主sizer)。
我的网格是在此类的buildTopRight()部分中创建的。它通过从设置对象检索sequence1和sequence2的值来创建网格,并相应地创建该序列长度的网格。完成此操作后,网格将绑定到topRight部分的sizer。
我还有一个下拉列表(wx.Choice)。如果我从此列表中选择另一个选项,我想从序列1和序列2中删除一个项目。 执行此操作的代码已经生效,我的设置对象中的数据也会相应更改。
但是,我无法重新加载矩阵,因为如果我再次调用buildTopRight()方法,则会重新创建矩阵并将其裁剪到屏幕的左侧,同时保留旧矩阵。
请帮忙。
根据要求,这是构建我的面板的代码:
# import modules
import wx
import wx.grid
import matrixSettings as ms
# Panel class
class ResultatenPanel(wx.Panel):
def __init__(self, parent, id):
wx.Panel.__init__(self, parent, id, style=wx.BORDER_SUNKEN)
# link settings object
self.matSet = self.GetGrandParent().ms
# build the main sizers
self.sizerMain = wx.BoxSizer(wx.HORIZONTAL)
self.sizerMenu = wx.BoxSizer(wx.VERTICAL)
self.sizerRight = wx.BoxSizer(wx.VERTICAL)
self.sizerTopRight = wx.BoxSizer(wx.HORIZONTAL)
self.sizerBotRight = wx.BoxSizer(wx.HORIZONTAL)
# make individual parts
self.buildMenu()
self.buildTopRight()
self.buildBotRight()
self.buildRight()
# build total frame
self.buildFrame()
构建正确的代码(包括右上角和右下角):
def buildRight(self):
self.sizerRight.Add(self.sizerTopRight, 5)
self.sizerRight.Add(self.sizerBotRight, 2)
构建框架的代码:
def buildFrame(self):
self.sizerMain.Add(self.sizerMenu, 1)
self.sizerMain.Add(self.sizerRight, 5, wx.EXPAND)
self.SetSizer(self.sizerMain)
右上角代码:
def buildTopRight(self):
self.grid = wx.grid.Grid(self)
print "buildTopRight called"
if self.matSet.getAlgoritme() == "Needleman-Wunsch":
self.matSet.setSeq1("-" + self.matSet.getSeq1())
self.matSet.setSeq2("-" + self.matSet.getSeq2())
# set grid
self.grid.CreateGrid(len(self.matSet.getSeq2()), len(self.matSet.getSeq1()))
self.grid.SetRowLabelSize(25)
self.grid.DisableDragColSize()
self.grid.DisableDragRowSize()
# set the grid proportions accurately
for x in range(0, len(self.matSet.getSeq1())):
# set the grid proportions accurately
for y in range(0, len(self.matSet.getSeq2())):
self.grid.SetRowSize(y, 25)
self.grid.SetRowLabelValue(y, self.matSet.getSeq2()[y].upper())
self.grid.SetCellValue(y, x, "0")
self.grid.SetReadOnly(y, x, True)
self.grid.SetColSize(x, 25)
self.grid.SetColLabelValue(x, self.matSet.getSeq1()[x].upper())
新添加:
self.sizerTopRight.Clear()
self.sizerTopRight.Add(self.grid, 1)
self.Update()
self.Layout()
答案 0 :(得分:1)
我知道这是一个不太友好的解决方案。 您应该隐藏当前网格并创建一个新网格:
self.sizerTopRight.Hide(self.grid)
self.sizerTopRight.Add(self.new_grid, 1)
self.sizerTopRight.Show(self.new_grid)
self.Layout()