Skip to content

EduStringGridDemo 项目分析

项目信息

文件结构

EduStringGridDemo/
├── Extractor_Icon.ico
├── Project1.py
├── Project1.xml
├── Unit1.py
├── Unit1.pydfm
├── Unit1.sct
├── Unit1.sfm

主程序文件: Project1.py

from glcl import *
from Unit1 import *

def main():
    Application.Initialize()
    Application.Title = 'Project1'
    Application.MainFormOnTaskbar = True
    Application.Icon.LoadFromFile(os.path.join(os.path.dirname(os.path.abspath(__file__)), "Extractor_Icon.ico"))
    MainForm = Form1(Application)
    MainForm.Show()
    FreeConsole()
    Application.Run()
    MainForm.Free()

if __name__ == '__main__':
    main()

单元文件: Unit1.py

# Powered By Python Studio, The best Python GUI IDE to download from glsite.com.
import os
from glcl import *

class Form1(Form):
    """
    主窗体类,继承自Form基类
    包含网格控件和各种操作按钮
    """

    def __init__(self, owner):
        """
        初始化窗体
        """
        self.SuperGrid1 = EduStringGrid(self)        # 字符串网格控件
        self.Panel1 = Panel(self)                    # 面板容器
        self.Button1 = Button(self)                  # 按钮1:清除合并单元格
        self.Button2 = Button(self)                  # 按钮2:合并单元格
        self.Button3 = Button(self)                  # 按钮3:填充测试数据
        self.Button4 = Button(self)                  # 按钮4:自动调整列宽
        self.Button6 = Button(self)                  # 按钮6:打印预览
        self.Button7 = Button(self)                  # 按钮7:打印设置
        self.Button8 = Button(self)                  # 按钮8:打印
        self.Button12 = Button(self)                 # 按钮12:保存到文件
        self.AColEdit = Edit(self)                   # 编辑框:A列索引输入
        self.BColEdit = Edit(self)                   # 编辑框:B列索引输入
        self.Button13 = Button(self)                 # 按钮13:移动列
        self.Button14 = Button(self)                 # 按钮14:交换列
        self.Button15 = Button(self)                 # 按钮15:删除行
        self.Button16 = Button(self)                 # 按钮16:删除列
        self.Button17 = Button(self)                 # 按钮17:交换行
        self.Button18 = Button(self)                 # 按钮18:移动行
        self.Button19 = Button(self)                 # 按钮19:插入行
        self.Button20 = Button(self)                 # 按钮20:插入列
        self.Button21 = Button(self)                 # 按钮21:清空网格
        self.Button22 = Button(self)                 # 按钮22:设置查看列
        self.Button23 = Button(self)                 # 按钮23:跳转到指定位置
        self.Button25 = Button(self)                 # 按钮25:从文件加载
        self.FGEdit = Edit(self)                     # 编辑框:文件格式输入
        self.Label1 = Label(self)                    # 标签控件
        self.OpenDialog1 = OpenDialog(self)          # 打开文件对话框
        self.SaveDialog1 = SaveDialog(self)          # 保存文件对话框
        self.Button26 = Button(self)                 # 按钮26:自动调整指定列宽
        self.Button27 = Button(self)                 # 按钮27:填充大量测试数据
        self.DeleteRowEdit = Edit(self)              # 编辑框:删除/插入行索引
        self.DeleteColEdit = Edit(self)              # 编辑框:删除/插入列索引
        self.GDCheckBox = CheckBox(self)             # 复选框:是否包含标题

        # 从文件加载窗体属性配置
        self.LoadProps(os.path.join(os.path.dirname(os.path.abspath(__file__)), "Unit1.pydfm"))

        # 绑定按钮点击事件到对应的处理方法
        self.Button27.OnClick = self.Button27Click   # 绑定按钮27点击事件
        self.Button23.OnClick = self.Button23Click   # 绑定按钮23点击事件
        self.Button22.OnClick = self.Button22Click   # 绑定按钮22点击事件
        self.Button21.OnClick = self.Button21Click   # 绑定按钮21点击事件
        self.Button20.OnClick = self.Button20Click   # 绑定按钮20点击事件
        self.Button16.OnClick = self.Button16Click   # 绑定按钮16点击事件
        self.Button19.OnClick = self.Button19Click   # 绑定按钮19点击事件
        self.Button15.OnClick = self.Button15Click   # 绑定按钮15点击事件
        self.Button18.OnClick = self.Button18Click   # 绑定按钮18点击事件
        self.Button13.OnClick = self.Button13Click   # 绑定按钮13点击事件
        self.Button17.OnClick = self.Button17Click   # 绑定按钮17点击事件
        self.Button14.OnClick = self.Button14Click   # 绑定按钮14点击事件
        self.Button25.OnClick = self.Button25Click   # 绑定按钮25点击事件
        self.Button12.OnClick = self.Button12Click   # 绑定按钮12点击事件
        self.Button8.OnClick = self.Button8Click     # 绑定按钮8点击事件
        self.Button7.OnClick = self.Button7Click     # 绑定按钮7点击事件
        self.Button6.OnClick = self.Button6Click     # 绑定按钮6点击事件
        self.Button4.OnClick = self.Button4Click     # 绑定按钮4点击事件
        self.Button26.OnClick = self.Button26Click   # 绑定按钮26点击事件
        self.Button1.OnClick = self.Button1Click     # 绑定按钮1点击事件
        self.Button2.OnClick = self.Button2Click     # 绑定按钮2点击事件
        self.Button3.OnClick = self.Button3Click     # 绑定按钮3点击事件


    def Button3Click(self, Sender):
        """
        按钮3点击事件:用乘法表数据填充网格
        设置网格为1001行11列,每个单元格填充i*j的结果
        """
        self.supergrid1.RowCount = 1001      # 设置行数为1001
        self.supergrid1.ColCount = 11        # 设置列数为11

        # 双重循环填充网格数据
        for i in range(0, 1001):             # 遍历所有行 (0-1000)
            for j in range(0, 11):           # 遍历所有列 (0-10)
                self.supergrid1.SetCells(j, i, str(i*j))  # 设置单元格值为i*j


    def Button2Click(self, Sender):
        """
        按钮2点击事件:合并指定单元格
        演示三种不同的单元格合并方式
        """
        self.supergrid1.MergeCells(2,0,4,0,True)   # 合并第2-4列第0行,True表示合并内容
        self.supergrid1.MergeCells(2,1,4,1,False)  # 合并第2-4列第1行,False表示不合并内容
        self.supergrid1.MergeCells(6,0,8,0,False)  # 合并第6-8列第0行
        self.supergrid1.Refresh()                   # 刷新网格显示


    def Button1Click(self, Sender):
        """
        按钮1点击事件:清除所有合并的单元格
        """
        self.supergrid1.MergeClear()          # 清除所有单元格合并状态


    def Button26Click(self, Sender):
        """
        按钮26点击事件:自动调整指定列的宽度
        """
        self.supergrid1.AutoSizeCol(0, 10)    # 自动调整第0列宽度,边距为10


    def Button4Click(self, Sender):
        """
        按钮4点击事件:自动调整所有列宽
        确保最后一列至少有64像素宽度
        """
        self.supergrid1.AutoSizeColumns(True, 10)  # 自动调整所有列宽,边距为10
        # 检查最后一列宽度,如果小于64则设置为64
        if self.supergrid1.ColWidths[self.supergrid1.ColCount-1] < 64:
            self.supergrid1.ColWidths[self.supergrid1.ColCount-1] = 64


    def Button6Click(self, Sender):
        """
        按钮6点击事件:显示打印预览
        """
        self.supergrid1.Preview(True)         # 打开打印预览对话框


    def Button7Click(self, Sender):
        """
        按钮7点击事件:显示打印设置
        """
        self.supergrid1.PrintSetup(True)      # 打开打印设置对话框


    def Button8Click(self, Sender):
        """
        按钮8点击事件:执行打印
        """
        self.supergrid1.Print(True)           # 执行打印操作


    def Button12Click(self, Sender):
        """
        按钮12点击事件:保存网格数据到文件
        使用保存文件对话框选择保存路径
        """
        if self.SaveDialog1.Execute():        # 显示保存文件对话框
            # 保存网格数据到指定文件,使用指定的文件格式
            self.supergrid1.SaveToFile(self.SaveDialog1.FileName, self.FGEdit.Text[0])


    def Button25Click(self, Sender):
        """
        按钮25点击事件:从文件加载网格数据
        使用打开文件对话框选择文件
        """
        if self.OpenDialog1.Execute():        # 显示打开文件对话框
            # 从指定文件加载网格数据,使用指定的文件格式
            self.supergrid1.LoadFromFile(self.OpenDialog1.FileName, self.FGEdit.Text[0])


    def Button14Click(self, Sender):
        """
        按钮14点击事件:交换两列的位置
        从编辑框获取列索引并验证有效性
        """
        ACol = -1
        BCol = -1
        try:
            # 从编辑框获取列索引
            if self.AColEdit.Text.strip() != '':
                ACol = int(self.AColEdit.Text)
            if self.BColEdit.Text.strip() != '':
                BCol = int(self.BColEdit.Text)
            # 验证索引有效性并执行交换
            if (ACol >= 0) and (ACol <= self.supergrid1.ColCount-1) and\
               (BCol >= 0) and (BCol <= self.supergrid1.ColCount-1):
                self.supergrid1.SwapColumns(ACol,BCol)  # 交换两列
        except:
            pass  # 忽略所有异常


    def Button17Click(self, Sender):
        """
        按钮17点击事件:交换两行的位置
        从编辑框获取行索引并验证有效性
        """
        ARow = -1
        BRow = -1
        try:
            # 从编辑框获取行索引
            if self.AColEdit.Text.strip() != '':
                ARow = int(self.AColEdit.Text)
            if self.BColEdit.Text.strip() != '':
                BRow = int(self.BColEdit.Text)
            # 验证索引有效性并执行交换
            if (ARow >= 0) and (ARow <= self.supergrid1.RowCount-1) and\
               (BRow >= 0) and (BRow <= self.supergrid1.RowCount-1):
                self.supergrid1.SwapRows(ARow,BRow)  # 交换两行
        except:
            pass  # 忽略所有异常


    def Button13Click(self, Sender):
        """
        按钮13点击事件:移动列到新位置
        从编辑框获取列索引并验证有效性
        """
        ACol = -1
        BCol = -1
        try:
            # 从编辑框获取列索引
            if self.AColEdit.Text.strip() != '':
                ACol = int(self.AColEdit.Text)
            if self.BColEdit.Text.strip() != '':
                BCol = int(self.BColEdit.Text)
            # 验证索引有效性并执行移动
            if (ACol >= 0) and (ACol <= self.supergrid1.ColCount-1) and\
               (BCol >= 0) and (BCol <= self.supergrid1.ColCount-1):
                self.supergrid1.MoveColumn(ACol,BCol)  # 移动列
        except:
            pass  # 忽略所有异常


    def Button18Click(self, Sender):
        """
        按钮18点击事件:移动行到新位置
        从编辑框获取行索引并验证有效性
        """
        ARow = -1
        BRow = -1
        try:
            # 从编辑框获取行索引
            if self.AColEdit.Text.strip() != '':
                ARow = int(self.AColEdit.Text)
            if self.BColEdit.Text.strip() != '':
                BRow = int(self.BColEdit.Text)
            # 验证索引有效性并执行移动
            if (ARow >= 0) and (ARow <= self.supergrid1.RowCount-1) and\
               (BRow >= 0) and (BRow <= self.supergrid1.RowCount-1):
                self.supergrid1.MoveRow(ARow,BRow)  # 移动行
        except:
            pass  # 忽略所有异常


    def Button15Click(self, Sender):
        """
        按钮15点击事件:删除指定行
        从编辑框获取行索引并验证有效性
        """
        ARow = -1
        try:
            # 从编辑框获取行索引
            if self.DeleteRowEdit.Text.strip() != '':
                ARow = int(self.DeleteRowEdit.Text)
            # 验证索引有效性并执行删除
            if (ARow >= 0) and (ARow <= self.supergrid1.RowCount-1):
                self.supergrid1.DeleteRow(ARow)  # 删除行
        except:
            pass  # 忽略所有异常


    def Button19Click(self, Sender):
        """
        按钮19点击事件:在指定位置插入新行
        从编辑框获取行索引并验证有效性
        """
        ARow = -1
        try:
            # 从编辑框获取行索引
            if self.DeleteRowEdit.Text.strip() != '':
                ARow = int(self.DeleteRowEdit.Text)
            # 验证索引有效性并执行插入
            if (ARow >= 0) and (ARow <= self.supergrid1.RowCount-1):
                self.supergrid1.InsertRow(ARow)  # 插入行
        except:
            pass  # 忽略所有异常


    def Button16Click(self, Sender):
        """
        按钮16点击事件:删除指定列
        从编辑框获取列索引并验证有效性
        """
        ACol = -1
        try:
            # 从编辑框获取列索引
            if self.DeleteColEdit.Text.strip() != '':
                ACol = int(self.DeleteColEdit.Text)
            # 验证索引有效性并执行删除
            if (ACol >= 0) and (ACol <= self.supergrid1.ColCount-1):
                self.supergrid1.DeleteColumn(ACol)  # 删除列
        except:
            pass  # 忽略所有异常


    def Button20Click(self, Sender):
        """
        按钮20点击事件:在指定位置插入新列
        从编辑框获取列索引并验证有效性
        """
        ACol = -1
        try:
            # 从编辑框获取列索引
            if self.DeleteColEdit.Text.strip() != '':
                ACol = int(self.DeleteColEdit.Text)
            # 验证索引有效性并执行插入
            if (ACol >= 0) and (ACol <= self.supergrid1.ColCount-1):
                self.supergrid1.InsertColumn(ACol)  # 插入列
        except:
            pass  # 忽略所有异常


    def Button21Click(self, Sender):
        """
        按钮21点击事件:清空网格内容
        根据复选框决定是否包含标题
        """
        self.supergrid1.Clear(self.GDCheckBox.Checked)  # 清空网格


    def Button22Click(self, Sender):
        """
        按钮22点击事件:设置查看列
        """
        self.supergrid1.SetViewCol()          # 设置查看列


    def Button23Click(self, Sender):
        """
        按钮23点击事件:跳转到指定单元格
        """
        self.supergrid1.DoGoto()              # 执行跳转操作
        self.supergrid1.SetFocus()            # 设置焦点到网格


    def Button27Click(self, Sender):
        """
        按钮27点击事件:填充大量测试数据(50001行11列)
        用于性能测试或大数据量演示
        """
        self.supergrid1.RowCount = 50001      # 设置行数为50001
        self.supergrid1.colcount = 11         # 设置列数为11

        # 双重循环填充大量数据
        for i in range(0, 50001):             # 遍历所有行 (0-50000)
            for j in range(0, 11):            # 遍历所有列 (0-10)
                self.supergrid1.SetCells(j, i, str(i*j))  # 设置单元格值为i*j

