Re: [問題] 定時器範例
拿你的程式碼改的 請參考
不過我是用PyQt4 所以前面二行要自己改一下
http://ideone.com/Yv9Qi qtimer
作者: KSJ (阿真) 看板: Python
標題: Re: [問題] 定時器範例
時間: Wed Jan 11 19:06:19 2012
※ 引述《wadd (醜男轉世-低調)》之銘言:
: 大家好:
: 小弟最近有個困擾
: 我用 PySide 做為 GUI 介面
: 我想要把「開始」跟「停止」的功能做在同一個按鍵「開始/停止」
: 或者分開做成兩顆。
開始跟停止 似乎是互斥的 感覺做一顆也可以
: 目前我的作法是我按下「開始按鈕」後
: 他會執行 say_hellow 這個 subroutine
: 我打算在 say_hellow 加上一個 loop 來判斷系統時間是否已經到了
: 但我在執行過程中我希望能再按個按鍵停止鬧鐘或重新設定時間
: 我發現當我第一次按下「開始按鈕」後
: 程式進入了 loop
: 我就無法再按任何按鍵
: 不知道有什麼比較好的方式可以讓我處理這樣的事件
因為say_hellow對整個thread是很繁重的任務
簡單說就是你按下按鈕之後 程式還在等say_hello做完事情
所以視窗就凍住了
有很多方法可以達到你想要的事
一個是使用QprogressDialog 雖然不能多工(也就是不能做除了取消以外的事)
但視窗不會結凍 (還是要看STEP而定)
另外也可以設定QTIMER (這個算時間的其實TIMER還不錯用)
用來統計時間到了沒
QTIMER是時間到的時候才會觸發 沒有睡在那 所以並不會凍住畫面
Ps. 其實我還沒用過QTIMER 等下來試看看...Orz
最後 當然就是QThread
把計時的任務整個交給另一個Thread(稱做B吧)
由B發送訊號給A來做gui的展現
由A設定B的變數讓B執行完畢
但是就有許多其他的事要考慮了 ( thread-safe dead-lock 之類的)
我覺得你的case蠻適合用qtimer的
: ┌──────────┐
: │ ┌────┐│
: │X時 X秒│開始按鈕││
: │ └────┘│
: └──────────┘
: # encoding=utf-8
: # Import PySide classes
: import sys, time
: from PySide.QtCore import *
: from PySide.QtGui import *
: class Form(QDialog):
: def __init__(self, parent=None):
: super(Form, self).__init__(parent)
: # 建立 widgets
: # 設定時間
: self.w_hour = QComboBox()
: self.w_hour.addItems(self.str_range(range(0, 24)))
: self.label3 = QLabel(u'時')
: self.w_minute = QComboBox()
: self.w_minute.addItems(self.str_range(range(0, 60)))
: self.label4 = QLabel(u'分')
: self.button = QPushButton(u'開始')
: # 建立 layout 並加入上面的 widgets
: layout = QHBoxLayout()
: # 設定時間
: layout.addWidget(self.w_hour) # 開始時間:小時
: layout.addWidget(self.label3) # 小時
: layout.addWidget(self.w_minute) # 開始時間:分鐘
: layout.addWidget(self.label4) # 分鐘
: layout.addWidget(self.button)
: # 設定 dialog layout
: self.setLayout(layout)
: # 設定 dialog 的說明
: self.setWindowTitle('alarm clock')
: # 將 button 事件與 say_hellow slot 連結
: self.button.clicked.connect(self.say_hellow)
: def say_hellow(self):
: print 'push start'
: i = 1
: while(True):
: print i
: i = i+1
: time.sleep(0.5)
: # 將 range 所產生的 list 內容轉成 str
: def str_range(self, w_list):
: temp = list()
: for i in w_list:
: temp.append(str(i))
: return temp
: if __name__ == '__main__':
: # 建立 QT 應用程式
: app = QApplication(sys.argv)
: # 建立並顯示 form
: form = Form()
: form.show()
: # 執行主要的 QT loop
: sys.exit(app.exec_())
程式碼看是不是可以上傳貼程式碼的網站
有興趣的人(如我)比較好copy
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 180.176.140.46
※ 編輯: KSJ 來自: 180.176.140.46 (01/11 19:41)
※ 編輯: KSJ 來自: 180.176.140.46 (01/11 19:42)
推
01/12 08:58, , 1F
01/12 08:58, 1F
→
01/12 08:59, , 2F
01/12 08:59, 2F
→
01/12 09:00, , 3F
01/12 09:00, 3F
→
01/12 09:01, , 4F
01/12 09:01, 4F
→
01/12 09:02, , 5F
01/12 09:02, 5F
→
01/12 14:07, , 6F
01/12 14:07, 6F
討論串 (同標題文章)
Python 近期熱門文章
PTT數位生活區 即時熱門文章