wxpython 导入一个Excel文件给wxgrid表格,实现用botton点击,新增一行,并把几个wxtextCtrl值按对应的列标签输入给该行对应列的单元,另一个botton实现改变后wxgrid表格的值存回这个Excel文件中
时间: 2024-02-13 22:03:04 浏览: 19
好的,这是一个比较具体的问题,需要一步步来实现。首先,我们需要安装 `wxpython` 和 `openpyxl` 库,前者用于构建 GUI 界面,后者用于读写 Excel 文件。
```python
import wx
import wx.grid
import openpyxl
```
然后,我们需要定义一个窗口类 `MyFrame`,并在其中添加一个 `wxgrid` 表格和两个 `wxbutton` 按钮,分别用于新增行和保存修改。在 `__init__` 方法中,我们需要初始化表格、按钮、文本框等控件,并将它们添加到窗口中。
```python
class MyFrame(wx.Frame):
def __init__(self, parent, title):
super(MyFrame, self).__init__(parent, title=title, size=(800, 600))
# 初始化表格
self.grid = wx.grid.Grid(self)
self.grid.CreateGrid(0, 3)
self.grid.SetColLabelValue(0, "姓名")
self.grid.SetColLabelValue(1, "年龄")
self.grid.SetColLabelValue(2, "性别")
# 初始化按钮
self.btn_add = wx.Button(self, label="新增行")
self.btn_save = wx.Button(self, label="保存修改")
# 初始化文本框
self.txt_name = wx.TextCtrl(self)
self.txt_age = wx.TextCtrl(self)
self.txt_gender = wx.TextCtrl(self)
# 添加控件到窗口
box = wx.BoxSizer(wx.VERTICAL)
box.Add(self.grid, 1, wx.EXPAND)
box.AddSpacer(10)
box.Add(self.btn_add, 0, wx.ALIGN_RIGHT)
box.AddSpacer(10)
box.Add(wx.StaticText(self, label="姓名"), 0, wx.ALIGN_LEFT)
box.Add(self.txt_name, 0, wx.EXPAND)
box.Add(wx.StaticText(self, label="年龄"), 0, wx.ALIGN_LEFT)
box.Add(self.txt_age, 0, wx.EXPAND)
box.Add(wx.StaticText(self, label="性别"), 0, wx.ALIGN_LEFT)
box.Add(self.txt_gender, 0, wx.EXPAND)
box.AddSpacer(10)
box.Add(self.btn_save, 0, wx.ALIGN_RIGHT)
self.SetSizer(box)
```
接下来,我们需要在按钮的点击事件中实现新增行和保存修改的功能。在 `OnAddRow` 方法中,我们需要获取文本框中的值,并将其添加到表格中。在 `OnSave` 方法中,我们需要将表格中的值保存到 Excel 文件中。
```python
class MyFrame(wx.Frame):
def __init__(self, parent, title):
super(MyFrame, self).__init__(parent, title=title, size=(800, 600))
# 初始化表格
self.grid = wx.grid.Grid(self)
self.grid.CreateGrid(0, 3)
self.grid.SetColLabelValue(0, "姓名")
self.grid.SetColLabelValue(1, "年龄")
self.grid.SetColLabelValue(2, "性别")
# 初始化按钮
self.btn_add = wx.Button(self, label="新增行")
self.btn_save = wx.Button(self, label="保存修改")
# 初始化文本框
self.txt_name = wx.TextCtrl(self)
self.txt_age = wx.TextCtrl(self)
self.txt_gender = wx.TextCtrl(self)
# 添加控件到窗口
box = wx.BoxSizer(wx.VERTICAL)
box.Add(self.grid, 1, wx.EXPAND)
box.AddSpacer(10)
box.Add(self.btn_add, 0, wx.ALIGN_RIGHT)
box.AddSpacer(10)
box.Add(wx.StaticText(self, label="姓名"), 0, wx.ALIGN_LEFT)
box.Add(self.txt_name, 0, wx.EXPAND)
box.Add(wx.StaticText(self, label="年龄"), 0, wx.ALIGN_LEFT)
box.Add(self.txt_age, 0, wx.EXPAND)
box.Add(wx.StaticText(self, label="性别"), 0, wx.ALIGN_LEFT)
box.Add(self.txt_gender, 0, wx.EXPAND)
box.AddSpacer(10)
box.Add(self.btn_save, 0, wx.ALIGN_RIGHT)
self.SetSizer(box)
# 绑定事件
self.btn_add.Bind(wx.EVT_BUTTON, self.OnAddRow)
self.btn_save.Bind(wx.EVT_BUTTON, self.OnSave)
def OnAddRow(self, event):
# 获取文本框中的值
name = self.txt_name.GetValue()
age = self.txt_age.GetValue()
gender = self.txt_gender.GetValue()
# 添加到表格中
row = self.grid.GetNumberRows()
self.grid.InsertRows(row)
self.grid.SetCellValue(row, 0, name)
self.grid.SetCellValue(row, 1, age)
self.grid.SetCellValue(row, 2, gender)
def OnSave(self, event):
# 打开 Excel 文件
wb = openpyxl.load_workbook("data.xlsx")
ws = wb.active
# 清空表格
rows = ws.max_row
cols = ws.max_column
for i in range(rows, 1, -1):
ws.delete_rows(i)
# 将表格中的值写入 Excel 文件
for i in range(self.grid.GetNumberRows()):
row = i + 1
ws.cell(row=row, column=1).value = self.grid.GetCellValue(i, 0)
ws.cell(row=row, column=2).value = self.grid.GetCellValue(i, 1)
ws.cell(row=row, column=3).value = self.grid.GetCellValue(i, 2)
# 保存 Excel 文件
wb.save("data.xlsx")
```
最后,我们可以创建一个 `wxapp` 应用程序,并显示窗口。
```python
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, title="Excel 表格编辑器")
frame.Show(True)
return True
if __name__ == "__main__":
app = MyApp()
app.MainLoop()
```
这样,一个简单的 Excel 表格编辑器就完成了。当点击新增行按钮时,程序会在表格中新增一行,并将文本框中的值按对应的列标签输入给该行对应列的单元;当点击保存修改按钮时,程序会将表格中的值写入 Excel 文件中。