设计文件: Unit1.sct

def Button3Click(Sender): 
def Button2Click(Sender): 
def Button1Click(Sender): 
def Button24Click(Sender): 
def Button26Click(Sender): 
def Button4Click(Sender): 
def Button6Click(Sender): 
def Button7Click(Sender): 
def Button8Click(Sender): 
def Button12Click(Sender): 
def Button25Click(Sender): 
def Button14Click(Sender): 
def Button17Click(Sender): 
def Button13Click(Sender): 
def Button18Click(Sender): 
def Button15Click(Sender): 
def Button19Click(Sender): 
def Button16Click(Sender): 
def Button20Click(Sender): 
def Button21Click(Sender): 
def Button22Click(Sender): 
def Button23Click(Sender): 
def Button27Click(Sender): 

设计文件: Unit1.sfm

object Form1: TForm
  Left = 0
  Top = 0
  Caption = 'EduStringGrid '#28436#31034
  ClientHeight = 562
  ClientWidth = 872
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  WindowState = wsMaximized
  TextHeight = 13
  object SuperGrid1: TEduStringGrid
    Left = 0
    Top = 143
    Width = 872
    Height = 419
    Align = alClient
    Ctl3D = False
    FixedRows = 2
    Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goDrawFocusSelected]
    ParentCtl3D = False
    TabOrder = 0
    BevelStyle = cbNone
    BlockName = 'test'
    AlignmentVert = taMiddle
    AlignmentHorz = taCenter
    ClickSorting = True
    ClickDown = False
    ProportionalScrollBars = False
    ExtendedKeys = True
    MultiLines = True
  end
  object Panel1: TPanel
    Left = 0
    Top = 0
    Width = 872
    Height = 143
    Align = alTop
    BevelOuter = bvNone
    Font.Charset = GB2312_CHARSET
    Font.Color = clWindowText
    Font.Height = -12
    Font.Name = #23435#20307
    Font.Style = []
    ParentFont = False
    TabOrder = 1
    object Label1: TLabel
      Left = 292
      Top = 38
      Width = 60
      Height = 13
      AutoSize = False
      Caption = #20998#21106#31526#21495#65306
    end
    object Button1: TButton
      Left = 125
      Top = 7
      Width = 64
      Height = 25
      Caption = #28165#38500#34701#21512
      TabOrder = 0
      OnClick = Button1Click
    end
    object Button2: TButton
      Left = 81
      Top = 7
      Width = 43
      Height = 25
      Caption = #34701#21512'2'
      TabOrder = 1
      OnClick = Button2Click
    end
    object Button3: TButton
      Left = 6
      Top = 7
      Width = 71
      Height = 25
      Caption = #22635#20805#25968#25454'1'
      TabOrder = 2
      OnClick = Button3Click
    end
    object Button4: TButton
      Left = 292
      Top = 7
      Width = 105
      Height = 25
      Caption = #33258#21160#23485#24230#25152#26377#21015
      TabOrder = 3
      OnClick = Button4Click
    end
    object Button6: TButton
      Left = 403
      Top = 7
      Width = 84
      Height = 25
      Caption = 'printpreview'
      TabOrder = 4
      OnClick = Button6Click
    end
    object Button7: TButton
      Left = 494
      Top = 7
      Width = 72
      Height = 25
      Caption = 'PrintSetup'
      TabOrder = 5
      OnClick = Button7Click
    end
    object Button8: TButton
      Left = 572
      Top = 7
      Width = 49
      Height = 25
      Caption = 'print'
      TabOrder = 6
      OnClick = Button8Click
    end
    object Button12: TButton
      Left = 7
      Top = 33
      Width = 199
      Height = 25
      Caption = #23548#20986#20026#20854#20182#25991#20214'('#27604#22914'HTML,DOC,TXT)'
      TabOrder = 7
      OnClick = Button12Click
    end
    object AColEdit: TEdit
      Left = 7
      Top = 67
      Width = 24
      Height = 20
      TabOrder = 8
      Text = '4'
    end
    object BColEdit: TEdit
      Left = 33
      Top = 67
      Width = 24
      Height = 20
      TabOrder = 9
      Text = '6'
    end
    object Button13: TButton
      Left = 165
      Top = 65
      Width = 49
      Height = 25
      Caption = #21015#31227#21160
      TabOrder = 10
      OnClick = Button13Click
    end
    object Button14: TButton
      Left = 59
      Top = 65
      Width = 54
      Height = 25
      Caption = #21015#20132#25442
      TabOrder = 11
      OnClick = Button14Click
    end
    object Button15: TButton
      Left = 282
      Top = 65
      Width = 49
      Height = 25
      Caption = #21024#38500#34892
      TabOrder = 12
      OnClick = Button15Click
    end
    object Button16: TButton
      Left = 420
      Top = 65
      Width = 53
      Height = 25
      Caption = #21024#38500#21015
      TabOrder = 13
      OnClick = Button16Click
    end
    object DeleteRowEdit: TEdit
      Left = 380
      Top = 67
      Width = 24
      Height = 20
      TabOrder = 14
      Text = '10'
    end
    object DeleteColEdit: TEdit
      Left = 521
      Top = 67
      Width = 20
      Height = 20
      TabOrder = 15
      Text = '8'
    end
    object Button17: TButton
      Left = 112
      Top = 65
      Width = 51
      Height = 25
      Caption = #34892#20132#25442
      TabOrder = 16
      OnClick = Button17Click
    end
    object Button18: TButton
      Left = 213
      Top = 65
      Width = 49
      Height = 25
      Caption = #34892#31227#21160
      TabOrder = 17
      OnClick = Button18Click
    end
    object Button19: TButton
      Left = 330
      Top = 65
      Width = 48
      Height = 25
      Caption = #25554#20837#34892
      TabOrder = 18
      OnClick = Button19Click
    end
    object Button20: TButton
      Left = 472
      Top = 65
      Width = 47
      Height = 25
      Caption = #25554#20837#21015
      TabOrder = 19
      OnClick = Button20Click
    end
    object Button21: TButton
      Left = 559
      Top = 65
      Width = 62
      Height = 25
      Caption = #28165#38500#25968#25454
      TabOrder = 20
      OnClick = Button21Click
    end
    object GDCheckBox: TCheckBox
      Left = 623
      Top = 69
      Width = 97
      Height = 17
      Caption = #28165#38500#22266#23450#34892
      TabOrder = 21
    end
    object Button22: TButton
      Left = 7
      Top = 94
      Width = 83
      Height = 25
      Caption = #35774#32622#26174#31034#21015
      TabOrder = 22
      OnClick = Button22Click
    end
    object Button23: TButton
      Left = 95
      Top = 94
      Width = 71
      Height = 25
      Caption = #31934#30830#26597#25214
      TabOrder = 23
      OnClick = Button23Click
    end
    object Button25: TButton
      Left = 208
      Top = 33
      Width = 75
      Height = 25
      Caption = #20174#25991#20214#35013#20837
      TabOrder = 24
      OnClick = Button25Click
    end
    object FGEdit: TEdit
      Left = 351
      Top = 38
      Width = 15
      Height = 20
      TabOrder = 25
      Text = ';'
    end
    object Button26: TButton
      Left = 192
      Top = 7
      Width = 91
      Height = 25
      Caption = #21333#21015#33258#21160#23485#24230
      TabOrder = 26
      OnClick = Button26Click
    end
    object Button27: TButton
      Left = 171
      Top = 94
      Width = 123
      Height = 25
      Caption = #22823#25968#25454#27979#35797'(50001'#26465')'
      TabOrder = 27
      OnClick = Button27Click
    end
  end
  object OpenDialog1: TOpenDialog
    Left = 448
    Top = 232
  end
  object SaveDialog1: TSaveDialog
    Left = 480
    Top = 232
  end
