Skip to content

TPopupMenuDemo 项目分析

项目信息

文件结构

TPopupMenuDemo/
├── Extractor_Icon.ico
├── Project1.py
├── Project1.xml
├── Unit1.py
├── Unit1.pydfm
├── Unit1.sct
├── Unit1.sfm
├── Unit2.py
├── Unit2.pydfm
├── Unit2.sct
├── Unit2.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

import os
from glcl import *
from Unit2 import *

class Form1(Form):

    def __init__(self, owner):
        self.PopupMenu1 = PopupMenu(self)
        self.Button1 = Button(self)
        self.LoadProps(os.path.join(os.path.dirname(os.path.abspath(__file__)), "Unit1.pydfm"))
        self.Button1.OnClick = self.Button1Click
        self.MenuItem5.OnClick = self.MenuItem5Click


    def MenuItem5Click(self, Sender):
        ShowMessage('文件子菜单')

    def Button1Click(self, Sender):
        frm2 = Form2(self)
        frm2.Show()

单元文件: Unit2.py

import os
from glcl import *

class Form2(Form):

    def __init__(self, owner):
        self.LoadProps(os.path.join(os.path.dirname(os.path.abspath(__file__)), "Unit2.pydfm"))

        # 创建一个 TPopupMenu 对象
        self.PopupMenu2 = PopupMenu(self)

        # 创建菜单项
        self.MenuItem1 = MenuItem(self.PopupMenu2)
        self.MenuItem1.Caption = "Option 1"
        self.MenuItem1.OnClick = self.OnMenuItem1Click

        self.MenuItem2 = MenuItem(self.PopupMenu2)
        self.MenuItem2.Caption = "Option 2"

        self.MenuItem3 = MenuItem(self.PopupMenu2)
        self.MenuItem3.Caption = "Option 3"
        self.MenuItem3.OnClick = self.OnMenuItem3Click

        # 将菜单项添加到 TPopupMenu 中
        self.PopupMenu2.Items.Add(self.MenuItem1)
        self.PopupMenu2.Items.Add(self.MenuItem2)

        # 将二级子菜单MenuItem3添加到MenuItem2
        self.MenuItem2.Add(self.MenuItem3)

        # 将 PopupMenu2 赋值给窗体的 PopupMenu 属性
        self.PopupMenu = self.PopupMenu2

    def OnMenuItem1Click(self, Sender):
        # 处理第一个菜单项点击事件
        ShowMessage("Option 1 clicked")

    def OnMenuItem3Click(self, Sender):
        # 处理第二个菜单项点击事件
        ShowMessage("Option 3 clicked")

设计文件: Unit1.sct

def MenuItem5Click(Sender): 
def Button1Click(Sender): 

设计文件: Unit1.sfm

object Form1: TForm
  Left = 0
  Top = 0
  Caption = #21491#38190#31383#20307#24377#20986#33756#21333
  ClientHeight = 148
  ClientWidth = 277
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -15
  Font.Name = 'Segoe UI'
  Font.Style = []
  PopupMenu = PopupMenu1
  TextHeight = 20
  object Button1: TButton
    Left = 40
    Top = 56
    Width = 203
    Height = 25
    Caption = #20195#30721#26041#24335#21019#24314'PopupMenu'
    TabOrder = 0
    OnClick = Button1Click
  end
  object PopupMenu1: TPopupMenu
    Left = 240
    Top = 8
    object MenuItem5: TMenuItem
      Caption = #25991#20214
      OnClick = MenuItem5Click
    end
    object MenuItem4: TMenuItem
      Caption = #32534#36753
      object MenuItem10: TMenuItem
        Caption = #25764#38144
      end
      object MenuItem11: TMenuItem
        Caption = #37325#20570
      end
    end
    object MenuItem3: TMenuItem
      Caption = #26597#25214
    end
    object MenuItem2: TMenuItem
      Caption = #35270#22270
      object MenuItem6: TMenuItem
        Caption = #25918#22823#32534#36753#22120
      end
      object MenuItem7: TMenuItem
        Caption = #20998#21106#32534#36753#22120
        object MenuItem9: TMenuItem
          Caption = 'MenuItem9'
        end
      end
      object MenuItem8: TMenuItem
        Caption = #32553#23567#32534#36753#22120
      end
    end
    object MenuItem1: TMenuItem
      Caption = 'MenuItem1'
    end
  end
end

设计文件: Unit2.sct


设计文件: Unit2.sfm

object Form2: TForm
  Left = 0
  Top = 0
  Caption = 'Form2'
  ClientHeight = 152
  ClientWidth = 251
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -15
  Font.Name = 'Segoe UI'
  Font.Style = []
  TextHeight = 20
end

其他文件

  • Extractor_Icon.ico
  • Project1.xml

详细分析

功能概述

GUI组件演示

使用的组件

  • Form1 (TForm)
  • Button1 (TButton)
  • PopupMenu1 (TPopupMenu)
  • MenuItem5 (TMenuItem)
  • MenuItem4 (TMenuItem)
  • MenuItem10 (TMenuItem)
  • MenuItem11 (TMenuItem)
  • MenuItem3 (TMenuItem)
  • MenuItem2 (TMenuItem)
  • MenuItem6 (TMenuItem)
  • MenuItem7 (TMenuItem)
  • MenuItem9 (TMenuItem)
  • MenuItem8 (TMenuItem)
  • MenuItem1 (TMenuItem)

技术特点

  • 包含14个GUI组件
  • 定义2个事件处理

窗体属性

  • caption: MenuItem1
  • height: 148
  • width: 277

代码分析

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

定义的类: - Form1

定义的方法: - init - MenuItem5Click - Button1Click

事件绑定: - self.Button1.OnClick = self.Button1Click - self.MenuItem5.OnClick = self.MenuItem5Click