次のコードはセルを読み取り専用に設定しますが、行/列全体 (たとえば 3 列目) を wx.grid で読み取り専用に設定するにはどうすればよいですか?
import wx.grid as gridlib
myGrid = gridlib.Grid(panel)
myGrid.SetReadOnly(3, 3, True)
これを行うには、GridCellAttr を使用する必要があります。簡単な例を次に示します。
import wx
import wx.grid as gridlib
########################################################################
class MyForm(wx.Frame):
""""""
#----------------------------------------------------------------------
def __init__(self):
"""Constructor"""
wx.Frame.__init__(self, parent=None, title="A Simple Grid")
panel = wx.Panel(self)
myGrid = gridlib.Grid(panel)
myGrid.CreateGrid(12, 8)
# get the cell attribute for the top left row
editor = myGrid.GetCellEditor(0,0)
attr = gridlib.GridCellAttr()
attr.SetReadOnly(True)
myGrid.SetRowAttr(0, attr)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(myGrid, 1, wx.EXPAND)
panel.SetSizer(sizer)
if __name__ == "__main__":
app = wx.App(False)
frame = MyForm().Show()
app.MainLoop()
このコードは、最初の行を読み取り専用にします。
テストされていませんが、次のようなことはできませんでした:
rows = myGrid.GetNumberRows()
cols = myGrid.GetNumberCols()
for r, c in zip(enumerate(rows), enumerate(cols)):
myGrid.SetReadOnly(r, c, True)
または、さらに良い:
myGrid.EnableEditing(False)