Skip to content

StyleManager 项目分析

项目信息

  • 项目名称: StyleManager
  • 下载链接: StyleManager.rar
  • 分析时间: 2026-03-05

文件结构

StyleManager/
├── Amakrits.vsf
├── AmethystKamri.vsf
├── AquaGraphite.vsf
├── AquaLightSlate.vsf
├── Auric.vsf
├── CalypsoSE.vsf
├── Carbon.vsf
├── CharcoalDarkSlate.vsf
├── CobaltXEMedia.vsf
├── Copper.vsf
├── CopperDark.vsf
├── CyanDusk.vsf
├── CyanNight.vsf
├── EmeraldLightSlate.vsf
├── Extractor_Icon.ico
├── FlatUILight.vsf
├── Glossy.vsf
├── Glow.vsf
├── GoldenGraphite.vsf
├── IcebergClassico.vsf
├── LavenderClassico.vsf
├── Light.vsf
├── LuckyPoint.vsf
├── Luna.vsf
├── MaterialOxfordBlue.vsf
├── MaterialPatternsBlue.vsf
├── MetropolisUIBlack.vsf
├── MetropolisUIBlue.vsf
├── MetropolisUIDark.vsf
├── MetropolisUIGreen.vsf
├── Obsidian.vsf
├── OnyxBlue.vsf
├── Project1.py
├── Project1.xml
├── Radiant.vsf
├── RubyGraphite.vsf
├── SapphireKamri.vsf
├── Silver.vsf
├── Sky.vsf
├── SlateClassico.vsf
├── SmokeyQuartzKamri.vsf
├── TabletDark.vsf
├── TabletLight.vsf
├── TurquoiseGray.vsf
├── Unit1.py
├── Unit1.pydfm
├── Unit1.sct
├── Unit1.sfm
├── Vapor.vsf
├── Windows10.vsf
├── Windows10BlackPearl.vsf
├── Windows10Blue.vsf
├── Windows10BlueWhale.vsf
├── Windows10ClearDay.vsf
├── Windows10Dark.vsf
├── Windows10Green.vsf
├── Windows10Malibu.vsf
├── Windows10Purple.vsf
├── Windows10SlateGray.vsf
├── Windows11_Dark.vsf
├── Windows11_Light.vsf
├── Windows11_Polar_Dark.vsf
├── Windows11_Polar_Light.vsf
├── Zircon.vsf

主程序文件: Project1.py

import sys
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
import sys
from glcl import *
from pathlib import Path

class Form1(Form):

    def __init__(self, owner):
        self.NumberBox1 = NumberBox(self)
        self.TimePicker1 = TimePicker(self)
        self.DatePicker1 = DatePicker(self)
        self.CalendarPicker1 = CalendarPicker(self)
        self.CalendarView1 = CalendarView(self)
        self.SearchBox1 = SearchBox(self)
        self.ToggleSwitch1 = ToggleSwitch(self)
        self.ActivityIndicator1 = ActivityIndicator(self)
        self.Calendar1 = Calendar(self)
        self.SpinEdit1 = SpinEdit(self)
        self.SpinButton1 = SpinButton(self)
        self.Gauge1 = Gauge(self)
        self.ColorGrid1 = ColorGrid(self)
        self.ListBox2 = ListBox(self)
        self.ToolBar1 = ToolBar(self)
        self.StatusBar1 = StatusBar(self)
        self.MonthCalendar1 = MonthCalendar(self)
        self.DateTimePicker1 = DateTimePicker(self)
        self.UpDown1 = UpDown(self)
        self.ProgressBar1 = ProgressBar(self)
        self.TrackBar1 = TrackBar(self)
        self.ColorBox1 = ColorBox(self)
        self.ButtonedEdit1 = ButtonedEdit(self)
        self.LinkLabel1 = LinkLabel(self)
        self.StaticText1 = StaticText(self)
        self.Splitter1 = Splitter(self)
        self.CheckListBox1 = CheckListBox(self)
        self.ScrollBox1 = ScrollBox(self)
        self.Shape1 = Shape(self)
        self.StringGrid1 = StringGrid(self)
        self.MaskEdit1 = MaskEdit(self)
        self.SpeedButton1 = SpeedButton(self)
        self.BitBtn1 = BitBtn(self)
        self.Panel1 = Panel(self)
        self.RadioGroup1 = RadioGroup(self)
        self.GroupBox1 = GroupBox(self)
        self.ScrollBar1 = ScrollBar(self)
        self.ComboBox1 = ComboBox(self)
        self.ListBox1 = ListBox(self)
        self.RadioButton1 = RadioButton(self)
        self.CheckBox1 = CheckBox(self)
        self.Button1 = Button(self)
        self.Memo1 = Memo(self)
        self.Edit1 = Edit(self)
        self.Label1 = Label(self)
        self.PageControl1 = PageControl(self)
        self.LoadProps(os.path.join(os.path.dirname(os.path.abspath(__file__)), "Unit1.pydfm"))
        self.ListBox2.OnClick = self.ListBox2Click
        self.sm = StyleManager(Application)
        # 部署会自动将工程目录下所有vsf皮肤文件一起打包,所以不需要在配置exe中额外添加
        # 部署exe后再次点击运行按钮之前需要在窗体设计器->工程管理器->右键菜单->清除,删除缓存
        # 使用示例
        directory_path = os.path.split(sys.argv[0])[0]
        vsf_files = self.list_vsf_files_recursive(directory_path)
        for file in vsf_files:
            self.sm.LoadFromFile(file)
        for name in self.sm.StyleNames:
            self.ListBox2.Items.Add(name)

    def list_vsf_files_recursive(self, directory):
        """递归列出目录及子目录下所有.vsf后缀的文件"""
        path = Path(directory)
        return list(path.rglob('*.vsf'))

    def ListBox2Click(self, Sender):
        self.sm.SetStyle(self.ListBox2.Items[self.ListBox2.ItemIndex])