end

其他文件

  • Extractor_Icon.ico
  • Project1.xml

详细分析

功能概述

网格组件演示

使用的组件

  • Form1 (TForm)
  • SuperGrid1 (TEduStringGrid)
  • Panel1 (TPanel)
  • Label1 (TLabel)
  • Button1 (TButton)
  • Button2 (TButton)
  • Button3 (TButton)
  • Button4 (TButton)
  • Button6 (TButton)
  • Button7 (TButton)
  • Button8 (TButton)
  • Button12 (TButton)
  • AColEdit (TEdit)
  • BColEdit (TEdit)
  • Button13 (TButton)
  • Button14 (TButton)
  • Button15 (TButton)
  • Button16 (TButton)
  • DeleteRowEdit (TEdit)
  • DeleteColEdit (TEdit)
  • Button17 (TButton)
  • Button18 (TButton)
  • Button19 (TButton)
  • Button20 (TButton)
  • Button21 (TButton)
  • GDCheckBox (TCheckBox)
  • Button22 (TButton)
  • Button23 (TButton)
  • Button25 (TButton)
  • FGEdit (TEdit)
  • Button26 (TButton)
  • Button27 (TButton)
  • OpenDialog1 (TOpenDialog)
  • SaveDialog1 (TSaveDialog)

