Windows上的Python后台进程。大写锁定应用程序

时间:2014-11-02 15:02:58

标签: python windows python-2.7 tkinter subprocess

我一直在尝试编写一个小应用程序(在python2.7中),它不会占用太多的CPU内存或者在后台运行时减速计算机(作为一个子进程?)。它所要做的就是在右上角显示一条消息,指出它是否为“ON”。如果它没有打开,只需关闭/不显示消息。听起来很简单,但我似乎无法得到它。

我希望它在计算机启动时运行的最终结果。也许使用自动运行python脚本的.batch文件,但是我想我需要进行一些处理编码才能有效地工作。

这是我到目前为止的代码,我最近添加了while循环,它可以看到弹出窗口,但是当大写锁定关闭时它不会关闭它。我几乎可以肯定它可以更“整洁”地完成吗?

提前感谢您的帮助!

主要代码(capsLock.py);


import win32api, win32con
from Tkinter import *

class CapsLock(object):

    def __init__(self, window):

        window.resizable(FALSE,FALSE)
        window.geometry('100x20-5+5')

        # return 1 if CAPSLOCK is ON
        if win32api.GetKeyState(win32con.VK_CAPITAL) == 1:
            self.canvas = Canvas(window, bg ="white", height=20, width=20)
            self.canvas.pack(expand=YES, fill=BOTH)

            self.lock = Label(self.canvas, text="Caps Lock Is ON")
            self.lock.pack()

            window.attributes("-topmost", True)

        else:
            window.destroy()


def main():
    while(1):
        root = Tk()
        app = CapsLock(root)
        root.mainloop()

if  __name__ == '__main__':
    main()

以下是我最初尝试将其作为子流程运行的代码(CapsStart.py);


import sys
import subprocess

proc = subprocess.Popen([sys.executable, "capsLock.py"])
print proc.returncode

很抱歉使用'_'显示代码段,而不熟悉stackoverflow。

路易斯。

更新 所以我添加了延迟以及更新代码并移动了while循环。这似乎有效,但不会持续很长时间。运行它后,打开大写锁定然后将其关闭工作,但是当我重新打开大写锁定时,它会抛出一个TclError。我试着捕捉它并让它继续下去。但是,它似乎没有用。任何进一步的帮助将不胜感激。 (我想写自己的大写锁定指示器,而不是下载别人)。错误和新代码如下;

追踪(最近一次呼叫最后一次):

文件“C:\ Users \ Louis \ Documents \ PyGames \ Learning \ capsLock.py”,第42行,     main()的

文件“C:\ Users \ Louis \ Documents \ PyGames \ Learning \ capsLock.py”,第38行,主要     app = CapsLock(root)

文件“C:\ Users \ Louis \ Documents \ PyGames \ Learning \ capsLock.py”,第17行, init     self.canvas = Canvas(window,bg =“white”,height = 20,width = 20)

文件“C:\ python27 \ lib \ lib-tk \ Tkinter.py”,第2195行, init     小工具。 init (自我,主人,'画布',cnf,kw)

文件“C:\ python27 \ lib \ lib-tk \ Tkinter.py”,第2055行, init     (widgetName,self._w)+ extra + self._options(cnf))

_tkinter.TclError:无法调用“canvas”命令:应用程序已被破坏 [完成4.3s]

import win32api, win32con
from Tkinter import *
import time

class CapsLock(object):

    def __init__(self, window):

        window.resizable(FALSE,FALSE)
        window.geometry('100x20-5+5')

        while(1):
            time.sleep(0.3)

            # return 1 if CAPSLOCK is ON
            if win32api.GetKeyState(win32con.VK_CAPITAL) == 1:
                self.canvas = Canvas(window, bg ="white", height=20, width=20)
                self.canvas.pack(expand=YES, fill=BOTH)

                self.lock = Label(self.canvas, text="Caps-Lock Is ON")
                self.lock.pack()
                window.update()

                window.attributes("-topmost", True)

            else:  
                try :
                    window.destroy()
                    window.update()

                except TclError:
                    continue


def main():

    root = Tk()
    app = CapsLock(root)
    root.mainloop()

if  __name__ == '__main__':
    main()

0 个答案:

没有答案