pycharm用wx建立界面和wx.grid建立表格存放学生成绩的相关代码
时间: 2024-02-22 13:56:31 浏览: 71
Python编译软件pycharm-community-2022.2.3.zip
以下是使用wx建立界面和wx.grid建立表格存放学生成绩的示例代码:
```python
import wx
import wx.grid as gridlib
class ScoreTable(gridlib.Grid):
def __init__(self, parent):
gridlib.Grid.__init__(self, parent, -1)
self.CreateGrid(5, 3)
self.SetColLabelValue(0, "姓名")
self.SetColLabelValue(1, "语文")
self.SetColLabelValue(2, "数学")
self.SetRowLabelValue(0, "1")
self.SetRowLabelValue(1, "2")
self.SetRowLabelValue(2, "3")
self.SetRowLabelValue(3, "4")
self.SetRowLabelValue(4, "5")
for row in range(5):
for col in range(3):
self.SetCellValue(row, col, "")
self.AutoSizeColumns()
class MainFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title="学生成绩表格", size=(400, 300))
panel = wx.Panel(self, -1)
# 创建表格对象
table = ScoreTable(panel)
# 创建添加行按钮
add_row_button = wx.Button(panel, label="添加行")
add_row_button.Bind(wx.EVT_BUTTON, self.OnAddRow)
# 创建删除行按钮
del_row_button = wx.Button(panel, label="删除行")
del_row_button.Bind(wx.EVT_BUTTON, self.OnDelRow)
# 创建布局管理器
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(table, 1, wx.EXPAND)
sizer.Add(add_row_button, 0, wx.BOTTOM | wx.RIGHT, 5)
sizer.Add(del_row_button, 0, wx.RIGHT, 5)
panel.SetSizer(sizer)
def OnAddRow(self, event):
table = self.FindWindowByName("score_table")
table.AppendRows(1)
def OnDelRow(self, event):
table = self.FindWindowByName("score_table")
selection = table.GetSelectedRows()
if len(selection) == 0:
wx.MessageBox("请先选择要删除的行!", "错误", wx.OK | wx.ICON_ERROR)
else:
for i in reversed(selection):
table.DeleteRows(i)
if __name__ == "__main__":
app = wx.App()
frame = MainFrame()
frame.Show()
app.MainLoop()
```
在该示例代码中,我们定义了一个名为`ScoreTable`的表格类,继承自`wx.grid.Grid`。在表格类的构造函数中,我们首先调用了`CreateGrid`方法来创建一个5行3列的表格。然后,我们通过`SetColLabelValue`和`SetRowLabelValue`方法来设置表格的列标题和行标题。接着,我们使用两个循环语句来遍历整个表格,使用`SetCellValue`方法将每个单元格的值设置为空字符串。最后,我们通过`AutoSizeColumns`方法来自动调整表格中列的宽度。
在`MainFrame`类的构造函数中,我们首先创建了一个`wx.Panel`对象。然后,我们创建了一个`ScoreTable`对象,并将它添加到了`panel`中。接着,我们创建了两个按钮,分别用于添加行和删除行。我们通过`Bind`方法将这两个按钮的单击事件与`OnAddRow`和`OnDelRow`方法绑定。最后,我们通过`wx.BoxSizer`来设置`panel`的布局管理器。
在`OnAddRow`方法中,我们通过`FindWindowByName`方法获取了名为`score_table`的表格对象,并调用了`AppendRows`方法来添加一行。
在`OnDelRow`方法中,我们首先获取了选中的行,并判断是否有选中的行。如果没有选中的行,则弹出一个错误提示框。否则,我们使用`DeleteRows`方法来删除选中的行。需要注意的是,由于删除行会改变表格的行号,因此我们需要按照相反的顺序删除选中的行。
请注意,以上示例代码只是一个简单的演示,实际应用中需要根据具体需求进行相应的修改和优化。
阅读全文