TTrayIconDemo 项目分析¶
项目信息¶
- 项目名称: TTrayIconDemo
- 下载链接: TTrayIconDemo.rar
- 分析时间: 2026-03-05
文件结构¶
TTrayIconDemo/
├── 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¶
import os
from glcl import *
class Form1(Form):
def __init__(self, owner):
self.Button1 = Button(self)
self.PopupMenu1 = PopupMenu(self)
self.TrayIcon1 = TrayIcon(self)
self.LoadProps(os.path.join(os.path.dirname(os.path.abspath(__file__)), "Unit1.pydfm"))
self.Button1.OnClick = self.Button1Click
self.TrayIcon1.OnClick = self.TrayIcon1Click
self.MenuItem3.OnClick = self.MenuItem3Click
self.MenuItem2.OnClick = self.MenuItem2Click
self.MenuItem1.OnClick = self.MenuItem1Click
self.OnCloseQuery = self.FormCloseQuery
# 在窗口的关闭查询事件当中询问是否最小化
def FormCloseQuery(self, Sender, CanClose):
if Application.MessageBox('确认关闭吗?点击是将退出,点击否将最小化到右下角', '确认', MB_YESNO) != IDYES:
Application.MainFormOnTaskbar = False
self.Hide()
raise ValueError("点击右下角图标将再次显示")
def MenuItem1Click(self, Sender):
# 在任务栏显示图标
Application.MainFormOnTaskbar = True
# 显示窗体
self.Show()
def MenuItem2Click(self, Sender):
# 在任务栏隐藏图标
#Application.MainFormOnTaskbar = False
# 隐藏窗体
self.Hide()
def MenuItem3Click(self, Sender):
self.Close()
def TrayIcon1Click(self, Sender):
Application.MainFormOnTaskbar = True
self.Show()
def Button1Click(self, Sender):
self.TrayIcon1.BalloonFlags = bfInfo
self.TrayIcon1.BalloonHint = '这是提示内容'
self.TrayIcon1.BalloonTitle = '这是提示标题'
self.TrayIcon1.BalloonTimeout = 5000 # 气泡时间
# Windows 7 可能无法发挥作用
self.TrayIcon1.ShowBalloonHint() # 显示气泡提示
设计文件: Unit1.sct¶
def FormCloseQuery(Sender, CanClose):
def MenuItem1Click(Sender):
def MenuItem2Click(Sender):
def MenuItem3Click(Sender):
def TrayIcon1Click(Sender):
def Button1Click(Sender):
设计文件: Unit1.sfm¶
object Form1: TForm
Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 218
ClientWidth = 311
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -15
Font.Name = 'Segoe UI'
Font.Style = []
OnCloseQuery = FormCloseQuery
TextHeight = 20
object Button1: TButton
Left = 64
Top = 104
Width = 163
Height = 25
Caption = #24377#20986#27668#27873
TabOrder = 0
OnClick = Button1Click
end
object TrayIcon1: TTrayIcon
Animate = True
BalloonFlags = bfInfo
PopupMenu = PopupMenu1
Visible = True
OnClick = TrayIcon1Click
Left = 208
Top = 152
end
object PopupMenu1: TPopupMenu
Left = 248
Top = 152
object MenuItem1: TMenuItem
Caption = #26174#31034
OnClick = MenuItem1Click
end
object MenuItem2: TMenuItem
Caption = #38544#34255
OnClick = MenuItem2Click
end
object MenuItem3: TMenuItem
Caption = #36864#20986
OnClick = MenuItem3Click
end
end
end
其他文件¶
- Extractor_Icon.ico
- Project1.xml
详细分析¶
功能概述¶
GUI组件演示
使用的组件¶
- Form1 (TForm)
- Button1 (TButton)
- TrayIcon1 (TTrayIcon)
- PopupMenu1 (TPopupMenu)
- MenuItem1 (TMenuItem)
- MenuItem2 (TMenuItem)
- MenuItem3 (TMenuItem)
技术特点¶
- 包含7个GUI组件
- 定义5个事件处理
窗体属性¶
- caption: #36864#20986
- height: 218
- width: 311
代码分析¶
导入的模块: - import os - from glcl import *
定义的类: - Form1
定义的方法: - init - FormCloseQuery - MenuItem1Click - MenuItem2Click - MenuItem3Click - TrayIcon1Click - Button1Click
事件绑定: - self.Button1.OnClick = self.Button1Click - self.TrayIcon1.OnClick = self.TrayIcon1Click - self.MenuItem3.OnClick = self.MenuItem3Click - self.MenuItem2.OnClick = self.MenuItem2Click - self.MenuItem1.OnClick = self.MenuItem1Click