微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

wxPython:选中时网格单元不实现颜色

如何解决wxPython:选中时网格单元不实现颜色

特点:

  1. 在 A 列的任何单元格中单击鼠标右键,我可以选择 3 个项目之一来填充单元格。
  2. 用鼠标右键单击行标签,我想选择开/关选项来更改 A 列单元格的颜色。

使用方法 onoptionsRow代码行“self.myGrid.SetCellValue(self.rowId,'x')”我得到了我想要的。

失败:

  1. 但是使用代码行“self.myGrid.SetCellValue(self.rowId,value)”,如果我离开点击并离开单元格,我只会得到我想要的东西。立>
  2. 相同,没有这样的行。

我需要使用 value 而不是 'x'。

请给我建议,或者给我任何关于这种行为的线索。 代码如下:

import wx
import wx.grid

class myFrame(wx.Frame):
    ID_ADDROW = wx.NewIdRef()
    ID_DELROW = wx.NewIdRef()
    ID_ONOFF = wx.NewIdRef()
    ID1 = wx.NewIdRef()
    ID2 = wx.NewIdRef()
    ID3 = wx.NewIdRef()

    def __init__(self,parent,id=-1):
        wx.Frame.__init__(self,id=-1,size=(600,350))
        self.panel = wx.Panel(self,-1)
        self.nRows = 5
        self.nCol = 4
        self.createGrid(self)

    def createGrid(self,e):
        self.myGrid = wx.grid.Grid(self.panel,-1,style= wx.SUNKEN_BORDER,size=(500,250),pos=(20,20))
        self.myGrid.CreateGrid(self.nRows,self.nCol)
        self.myGrid.Bind(wx.grid.EVT_GRID_LABEL_RIGHT_CLICK,self.onRow_rightClick)
        self.myGrid.Bind(wx.grid.EVT_GRID_CELL_RIGHT_CLICK,self.onRow_rightClick)

    def onRow_rightClick(self,e):
        self.colId = e.GetCol()
        self.rowId = e.GetRow()
        
        popup_menu = wx.Menu()
        if self.colId < 0:
            menus = [(self.ID_ADDROW,"Add Row"),(self.ID_DELROW,"Remove Row"),(self.ID_ONOFF,"On/Off")]
            for menu in menus:
                popup_menu.Append(menu[0],menu[1])
                self.Bind(wx.EVT_MENU,self.onoptionsRow,id=menu[0])
        
        if (self.colId==0) and (self.rowId>=0): 
            menus = [(self.ID1,"item 1"),(self.ID2,"Item 2"),(self.ID3,"Item 3")]
            for menu in menus:
                popup_menu.Append(menu[0],self.RowItemSelect,id=menu[0])
        
        posmenu = (e.GetPosition()[0]+20,e.GetPosition()[1]+20)
        self.PopupMenu(popup_menu,posmenu)
        popup_menu.Destroy()
    
    def onoptionsRow(self,e):
        if e.GetId() == self.ID_ADDROW: 
            self.myGrid.AppendRows(numRows = 1)
        elif e.GetId() == self.ID_ONOFF: 
            value = self.myGrid.GetCellValue(self.rowId,0)
            if value!='': 
                self.myGrid.SetCellValue(self.rowId,value)
                self.myGrid.SetCellTextColour(self.rowId,'red')
                self.myGrid.SetCellBackgroundColour(self.rowId,'yellow')
            else: pass
        self.nRows = self.myGrid.GetNumberRows()

    def RowItemSelect(self,e):
        if e.GetId() == self.ID1: 
            self.myGrid.SetCellValue(self.rowId,self.colId,'Item One')
        elif e.GetId() == self.ID2: 
            self.myGrid.SetCellValue(self.rowId,'Item Two')
        elif e.GetId() == self.ID3: 
            self.myGrid.SetCellValue(self.rowId,'Item Three')

if __name__ == "__main__":
    app = wx.App()
    myFrame(None,wx.ID_ANY).Show()
    app.MainLoop()

我使用的是 Win7、Python 3.7 和 wxPython 4.1.0

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。