设计文件: Unit1.sct

def ListBox2DblClick(Sender): 
def ListBox2Click(Sender): 

设计文件: Unit1.sfm

object Form1: TForm
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 414
  ClientWidth = 898
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -15
  Font.Name = 'Segoe UI'
  Font.Style = []
  TextHeight = 20
  object PageControl1: TPageControl
    Left = 184
    Top = 8
    Width = 705
    Height = 401
    ActivePage = TabSheet1
    TabOrder = 0
    object TabSheet1: TTabSheet
      Caption = 'TabSheet1'
      object Label1: TLabel
        Left = 20
        Top = 17
        Width = 44
        Height = 20
        Caption = 'Label1'
      end
      object Edit1: TEdit
        Left = 100
        Top = 17
        Width = 121
        Height = 28
        TabOrder = 0
        Text = 'Edit1'
      end
      object Memo1: TMemo
        Left = 252
        Top = 17
        Width = 185
        Height = 89
        Lines.Strings = (
          'Memo1')
        TabOrder = 1
      end
      object Button1: TButton
        Left = 20
        Top = 65
        Width = 75
        Height = 25
        Caption = 'Button1'
        TabOrder = 2
      end
      object CheckBox1: TCheckBox
        Left = 20
        Top = 113
        Width = 97
        Height = 17
        Caption = 'CheckBox1'
        TabOrder = 3
      end
      object RadioButton1: TRadioButton
        Left = 20
        Top = 153
        Width = 113
        Height = 17
        Caption = 'RadioButton1'
        TabOrder = 4
      end
      object ListBox1: TListBox
        Left = 20
        Top = 185
        Width = 121
        Height = 97
        ItemHeight = 20
        Items.Strings = (
          'abc'
          'def'
          'ghi')
        TabOrder = 5
      end
      object ComboBox1: TComboBox
        Left = 20
        Top = 305
        Width = 145
        Height = 28
        TabOrder = 6
        Text = 'ComboBox1'
      end
      object ScrollBar1: TScrollBar
        Left = 220
        Top = 121
        Width = 217
        Height = 17
        PageSize = 0
        TabOrder = 7
      end
      object GroupBox1: TGroupBox
        Left = 252
        Top = 169
        Width = 185
        Height = 105
        Caption = 'GroupBox1'
        TabOrder = 8
      end
      object RadioGroup1: TRadioGroup
        Left = 468
        Top = 17
        Width = 185
        Height = 105
        Caption = 'RadioGroup1'
        TabOrder = 9
      end
      object Panel1: TPanel
        Left = 468
        Top = 153
        Width = 185
        Height = 41
        Caption = 'Panel1'
        TabOrder = 10
      end
    end
    object TabSheet2: TTabSheet
      Caption = 'TabSheet2'
      object SpeedButton1: TSpeedButton
        Left = 108
        Top = 20
        Width = 23
        Height = 22
      end
      object Shape1: TShape
        Left = 20
        Top = 209
        Width = 65
        Height = 65
      end
      object Splitter1: TSplitter
        Left = 0
        Top = 0
        Height = 366
        ExplicitLeft = 452
        ExplicitTop = 121
        ExplicitHeight = 100
      end
      object BitBtn1: TBitBtn
        Left = 20
        Top = 17
        Width = 75
        Height = 25
        Caption = 'BitBtn1'
        TabOrder = 0
      end
      object MaskEdit1: TMaskEdit
        Left = 156
        Top = 20
        Width = 121
        Height = 28
        TabOrder = 1
        Text = 'MaskEdit1'
      end
      object StringGrid1: TStringGrid
        Left = 20
        Top = 65
        Width = 320
        Height = 120
        TabOrder = 2
      end
      object ScrollBox1: TScrollBox
        Left = 428
        Top = 20
        Width = 185
        Height = 41
        TabOrder = 3
      end
      object CheckListBox1: TCheckListBox
        Left = 108
        Top = 209
        Width = 121
        Height = 97
        ItemHeight = 20
        TabOrder = 4
      end
      object StaticText1: TStaticText
        Left = 428
        Top = 97
        Width = 77
        Height = 24
        Caption = 'StaticText1'
        TabOrder = 5
      end
      object LinkLabel1: TLinkLabel
        Left = 428
        Top = 145
        Width = 74
        Height = 24
        Caption = 'LinkLabel1'
        TabOrder = 6
      end
      object ButtonedEdit1: TButtonedEdit
        Left = 428
        Top = 193
        Width = 121
        Height = 28
        TabOrder = 7
        Text = 'ButtonedEdit1'
      end
      object ColorBox1: TColorBox
        Left = 428
        Top = 252
        Width = 145
        Height = 22
        TabOrder = 8
      end
    end
    object TabSheet3: TTabSheet
      Caption = 'TabSheet3'
      object TrackBar1: TTrackBar
        Left = 20
        Top = 25
        Width = 150
        Height = 45
        TabOrder = 0
      end
      object ProgressBar1: TProgressBar
        Left = 28
        Top = 81
        Width = 150
        Height = 17
        TabOrder = 1
      end
      object UpDown1: TUpDown
        Left = 196
        Top = 81
        Width = 17
        Height = 25
        TabOrder = 2
      end
      object DateTimePicker1: TDateTimePicker
        Left = 28
        Top = 137
        Width = 186
        Height = 28
        Date = 45740.00000000000000000
        Time = 0.77086190972477200
        TabOrder = 3
      end
      object MonthCalendar1: TMonthCalendar
        Left = 260
        Top = 25
        Width = 218
        Height = 178
        Date = 45740.00000000000000000
        TabOrder = 4
      end
      object StatusBar1: TStatusBar
        Left = 0
        Top = 347
        Width = 697
        Height = 19
        Panels = <>
      end
      object ToolBar1: TToolBar
        Left = 0
        Top = 0
        Width = 697
        Height = 29
        Caption = 'ToolBar1'
        TabOrder = 6
      end
    end
    object TabSheet4: TTabSheet
      Caption = 'TabSheet4'
      object Gauge1: TGauge
        Left = 4
        Top = 9
        Width = 100
        Height = 100
        Progress = 0
      end
      object ColorGrid1: TColorGrid
        Left = 124
        Top = 9
        Width = 100
        Height = 100
        TabOrder = 0
      end
      object SpinButton1: TSpinButton
        Left = 260
        Top = 9
        Width = 20
        Height = 25
        DownGlyph.Data = {
          0E010000424D0E01000000000000360000002800000009000000060000000100
          200000000000D800000000000000000000000000000000000000008080000080
          8000008080000080800000808000008080000080800000808000008080000080
          8000008080000080800000808000000000000080800000808000008080000080
          8000008080000080800000808000000000000000000000000000008080000080
          8000008080000080800000808000000000000000000000000000000000000000
          0000008080000080800000808000000000000000000000000000000000000000
          0000000000000000000000808000008080000080800000808000008080000080
          800000808000008080000080800000808000}
        TabOrder = 1
        UpGlyph.Data = {
          0E010000424D0E01000000000000360000002800000009000000060000000100
          200000000000D800000000000000000000000000000000000000008080000080
          8000008080000080800000808000008080000080800000808000008080000080
          8000000000000000000000000000000000000000000000000000000000000080
          8000008080000080800000000000000000000000000000000000000000000080
          8000008080000080800000808000008080000000000000000000000000000080
          8000008080000080800000808000008080000080800000808000000000000080
          8000008080000080800000808000008080000080800000808000008080000080
          800000808000008080000080800000808000}
      end
      object SpinEdit1: TSpinEdit
        Left = 4
        Top = 145
        Width = 121
        Height = 30
        MaxValue = 0
        MinValue = 0
        TabOrder = 2
        Value = 0
      end
      object Calendar1: TCalendar
        Left = 4
        Top = 209
        Width = 320
        Height = 120
        StartOfWeek = 0
        TabOrder = 3
      end
      object ActivityIndicator1: TActivityIndicator
        Left = 356
        Top = 9
        Animate = True
      end
      object ToggleSwitch1: TToggleSwitch
        Left = 356
        Top = 209
        Width = 77
        Height = 22
        TabOrder = 5
      end
      object SearchBox1: TSearchBox
        Left = 356
        Top = 265
        Width = 121
        Height = 28
        TabOrder = 6
        Text = 'SearchBox1'
      end
    end
    object TabSheet5: TTabSheet
      Caption = 'TabSheet5'
      object CalendarView1: TCalendarView
        Left = 12
        Top = 9
        Date = 45740.00000000000000000
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clWindowText
        Font.Height = -20
        Font.Name = 'Segoe UI'
        Font.Style = []
        HeaderInfo.DaysOfWeekFont.Charset = DEFAULT_CHARSET
        HeaderInfo.DaysOfWeekFont.Color = clWindowText
        HeaderInfo.DaysOfWeekFont.Height = -13
        HeaderInfo.DaysOfWeekFont.Name = 'Segoe UI'
        HeaderInfo.DaysOfWeekFont.Style = []
        HeaderInfo.Font.Charset = DEFAULT_CHARSET
        HeaderInfo.Font.Color = clWindowText
        HeaderInfo.Font.Height = -20
        HeaderInfo.Font.Name = 'Segoe UI'
        HeaderInfo.Font.Style = []
        ParentFont = False
        TabOrder = 0
      end
      object CalendarPicker1: TCalendarPicker
        Left = 324
        Top = 9
        Height = 32
        CalendarHeaderInfo.DaysOfWeekFont.Charset = DEFAULT_CHARSET
        CalendarHeaderInfo.DaysOfWeekFont.Color = clWindowText
        CalendarHeaderInfo.DaysOfWeekFont.Height = -13
        CalendarHeaderInfo.DaysOfWeekFont.Name = 'Segoe UI'
        CalendarHeaderInfo.DaysOfWeekFont.Style = []
        CalendarHeaderInfo.Font.Charset = DEFAULT_CHARSET
        CalendarHeaderInfo.Font.Color = clWindowText
        CalendarHeaderInfo.Font.Height = -20
        CalendarHeaderInfo.Font.Name = 'Segoe UI'
        CalendarHeaderInfo.Font.Style = []
        Color = clWindow
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clGray
        Font.Height = -16
        Font.Name = 'Segoe UI'
        Font.Style = []
        ParentFont = False
        TabOrder = 1
        TextHint = 'select a date'
      end
      object DatePicker1: TDatePicker
        Left = 324
        Top = 57
        Date = 45740.00000000000000000
        DateFormat = 'yyyy/m/d'
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clWindowText
        Font.Height = -16
        Font.Name = 'Segoe UI'
        Font.Style = []
        TabOrder = 2
      end
      object TimePicker1: TTimePicker
        Left = 324
        Top = 105
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clWindowText
        Font.Height = -16
        Font.Name = 'Segoe UI'
        Font.Style = []
        TabOrder = 3
        Time = 45740.80328000000000000
        TimeFormat = 'h:nn'
      end
      object NumberBox1: TNumberBox
        Left = 324
        Top = 169
        Width = 121
        Height = 28
        TabOrder = 4
      end
    end
  end
  object ListBox2: TListBox
    Left = 8
    Top = 8
    Width = 169
    Height = 401
    ItemHeight = 20
    TabOrder = 1
    OnClick = ListBox2Click
  end
