今天写python的一个定时关机小脚本遇到的问题

import wx
import os
import sys
import time
import threading

def daojishi(ti):
while ti>0:
h=int(ti/3600)
m=int((ti-h*3600)/60)
stvtext=str(h)+”小时” +str(m)+”分钟”+str(ti%60)+”秒”
stbtv.SetLabel(stvtext)
time.sleep(1)
ti=ti-1
os.system(‘shutdown -s -f -t 1’)
print (u’关机啦。。。’)

def shutdown(event):
#print (str(seconds) + u’ 秒后将会关机…’)
seconds=int(tcbt1.GetValue())*3600+ int(tcbt2.GetValue())*60
ti=seconds
t1=threading.Thread(target=daojishi,args=(ti,))
threads.append(t1)
for t in threads:
t.setDaemon(True)
t.start()
#time.sleep(seconds)

#本来是个很简单的小脚本,但是在设定好倒计时之后,确定按钮按下后便一直被占用,当我拖拽程序或者做任何其他事情的时候都会失去响应,只能终止进程,但是假设我鼠标不做任何事,程序倒计时就会自己走完并关机,后来查询问题所在应该是单线程问题,按钮按下之后程序会一直处于这个状态直到进程结束,但是此时我要是点击其他按钮或者做移动程序框等事情就会导致崩溃,因此修改了一下写了一个多线程的代码,小问题就解决了

threads = []

app=wx.App()
win=wx.Frame(None,title=”Shut Down your Computer!!!”,size=(410,335))
bkg=wx.Panel(win)

loadbtn=wx.Button(bkg,label=”确定”)
loadbtn.Bind(wx.EVT_BUTTON,shutdown)
cancelbtn=wx.Button(bkg,label=”取消”)
stbt1=wx.StaticText(bkg,label=’时’)
stbt2=wx.StaticText(bkg,label=’分’)
stbt3=wx.StaticText(bkg,label=’定时关机设置!!’)
tcbt1=wx.TextCtrl(bkg)
tcbt2=wx.TextCtrl(bkg)
stbtv=wx.StaticText(bkg)

hbox=wx.BoxSizer()
hbox.Add(tcbt1,proportion=1,flag=wx.LEFT,border=3)
hbox.Add(stbt1,proportion=1,flag=wx.LEFT,border=3)
hbox.Add(tcbt2,proportion=1,flag=wx.LEFT,border=3)
hbox.Add(stbt2,proportion=1,flag=wx.LEFT,border=3)
hbox.Add(loadbtn,proportion=1,flag=wx.LEFT,border=3)
hbox.Add(cancelbtn,proportion=1,flag=wx.LEFT,border=3)

vbox=wx.BoxSizer(wx.VERTICAL)
vbox.Add(hbox,proportion=0)
vbox.Add(stbt3,flag=wx.ALIGN_CENTER,border=3)
vbox.Add(stbtv,flag=wx.ALIGN_CENTER,border=3)

bkg.SetSizer(vbox)
win.Show()

app.MainLoop()
del app

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值