python定时关机可视化窗口

目录

一、准备

 二、正文

1、窗口部分

三、后台部分

 1、关于cmd的shutdown

2、python代码

3、封装为exe

三、全部代码

四、总结


一、准备

在此命题中,需要做到两件事:1.要实现定时关机

                                                   2.要实现可视化窗口,降低使用门槛

所以,在此,我使用了tkinker用于搭建可视化窗口,当然,如果您没有,可以使用pip安装。

而要实现定时关机,可以借用cmd的shutdown。

效果如下:


 二、正文

1、窗口部分

首先,需要先导入tkinter库,用于创造窗口,还有os库,用于调用cmd。

from tkinter import *
import os

接下来,便是创建窗口。

window = Tk()
window.geometry('200x200')#设置窗口大小
window.title('定时关机 by sraxc')#设置窗口标题
l1 = Label(window,text="时间(分钟)")#标签
l1.pack()
e1 = Entry(window)#输入框
e1.pack()



window.mainloop()

我在创建窗口的同时,也规定了标签和输入框的简称,尤其是输入框的简称,在后面是有用的。

现在我需要做一个按钮,当我输入时长之后,可以点击按钮去执行。

button = Button(window,text ='start',command = func1)#按钮
button.pack()

在这里,我引用了一个函数func1(),但是,请注意,command = func1()是错误的(别问我是怎么知道的)。

当然,我们还需要一个单选框,用于选择将要运行的命令:

radio = IntVar()
R1 = Radiobutton(window, text="关机", variable=radio, value=1, command=input)
R1.pack( anchor = W )
R2 = Radiobutton(window, text="重启", variable=radio, value=2, command=input)
R2.pack( anchor = W )
R3 = Radiobutton(window, text="睡眠", variable=radio, value=3, command=input)
R3.pack( anchor = W)
R4 = Radiobutton(window, text="取消定时关机", variable=radio, value=4, command=input)
R4.pack( anchor = W)

 至此,我们关于GUI界面的设计就告一段落了。


三、后台部分

 1、关于cmd的shutdown

我们打开cmd,输入shutdown /?,可以看到:

C:\User>shutdown /?
用法: shutdown [/i | /l | /s | /sg | /r | /g | /a | /p | /h | /e | /o] [/hybrid] [/soft] [/fw] [/f]
    [/m \\computer][/t xxx][/d [p|u:]xx:yy [/c "comment"]]

    没有参数   显示帮助。这与键入 /? 是一样的。
    /?         显示帮助。这与不键入任何选项是一样的。
    /i         显示图形用户界面(GUI)。
               这必须是第一个选项。
    /l         注销。这不能与 /m 或 /d 选项一起使用。
    /s         关闭计算机。
    /sg        关闭计算机。在下一次启动时,如果启用了
               自动重启登录,则将自动登录并锁定上次交互用户。
               登录后,重启任何已注册的应用程序。
    /r         完全关闭并重启计算机。
    /g         完全关闭并重启计算机。重新启动系统后,
               如果启用了自动重启登录,则将自动登录并
               锁定上次交互用户。
               登录后,重启任何已注册的应用程序。
    /a         中止系统关闭。
               这只能在超时期间使用。
               与 /fw 结合使用,以清除任何未完成的至固件的引导。
    /p         关闭本地计算机,没有超时或警告。
               可以与 /d 和 /f 选项一起使用。
    /h         休眠本地计算机。
               可以与 /f 选项一起使用。
    /hybrid    执行计算机关闭并进行准备以快速启动。
               必须与 /s 选项一起使用。
    /fw        与关闭选项结合使用,使下次启动转到
               固件用户界面。
    /e         记录计算机意外关闭的原因。
    /o         转到高级启动选项菜单并重新启动计算机。
               必须与 /r 选项一起使用。
    /m \\computer 指定目标计算机。
    /t xxx     将关闭前的超时时间设置为 xxx 秒。
               有效范围是 0-315360000 (10 年),默认值为 30。
               如果超时期限大于 0,则 /f 参数为
               /f 参数。
    /c "comment" 注释重启或关闭的原因。
               最多允许 512 个字符。
    /f         强制关闭正在运行的应用程序而不事先警告用户。
               当大于 0 的值为
 时,隐含 /f 参数               则默示为 /f 参数。
    /d [p|u:]xx:yy  提供重新启动或关闭的原因。
               p 指示重启或关闭是计划内的。
               u 指示原因是用户定义的。
               如果未指定 p 和 u,则
重新启动或关闭               是计划外的。
               xx 是主要原因编号(小于 256 的正整数)。
               yy 是次要原因编号(小于 65536 的正整数)。

我们可以看到,如果我们想使电脑关机,就是shutdown -s,定时便是-t

例如:

C:\User>shutdown -s -t 3600

2、python代码

接下来就是规定函数func1()和input()了:

因为cmd中shutdown -t所识别的为秒数,为了方便使用,所以我们需要将输入的数字(分钟)乘以60以便获取秒数。

def func1():
    p = int(e1.get())*60
    time = " -t " + str(p)
    os.system(str("shutdown ") + syst + time)

而func1()中的syst变量则是由input()中获得。但是,如果这样做,func1()便无法继承到syst:

#此处为错误示范
def input():
    a = int(radio.get())
    if a == 1:
        syst = '-s'
    elif a == 2:
        syst = '-r'
    elif a == 3:
        syst = '-l'
    elif a == 4:
        os.system('shutdown -a')

因为我们规定的syst只是函数内变量,所以,我们需要用到golbal,正确代码如下:

def input():
    a = int(radio.get())
    global syst
    if a == 1:
        syst = '-s'
    elif a == 2:
        syst = '-r'
    elif a == 3:
        syst = '-l'
    elif a == 4:
        os.system('shutdown -a')

此时syst便能被func1()正确识别。

3、封装为exe

在此处,我们可以使用pyinstaller进行封装。

过程如下:

1.在cmd中安装(默认您已经安装python较新版)

pip install pyinstaller

2.cd到.py文件所在目录

D:\>cd D:\1
D:\1>

 3.进行封装

pyinstaller -F -w 文件名.py

 -F为封装为一整个exe文件,-w为不显示命令行界面(在本示例中适用)

4.完成

打包好的exe文件就在dist文件夹里


三、全部代码

from tkinter import *
import os

window = Tk()
window.geometry('300x200')
window.title('定时关机 by sraxc')
l1 = Label(window,text="时间(分钟)")
l1.pack()
e1 = Entry(window)
e1.pack()

def input():
    a = int(radio.get())
    global syst
    if a == 1:
        syst = '-s'
    elif a == 2:
        syst = '-r'
    elif a == 3:
        syst = '-l'
    elif a == 4:
        os.system('shutdown -a')

def func1():
    p = int(e1.get())*60
    time = " -t " + str(p)
    os.system(str("shutdown ") + syst + time)

button = Button(window,text ='start',command = func1)
button.pack()

radio = IntVar()
R1 = Radiobutton(window, text="关机", variable=radio, value=1, command=input)
R1.pack( anchor = W )
R2 = Radiobutton(window, text="重启", variable=radio, value=2, command=input)
R2.pack( anchor = W )
R3 = Radiobutton(window, text="睡眠", variable=radio, value=3, command=input)
R3.pack( anchor = W)
R4 = Radiobutton(window, text="取消定时关机", variable=radio, value=4, command=input)
R4.pack( anchor = W)

window.mainloop()

四、总结

至此,或许你也已经学会了。

当然,这个代码还可以继续添加其他功能,使其更加完善。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值