第二次点击鼠标可以得到函数吗(不是在当前window)
Can I get a function for when I click the mouse a second time (not on the current window)
首先,我是编程新手,目前只是在学习基础知识。
我正在使用 python 3.7(在 pycharm 中)创建一个 'product picker' 并想用鼠标单击其中一个产品按钮,然后在我的下一个鼠标上单击 paste/print/insert 产品名称我的发票系统。
目前,我的代码使用 'time' 模块在输入之前设置延迟可以正常工作,允许我 select 要输入的位置(代码第 49 行)。
这是我的代码:
我已经尝试过 onMouseUp 或 onDoubleClick 之类的东西(我知道这些代码不正确,但你明白了)。
# import statements import modules
from tkinter import * # tkinter helps create GUI's
from pynput.keyboard import Key, Controller as keyboardController # helps
control keyboard functions
from pynput.mouse import Listener, Controller as mouseController # helps
control mouse functions
import time
import pyautogui
# since pynput.mouse and .keyboard have 'Controller' we have to rename them
so
both will work
keyboarad = keyboardController()
mouseclick = mouseController()
# defining some variables
root = Tk()
root.grid()
btn = {}
raw_col = 1
# product lists set into categories
product = [
'product1',
'product 2',
'product 3',
'product 4',
'product 5'
]
def picker(product):
time.sleep(3)
keyboarad.type(product)
time.sleep(.5)
keyboarad.press(Key.tab)
keyboarad.release(Key.tab)
keyboarad.press(Key.tab)
keyboarad.release(Key.tab)
# for each 'item in 'raw' list we want you to create a button
for item in product:
btn[item] = Button(root, text=item, command=lambda x=item: picker(x),
height=1, width=25)
btn[item].grid(column=1, row=raw_col, pady=5, padx=5)
raw_col += 1
mainloop()
目前实际发生的是等待 3 秒然后输入
我希望它做的是下次点击类型
任何帮助将不胜感激,不仅是让它工作,而且帮助我学习。
命令time.sleep(3)
暂停主循环三秒钟,在此期间它没有响应。尝试使用 after()
来代替,因为这会为以后安排一个动作,但不会暂停主循环。
更新
我想我不太明白你在追求什么。要通过单击打印先前的选择,您必须以某种方式保存状态。在我的示例中,我只是使用了一个全局变量:
from tkinter import *
root = Tk()
button_dict = {}
# product lists set into categories
product_list = ['product 1', 'product 2', 'product 3', 'product 4', 'product 5']
def paste_to_invoice(p):
# Just to have a function as placeholder for invoicing system
print('Previous choice was:', p)
last_pick = None # Global variable to hold previous selection
def picker(product):
global last_pick
if last_pick != None: # Is there a previous choice?
paste_to_invoice(last_pick) # Then print it
last_pick = product # Save this choice for next click
# for each 'item in 'raw' list we want you to create a button
for row, item in enumerate(product_list):
b = Button(root, text=item, command=lambda x=item: picker(x))
b.grid(column=1, row=row+1, pady=5, padx=5)
button_dict[item] = b # Save reference to button
mainloop()
首先,我是编程新手,目前只是在学习基础知识。 我正在使用 python 3.7(在 pycharm 中)创建一个 'product picker' 并想用鼠标单击其中一个产品按钮,然后在我的下一个鼠标上单击 paste/print/insert 产品名称我的发票系统。
目前,我的代码使用 'time' 模块在输入之前设置延迟可以正常工作,允许我 select 要输入的位置(代码第 49 行)。 这是我的代码:
我已经尝试过 onMouseUp 或 onDoubleClick 之类的东西(我知道这些代码不正确,但你明白了)。
# import statements import modules
from tkinter import * # tkinter helps create GUI's
from pynput.keyboard import Key, Controller as keyboardController # helps
control keyboard functions
from pynput.mouse import Listener, Controller as mouseController # helps
control mouse functions
import time
import pyautogui
# since pynput.mouse and .keyboard have 'Controller' we have to rename them
so
both will work
keyboarad = keyboardController()
mouseclick = mouseController()
# defining some variables
root = Tk()
root.grid()
btn = {}
raw_col = 1
# product lists set into categories
product = [
'product1',
'product 2',
'product 3',
'product 4',
'product 5'
]
def picker(product):
time.sleep(3)
keyboarad.type(product)
time.sleep(.5)
keyboarad.press(Key.tab)
keyboarad.release(Key.tab)
keyboarad.press(Key.tab)
keyboarad.release(Key.tab)
# for each 'item in 'raw' list we want you to create a button
for item in product:
btn[item] = Button(root, text=item, command=lambda x=item: picker(x),
height=1, width=25)
btn[item].grid(column=1, row=raw_col, pady=5, padx=5)
raw_col += 1
mainloop()
目前实际发生的是等待 3 秒然后输入 我希望它做的是下次点击类型
任何帮助将不胜感激,不仅是让它工作,而且帮助我学习。
命令time.sleep(3)
暂停主循环三秒钟,在此期间它没有响应。尝试使用 after()
来代替,因为这会为以后安排一个动作,但不会暂停主循环。
更新 我想我不太明白你在追求什么。要通过单击打印先前的选择,您必须以某种方式保存状态。在我的示例中,我只是使用了一个全局变量:
from tkinter import *
root = Tk()
button_dict = {}
# product lists set into categories
product_list = ['product 1', 'product 2', 'product 3', 'product 4', 'product 5']
def paste_to_invoice(p):
# Just to have a function as placeholder for invoicing system
print('Previous choice was:', p)
last_pick = None # Global variable to hold previous selection
def picker(product):
global last_pick
if last_pick != None: # Is there a previous choice?
paste_to_invoice(last_pick) # Then print it
last_pick = product # Save this choice for next click
# for each 'item in 'raw' list we want you to create a button
for row, item in enumerate(product_list):
b = Button(root, text=item, command=lambda x=item: picker(x))
b.grid(column=1, row=row+1, pady=5, padx=5)
button_dict[item] = b # Save reference to button
mainloop()