免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8706 | 回复: 12
打印 上一主题 下一主题

使用tkinter建立系统托盘图标程序[支持2.x/3.x],有例子 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-01-28 10:38 |只看该作者 |倒序浏览
本帖最后由 cdhigh 于 2013-01-28 21:18 编辑

有坛友提出使用 tkinter 建立系统托盘图标,经过搜索,有Winico这个很小的扩展(DLL文件才25KB),可以实现此需求,我在网上下载了代码,并稍做简单修改,亲自测试通过(2.X/3.X都正常运行),特放出来共享。

里面有安装说明和一个简单例子,当然,如果你需要右键弹出菜单,可以在WM_RBUTTONUP事件处理分支加入弹出菜单的代码即可。

Winico_tkinter系统托盘扩展(支持2.x和3.x).rar (27.1 KB, 下载次数: 146)

论坛徽章:
0
2 [报告]
发表于 2013-01-28 13:43 |只看该作者
这是3.x版的吧,2.x的Tkinter命名是大写的。。。希望有两个版本通用的:wink:

论坛徽章:
0
3 [报告]
发表于 2013-01-28 19:57 |只看该作者
两个版本通用的很简单,参考VisualTkinter生成的代码,自己改一下就行了。

论坛徽章:
0
4 [报告]
发表于 2013-01-29 11:03 |只看该作者
回复 3# cdhigh
直接执行demo1,这个错误怎么解决,我是初学者,不太看得懂
self.WinicoVersion = master.tk.call('package', 'require', 'Winico')
_tkinter.TclError: can't find package Winico

   

论坛徽章:
0
5 [报告]
发表于 2013-01-29 20:59 |只看该作者
请确认winico0.6.zip解压到C:\pythonXX\tcl目录(不是lib目录),类似如下:
C:\
  |-Python32
        |------- tcl
                     |-----Winico0.6
                                  |--------Winico06.dll
                                  |--------pkgIndex.tcl
                                  |--------winico.html
                                              ........

如果没有重启IDLE,重启。

如果安装了多个python版本,请确认哪个版本是默认版本,或者每个目录都拷。

或者再试试注释掉Winico.py中的这行试试,这行没有实际作用,只是检查是否有Winico模块。
self.WinicoVersion = master.tk.call('package', 'require', 'Winico')

论坛徽章:
0
6 [报告]
发表于 2013-01-29 22:10 |只看该作者
cdhigh 发表于 2013-01-29 20:59
请确认winico0.6.zip解压到C:\pythonXX\tcl目录(不是lib目录),类似如下:
C:\
  |-Python32

谢谢,可用了,再请教一下,只能通过鼠标来控制窗体么,可否通过监控某个文件(或数据库数据)是否存在来自动弹出窗体,实现监控功能呢?

论坛徽章:
0
7 [报告]
发表于 2013-01-29 23:18 |只看该作者
监控文件又是另外的话题了,如果要简单一点就设定一个定时器,定期查询某个文件是否存在,复杂的就是使用系统API,搜索一下应该有。

如果要使用定时器,python自带的Timer是一次性的定时器,你可以在回调函数中再生成一个新的定时器以达到重复执行的目的,或者你继承自带定时器自己写一个新的:
class SchedTimer(threading._Timer):
    """python标准_Timer定时器是一次性的,如果要重复定时,可以派生类修改"""
    def __init__(self, *args, **kwargs):
        threading._Timer.__init__(self, *args, **kwargs)
   
    def run(self):
        while not self.finished.is_set():
            self.finished.wait(self.interval)
            if not self.finished.is_set():
                self.function(*self.args, **self.kwargs)

def tfunc():
    print("timer")

SchedTimer(3, tfunc).start()  # 3s执行一次

论坛徽章:
0
8 [报告]
发表于 2013-04-03 00:21 |只看该作者
楼主帮我看下为什么用不了?我python3.3
一开始报错
Traceback (most recent call last):
  File "C:\ZY\EverythingandNothing\Python\MyWork\Test_tkinter\src\tkinter_test2.py", line 38, in <module>
    icon = Winico.Winico()
  File "C:\Program Files\Python3.3\lib\Winico.py", line 28, in __init__
    self.WinicoVersion = master.tk.call('package', 'require', 'Winico')
_tkinter.TclError: couldn't load library "C:/Program Files/Python3.3/tcl/winico0.6/Winico06.dll": invalid argument

按你说的注释掉那句话,还是报错
Traceback (most recent call last):
  File "C:\ZY\EverythingandNothing\Python\MyWork\Test_tkinter\src\tkinter_test2.py", line 39, in <module>
    icon_id = icon.createfrom("tkchat.ico")
  File "C:\Program Files\Python3.3\lib\Winico.py", line 32, in createfrom
    return self.tk.call('winico', 'createfrom', filename)
_tkinter.TclError: invalid command name "winico"

求解答啊

论坛徽章:
0
9 [报告]
发表于 2013-04-03 08:51 |只看该作者
可能你使用的是64位系统?

论坛徽章:
0
10 [报告]
发表于 2013-04-03 09:41 |只看该作者
回复 9# cdhigh


   是64位的系统。这个是只能在32位运行么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP