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