【发布时间】:2014-04-17 15:50:39
【问题描述】:
我有几个课程,所以我不想在这里粘贴任何代码(如果可能的话:P)
问题: 我创建了一个创建框架的类,这个框架包含一个面板。 在另一个类中,我已经存储了我的所有设置。
面板上有几个尺寸器和其他属性,它有一个网格。 这个网格是从 x 轴上的序列 1 和 y 轴上的序列 y 构建的。
为了创建我的面板,我将我的代码划分为多个部分(如 buildLeft() buildRight() buildTopRight() 等,这些部分链接到 buildFrame() 方法中的主尺寸器)。
我的网格是在这个类的 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()
【问题讨论】:
-
如果不至少查看 build* 方法的函数体,就无法在此处诊断您的问题。
-
你在 self.sizerTopRight 的什么地方添加东西?
-
抱歉,我似乎忘了从 buildTopRight 方法中添加一些代码。使用此代码,网格似乎确实有效(在某种程度上)。网格已更新,但如果创建了新的更小的网格,则不会删除旧网格。它只是简单地绘制在旧网格上,这意味着如果您从网格中删除一个项目并使用刷新按钮,新的(较小的)网格将放置在旧网格上,留下 1 个“旧”行和列。我仍在尝试删除此列。
标签: python-2.7 wxpython