46-wxpython 4 使用 grid 展示表格


轉載:https://blog.csdn.net/soslinken/article/details/79024938#%E4%BD%BF%E7%94%A8%E6%A0%B7%E4%BE%8B  

  wxpython 4 使用 grid 展示表格

 版權聲明:本文為博主原創文章,如需轉載請在文章中注明“轉載”並在文章開頭附上本博客鏈接。 https://blog.csdn.net/soslinken/article/details/79024938

文章導航

 

 

wx.grid.Grid

Grid這個控件主要是用於顯示和編輯表格數據。 
這里寫圖片描述 
控件樣式在OS X 系統下顯示樣式

使用樣例

import wx
import wx.grid

class GridFrame(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__(self, parent)

        # Create a wxGrid object
        grid = wx.grid.Grid(self, -1)

        # Then we call CreateGrid to set the dimensions of the grid
        # (100 rows and 10 columns in this example)
        grid.CreateGrid(100, 10)

        # We can set the sizes of individual rows and columns
        # in pixels
        grid.SetRowSize(0, 60)
        grid.SetColSize(0, 120)

        # And set grid cell contents as strings
        grid.SetCellValue(0, 0, 'wxGrid is good')

        # We can specify that some cells are read.only
        grid.SetCellValue(0, 3, 'This is read.only')
        grid.SetReadOnly(0, 3)

        # Colours can be specified for grid cell contents
        grid.SetCellValue(3, 3, 'green on grey')
        grid.SetCellTextColour(3, 3, wx.GREEN)
        grid.SetCellBackgroundColour(3, 3, wx.LIGHT_GREY)

        # We can specify the some cells will store numeric
        # values rather than strings. Here we set grid column 5
        # to hold floating point values displayed with width of 6
        # and precision of 2
        grid.SetColFormatFloat(5, 6, 2)
        grid.SetCellValue(0, 6, '3.1415')

        self.Show()


if __name__ == '__main__':

    app = wx.App(0)
    frame = GridFrame(None)
    app.MainLoop()

  

這個demo 是從官方文檔中摘取的 
英語好的親們 ,直接看代碼上的注釋就好了,在此只把一些關鍵方法提出來說明一下。

CreateGrid 方法

可以使用該方法初始化一個固定行數、列數的Grid界面。行列數創建后仍可以使用方法增加行列。

 grid.CreateGrid(100, 10)
  • 1

SetCellValue 方法

可以使用SetCellValue 將指定行列的單元格內的值進行設置。

grid.SetCellValue(0, 0, 'wxGrid is good')
  • 1

SetRowLabelValue 、 SetColLabelValue

可以用於改變行標簽、列標簽。樣例界面中,行標簽 1、2、3等, 列標簽A、B、C等。 
SetRowLabelValue第一個參數代表的是當前第幾行 
SetColLabelValue第一個參數代表的是當前第幾列

grid.SetRowLabelValue(0,"1") //第一行標簽 1 grid.SetColLabelValue(0,"A") //第一列標簽 A
  • 1
  • 2

以上幾個方法就可以做一個簡單的數據展示grid了!

事件

關於grid有幾個關鍵的事件說明一下

事件 說明
EVT_GRID_CELL_CHANGING 單元格內數據發生變化中
EVT_GRID_CELL_CHANGED 單元格內數據發生變化后
EVT_GRID_CELL_LEFT_CLICK 左鍵單擊單元格
EVT_GRID_CELL_LEFT_DCLICK 左鍵雙擊單元格
EVT_GRID_CELL_RIGHT_CLICK 右鍵單擊單元格
EVT_GRID_CELL_RIGHT_DCLICK 右鍵雙擊單元格
EVT_GRID_SELECT_CELL 選中單元格事件

綁定事件代碼

self.Bind(wx.EVT_GRID_CELL_CHANGED,self.cellChanged,self.grid)
  • 1

第一個參數:事件 
第二個參數:響應方法 
第三個參數:事件對象

響應方法需要特別提示一下: 
方法必須有一個event 參數 不然無法響應。

def cellChanged(self , event) : //todo write event response code 
  • 1
  • 2

疑問

在文檔中,有個說明,就是在大型數據展示的時候,可以使用setTable(),方法設置一個wx.grid.GridTableBase的自定義子類。這樣就可以做到數據與界面邏輯分離。

但是我寫了一個GridTableBase的子類,setTable后並沒有什么反應。不知道是怎么回事。只能是使用setCellValue 方法 循環將數據放置在grid上。

有大牛知道這個東西在 wxPython 4 中怎么使用嗎。可以給小弟一個demo參考一下嗎?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM