,所以我不想在這裏粘貼任何代碼,我有幾類(如果可能的話:P)wxPython中刷新的網格,面板
問題: 我創建它創建了一個框架類,並且這個框架包含一個面板。 在另一個課程中,我存儲了所有的設置。
在面板上有幾個尺寸大小和其他屬性,它有一個網格。 此網格是從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)
top top code:
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()
有沒有辦法在這裏診斷您的問題沒有看到函數體爲您構建*在非常最低的方法。 –
你在self.sizerTopRight中添加什麼東西? – triggertoast
對不起,我忘記了從buildTopRight方法中添加一些代碼。使用這段代碼,網格似乎工作(以某種方式)。網格已更新,但如果創建了新的更小的網格,則舊網格不會被刪除。它簡單地繪製在舊的一個上,這意味着如果您從網格中移除一個項目並使用刷新按鈕,新的(較小的)網格將放置在舊的網格之上,並排列一個「舊」行和列。我仍然試圖刪除此列。 – MrFronk