end

其他文件

  • Amakrits.vsf
  • AmethystKamri.vsf
  • AquaGraphite.vsf
  • AquaLightSlate.vsf
  • Auric.vsf
  • CalypsoSE.vsf
  • Carbon.vsf
  • CharcoalDarkSlate.vsf
  • CobaltXEMedia.vsf
  • Copper.vsf
  • CopperDark.vsf
  • CyanDusk.vsf
  • CyanNight.vsf
  • EmeraldLightSlate.vsf
  • Extractor_Icon.ico
  • FlatUILight.vsf
  • Glossy.vsf
  • Glow.vsf
  • GoldenGraphite.vsf
  • IcebergClassico.vsf
  • LavenderClassico.vsf
  • Light.vsf
  • LuckyPoint.vsf
  • Luna.vsf
  • MaterialOxfordBlue.vsf
  • MaterialPatternsBlue.vsf
  • MetropolisUIBlack.vsf
  • MetropolisUIBlue.vsf
  • MetropolisUIDark.vsf
  • MetropolisUIGreen.vsf
  • Obsidian.vsf
  • OnyxBlue.vsf
  • Project1.xml
  • Radiant.vsf
  • RubyGraphite.vsf
  • SapphireKamri.vsf
  • Silver.vsf
  • Sky.vsf
  • SlateClassico.vsf
  • SmokeyQuartzKamri.vsf
  • TabletDark.vsf
  • TabletLight.vsf
  • TurquoiseGray.vsf
  • Vapor.vsf
  • Windows10.vsf
  • Windows10BlackPearl.vsf
  • Windows10Blue.vsf
  • Windows10BlueWhale.vsf
  • Windows10ClearDay.vsf
  • Windows10Dark.vsf
  • Windows10Green.vsf
  • Windows10Malibu.vsf
  • Windows10Purple.vsf
  • Windows10SlateGray.vsf
  • Windows11_Dark.vsf
  • Windows11_Light.vsf
  • Windows11_Polar_Dark.vsf
  • Windows11_Polar_Light.vsf
  • Zircon.vsf

