Python 板


LINE

拿你的程式码改的 请参考 不过我是用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)
1F:推 wadd:是的,我就是在找timer,原来写法是这样,非常谢谢K大 01/12 08:58
2F:→ wadd:好,我把这个,让我整理一下,我会再分享出来 01/12 08:59
3F:→ wadd:应该会把K大说的那两种方式都做个sample,抱歉我最近才转高阶 01/12 09:00
4F:→ wadd:思维可能会比较局限点。K 大的程式码可以借我放在 01/12 09:01
5F:→ wadd:我的blog上吗?http://trac.nchc.org.tw/grid/wiki/wade/QT 01/12 09:02
6F:→ KSJ:请随意取用 可任意修改 不用附作者没关系 (BSD??)XD 01/12 14:07







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP