(本文在PythonStudio作者 彭云枫老师的指导下对窗体关闭进行了修改)
思路
领导说要一个可以在桌面上任意位置的时钟,而且不能有底色,于是这样想:
1、窗体为无边框
2、在窗体中加PANEL,并将Panel的颜色设置为透明色
3、用定时器定时刷新Label
4、由于没有关闭按钮,就在windows系统托盘中加入图标,右键点击后,进行关闭
5、可以拖动
用pythonestudio写完,发现只用了十行代码
做完后,可以在任意位置显示如下时间
界面设计
在窗口中加入TPanel、TLabel、TTimer、TTrayIcon、TPopupMenu(如果想直接点图标就关闭,也可以不加这个菜单)
设置Form1
- BorderStyle:bsNone
- Ctl3D:False
- Height:170
- Width:420
- TransparentColor:True
- TransparentColorValue:clWhite
设置Panel1
- Align:alClient
- BevelOter:bvNone
- Caption:(空)
- Color:clWhite
设置Label1
- Align:alClient
- Caption:(空)
- Alignment:taCenter
- Font-Size:70
- Font-Name:Russo One(或其他喜欢的字体)
设置Timer1
(全部默认)
设置PopupMenu1
- 双击PopupMenu1,在菜单编辑器中加入新的条目,并改为“关闭时钟”
设置TrayIcon
- Visible:True
- PopupMenu:PopupMenu1
代码
引入日期
在Unit1.py最开始加入:
from datetime import *
定时写入时间
双击定时器
def Timer1Timer(self, Sender):
self.Label1.Caption=datetime.now().strftime("%T")
进入界面后就启动定时器
在初始化代码中加入
def __init__(self, owner):
……
# 启动定时器
self.Timer1.Enabled=True
允许拖动
目前lable控件暂无拖动事件,所以采取对label的鼠标按下和抬起事件来完成
在初始化代码中加入
def __init__(self, owner):
……
self.position_x=0
self.position_y=0
在label的onMouseDown和onMouseUp事件中加入
def Label1MouseDown(self, Sender, Button, Shift, X, Y):
# 取得当前位置
self.position_x=X
self.position_y=Y
def Label1MouseUp(self, Sender, Button, Shift, X, Y):
# 将窗口移到新的位置
self.Left=self.Left+(X-self.position_x)
self.Top=self.Top+(Y-self.position_y)
“关闭时钟”菜单的代码
双击MenuItem1,加入让窗口关闭的“self.Close()”
def MenuItem1Click(self, Sender):
self.Close()
效果如下图:
完整代码
import os
from glcl import *
from datetime import * # 手工加入第1行
class Form1(Form):
def __init__(self, owner):
self.Timer1 = Timer(self)
self.Label1 = Label(self)
self.Panel1 = Panel(self)
self.LoadProps(os.path.join(os.path.dirname(os.path.abspath(__file__)), "Unit1.pydfm"))
self.Label1.OnDblClick = self.Label1DblClick
self.Label1.OnMouseUp = self.Label1MouseUp
self.Label1.OnMouseDown = self.Label1MouseDown
self.Timer1.OnTimer = self.Timer1Timer
# 启动定时器
self.Timer1.Enabled=True # 手工加入第2行
# 窗体位置调整
self.position_x=0 # 手工加入第3行
self.position_y=0 # 手工加入第4行
def Timer1Timer(self, Sender):
# 显示当前时间
self.Label1.Caption=datetime.now().strftime("%T") # 手工加入第5行
def Label1MouseDown(self, Sender, Button, Shift, X, Y):
# 取得当前位置
self.position_x=X # 手工加入第6行
self.position_y=Y # 手工加入第7行
def Label1MouseUp(self, Sender, Button, Shift, X, Y):
# 将窗口移到新的位置
self.Left=self.Left+(X-self.position_x) # 手工加入第8行
self.Top=self.Top+(Y-self.position_y) # 手工加入第9行
def MenuItem1Click(self, Sender):
self.Close() # 手工加入第10行
如果还需要可以调整大小等,可以再增加其他代码