技术特点

  • 包含34个GUI组件
  • 定义22个事件处理

窗体属性

  • caption: #22823#25968#25454#27979#35797'(50001'#26465')
  • height: 562
  • width: 872

代码分析

导入的模块: - import os - from glcl import *

定义的类: - Form1

定义的方法: - init - Button3Click - Button2Click - Button1Click - Button26Click - Button4Click - Button6Click - Button7Click - Button8Click - Button12Click - Button25Click - Button14Click - Button17Click - Button13Click - Button18Click - Button15Click - Button19Click - Button16Click - Button20Click - Button21Click - Button22Click - Button23Click - Button27Click

事件绑定: - self.Button27.OnClick = self.Button27Click # 绑定按钮27点击事件 - self.Button23.OnClick = self.Button23Click # 绑定按钮23点击事件 - self.Button22.OnClick = self.Button22Click # 绑定按钮22点击事件 - self.Button21.OnClick = self.Button21Click # 绑定按钮21点击事件 - self.Button20.OnClick = self.Button20Click # 绑定按钮20点击事件 - self.Button16.OnClick = self.Button16Click # 绑定按钮16点击事件 - self.Button19.OnClick = self.Button19Click # 绑定按钮19点击事件 - self.Button15.OnClick = self.Button15Click # 绑定按钮15点击事件 - self.Button18.OnClick = self.Button18Click # 绑定按钮18点击事件 - self.Button13.OnClick = self.Button13Click # 绑定按钮13点击事件 - self.Button17.OnClick = self.Button17Click # 绑定按钮17点击事件 - self.Button14.OnClick = self.Button14Click # 绑定按钮14点击事件 - self.Button25.OnClick = self.Button25Click # 绑定按钮25点击事件 - self.Button12.OnClick = self.Button12Click # 绑定按钮12点击事件 - self.Button8.OnClick = self.Button8Click # 绑定按钮8点击事件 - self.Button7.OnClick = self.Button7Click # 绑定按钮7点击事件 - self.Button6.OnClick = self.Button6Click # 绑定按钮6点击事件 - self.Button4.OnClick = self.Button4Click # 绑定按钮4点击事件 - self.Button26.OnClick = self.Button26Click # 绑定按钮26点击事件 - self.Button1.OnClick = self.Button1Click # 绑定按钮1点击事件 - self.Button2.OnClick = self.Button2Click # 绑定按钮2点击事件 - self.Button3.OnClick = self.Button3Click # 绑定按钮3点击事件