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
新聞熱點
疑難解答