如何在wx.grid(wxpython)中将整行/列设置为只读?

5

以下代码可以将单元格设置为只读,但如何在wx.grid中将整行/列(例如第3列)设置为只读?

import wx.grid as gridlib

myGrid = gridlib.Grid(panel)
myGrid.SetReadOnly(3, 3, True)
2个回答

6

您需要使用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()

这段代码将使第一行只读。

2
不过这个没有经过测试,但是您可以尝试像这样做:
rows = myGrid.GetNumberRows()
cols = myGrid.GetNumberCols()

for r, c in zip(enumerate(rows), enumerate(cols)):
        myGrid.SetReadOnly(r, c, True)

或者,更好的方式是: myGrid.EnableEditing(False) 这将禁用myGrid中的编辑功能。

是的,但如果表格有10000行和5000列呢?会不会很慢? - alwbtc
4
你可以尝试:myGrid.EnableEditing(False) - pedram

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接