当我将光标放在条目小部件但不知道如何解决这个问题时,我试图检测大写锁定是否已启用。
我在网站上找到了这些答案但却无法满足我的需求:caps locks ans shift key status和current key lock status
from tkinter import *
root = Tk()
root.geometry("400x400")
e1 = Entry(root, width=40)
e1.focus()
e1.pack()
e2 = Entry(root, width=40)
e2.place(x=70, y=100)
root.mainloop()
我欢迎你就如何做到这一点提出建议。
答案 0 :(得分:3)
您可以使用条目上的绑定来检测用户是否使用大写锁定键入。事件修饰符Lock
使您只有在启用大写锁定时才会触发事件。因此,通过将警告绑定到'<Lock-KeyPress>'
,每次用户在按下大写锁定时按下按键时都会显示警告。如果您希望警告只显示一次,只需在with_caps_lock
中取消绑定该事件。
以下是一个例子:
import tkinter as tk
def with_caps_lock(event):
if event.keysym != "Caps_Lock":
# this if statetement prevent the warning to show up when the user
# switches off caps lock
print('WARNING! Caps Lock is on.')
# unbind to do it only once
e1.unbind('<Lock-KeyPress>', bind_id)
root = tk.Tk()
root.geometry("400x400")
e1 = tk.Entry(root, width=40)
e1.focus()
e1.pack()
# show warning when the user types with caps lock on
bind_id = e1.bind('<Lock-KeyPress>', with_caps_lock)
root.mainloop()
答案 1 :(得分:0)
仅适用于Windows:
from tkinter import *
import ctypes
hllDll = ctypes.WinDLL ("User32.dll")
VK_CAPITAL = 0x14
def get_capslock_state():
return hllDll.GetKeyState(VK_CAPITAL)
def on_focus(event):
if (get_capslock_state()):
print("Caps lock is on")
root = Tk()
root.geometry("400x400")
e1 = Entry(root, width=40)
e1.focus()
e1.pack()
e2 = Entry(root, width=40)
e2.place(x=70, y=100)
e2.bind("<FocusIn>", on_focus)
root.mainloop()
答案 2 :(得分:0)
通过 @_ 4321 提供的答案,如果启用了大写锁定,则可以将其显示为Label
,或者如果启用了“已禁用”,则可以将其显示为“{1}}”。如果您不想打印到终端这个怎么样。
import tkinter as tk
def with_caps_lock(event):
if event.keysym != "Caps_Lock":
ID["text"]= "cap is on man"
elif event.keysym == "Caps_Lock":
ID["text"]= "caps is off wowowow"
root = tk.Tk()
root.geometry("400x400")
ID = tk.Label(root, foreground="RED")
ID.place(x=100, y=100)
e1 = tk.Entry(root, width=40)
e1.focus()
e1.pack()
# show warning when the user types with caps lock on
e1.bind('<Lock-KeyPress>', with_caps_lock)
root.mainloop()