如何解决wxPython:选中时网格单元不实现颜色
特点:
- 在 A 列的任何单元格中单击鼠标右键,我可以选择 3 个项目之一来填充单元格。
- 用鼠标右键单击行标签,我想选择开/关选项来更改 A 列单元格的颜色。
使用方法 onoptionsRow 的代码行“self.myGrid.SetCellValue(self.rowId,'x')”我得到了我想要的。
失败:
- 但是使用代码行“self.myGrid.SetCellValue(self.rowId,value)”,如果我离开点击并离开单元格,我只会得到我想要的东西。立>
- 相同,没有这样的行。
我需要使用 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 举报,一经查实,本站将立刻删除。