我一直在尝试编写一个小应用程序(在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()