菜狗子的学习记录

02
Jan

开机后台自启-休息提醒小工具(TKinter)

# remind.py
# -*- coding: utf-8 -*-  
import time, sys  
from Tkinter import *  


mydelaymin = 60 #窗口提示的延迟时间,以分钟计  
  
#------------------def-------------------  
def showMessage():  
    #show reminder message window  
    root = Tk()  #建立根窗口  
    #root.minsize(500, 200)   #定义窗口的大小  
    #root.maxsize(1000, 400)  #不过定义窗口这个功能我没有使用  
    root.withdraw()  #hide window  
    #获取屏幕的宽度和高度,并且在高度上考虑到底部的任务栏,为了是弹出的窗口在屏幕中间  
    screenwidth = root.winfo_screenwidth()  
    screenheight = root.winfo_screenheight() - 100   
    root.resizable(False,False)  #不可拖动窗口
    #添加组件  
    root.title("天呐 ಥ_ಥ ")  
    frame = Frame(root, relief=RIDGE, borderwidth=2)  
    frame.pack(fill=BOTH, expand=1) #pack() 放置组件若没有则组件不会显示  
    #窗口显示的文字、并设置字体、字号  
    label = Label(frame, text="你已经坐了一个小时啦(•̀ᴗ•́)و ̑̑ 快起来站一下~", \
        font=root)  
    label.pack(fill=BOTH, expand=1)  
    #按钮的设置  
    button = Button(frame, text="知道啦", font= root, fg="red", width=6, height=2, command=root.destroy)  
    button.pack(side=BOTTOM)  
  
    root.update_idletasks()  
    root.deiconify() #now the window size was calculated  
    root.withdraw() #hide the window again 防止窗口出现被拖动的感觉 具体原理如下 
    root.geometry('%sx%s+%s+%s' % (root.winfo_width() + 10, root.winfo_height() + 10,   
        (screenwidth - root.winfo_width())/2, (screenheight - root.winfo_height())/2))  
    root.deiconify()
    root.iconbitmap('C:\Users\A1in\Desktop\python-test\ease-remind\\t.ico')  
    root.mainloop()  
  
#showMessage()  

  
while True:  
    time.sleep(mydelaymin*60) #参数为秒  
    showMessage()  

TKinter GUI

代码用到的模块是python自带的模块TKinter, 利用该模块创建一个GUI程序的步骤如下:

  • 导入 Tkinter 模块
  • 创建控件
  • 指定这个控件的 master, 即这个控件属于哪一个
  • 告诉 GM(geometry manager) 有一个控件产生了

py2exe

每次用命令行执行命令太麻烦了, 所以想把remind.py文件转化为.exe可执行文件

  • 安装py2exe
  • 新建一个setup.py 把remind.py的绝对路径写进去
# setup.py
from distutils.core import setup
import py2exe
setup(windows=["C:\Users\A1in\Desktop\python-test\\ease-remind\\remind.py"])
  • 在命令行运行 会在当前目录生成dist和build文件夹 .exe可执行文件在dist文件夹里
python setup.py py2exe

注意在编译的时候setup的参数一定得是windows,这样编译出来的exe,就是后台运行的。


开机自启动

生成.exe文件后还是需要自己手动点击,所以我们利用以下方式形成开机自启:

  • 在->运行中输入 shell.Startup
  • 进入开机自启动的文件夹 C:\XXX\XXX\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
  • 新建一个快捷方式,快捷方式的键入对象方式地址为/dist/remind.exe的位置

补充

考虑到windows还有个任务栏,我把窗口适当靠屏幕上方显示了50像素

在计算出大小之后,如果没有隐藏而直接去改变位置,会给用户一个窗口被拖动的视觉。

没显示出窗口前,geometry manager不会真正去计算窗口大小,这也是为什么这里坑爹要先显示一下,再调整位置。

如果窗口是fix size,事情就简单许多,直接用root.geometry()方法去改变位置即可,上面的很多代码都是多余的。


每天到公司 打开电脑 就不管啦 等每个小时它提醒我起来站一下QAQ