详细分析

功能概述

GUI组件演示

使用的组件

  • Form1 (TForm)
  • PageControl1 (TPageControl)
  • TabSheet1 (TTabSheet)
  • Label1 (TLabel)
  • Edit1 (TEdit)
  • Memo1 (TMemo)
  • Button1 (TButton)
  • CheckBox1 (TCheckBox)
  • RadioButton1 (TRadioButton)
  • ListBox1 (TListBox)
  • ComboBox1 (TComboBox)
  • ScrollBar1 (TScrollBar)
  • GroupBox1 (TGroupBox)
  • RadioGroup1 (TRadioGroup)
  • Panel1 (TPanel)
  • TabSheet2 (TTabSheet)
  • SpeedButton1 (TSpeedButton)
  • Shape1 (TShape)
  • Splitter1 (TSplitter)
  • BitBtn1 (TBitBtn)
  • MaskEdit1 (TMaskEdit)
  • StringGrid1 (TStringGrid)
  • ScrollBox1 (TScrollBox)
  • CheckListBox1 (TCheckListBox)
  • StaticText1 (TStaticText)
  • LinkLabel1 (TLinkLabel)
  • ButtonedEdit1 (TButtonedEdit)
  • ColorBox1 (TColorBox)
  • TabSheet3 (TTabSheet)
  • TrackBar1 (TTrackBar)
  • ProgressBar1 (TProgressBar)
  • UpDown1 (TUpDown)
  • DateTimePicker1 (TDateTimePicker)
  • MonthCalendar1 (TMonthCalendar)
  • StatusBar1 (TStatusBar)
  • ToolBar1 (TToolBar)
  • TabSheet4 (TTabSheet)
  • Gauge1 (TGauge)
  • ColorGrid1 (TColorGrid)
  • SpinButton1 (TSpinButton)
  • SpinEdit1 (TSpinEdit)
  • Calendar1 (TCalendar)
  • ActivityIndicator1 (TActivityIndicator)
  • ToggleSwitch1 (TToggleSwitch)
  • SearchBox1 (TSearchBox)
  • TabSheet5 (TTabSheet)
  • CalendarView1 (TCalendarView)
  • CalendarPicker1 (TCalendarPicker)
  • DatePicker1 (TDatePicker)
  • TimePicker1 (TTimePicker)
  • NumberBox1 (TNumberBox)
  • ListBox2 (TListBox)

技术特点

  • 包含52个GUI组件
  • 定义1个事件处理

窗体属性

  • caption: TabSheet5
  • height: 414
  • width: 898

代码分析

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

定义的类: - Form1

定义的方法: - init - list_vsf_files_recursive - ListBox2Click

事件绑定: - self.ListBox2.OnClick = self.ListBox2Click