Nhận tọa độ nhấp chuột python

Để tạo con trỏ chuột tùy chỉnh trong matplotlib, chúng ta có thể thực hiện các bước sau

bước

  • Đặt kích thước hình và điều chỉnh phần đệm giữa và xung quanh các ô con

  • Tạo một hình mới hoặc kích hoạt một hình hiện có

  • Liên kết chức năng *mouse_event* với sự kiện *button_press_event*

  • Tạo các điểm dữ liệu x và y bằng cách sử dụng numpy

  • Vẽ các điểm dữ liệu x và y bằng phương thức plot[]

  • Để hiển thị hình, sử dụng phương thức Show[]

Thí dụ

import numpy as np
from matplotlib import pyplot as plt

plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True

def mouse_event[event]:
    print['x: {} and y: {}'.format[event.xdata, event.ydata]]

fig = plt.figure[]
cid = fig.canvas.mpl_connect['button_press_event', mouse_event]

x = np.linspace[-10, 10, 100]
y = np.sin[x]

plt.plot[x, y]

plt.show[]

đầu ra

Nó sẽ tạo ra đầu ra sau -

Bây giờ, nhấp vào các điểm khác nhau trên biểu đồ và nó sẽ hiển thị tọa độ của chúng trên bảng điều khiển

x: -3.099305446290094 and y: -0.013811108549791173
x: -0.2865652183685867 and y: -0.2067543563498595
x: -3.0280968329249927 and y: -0.1844916739113902
x: -5.7696284474814 and y: 0.4240216460734405
x: -3.9182044999887626 and y: 0.6837529411889172

Trước ArcGIS 10. 1, Không thể sử dụng Python để tương tác với giao diện ArcGIS. Giờ đây, Phần bổ trợ Python cung cấp cho người dùng khả năng tạo các công cụ viết bằng Python phản hồi lại một cú nhấp chuột

Các hướng dẫn được cung cấp mô tả cách thiết lập mã Bổ trợ Python để lấy tọa độ bằng một cú nhấp chuột

Chúng tôi sẽ sử dụng mô-đun pynput để nghe các sự kiện của chuột. Để cài đặt mô-đun này, hãy thực thi

with Listener[] as listener:
    listener.join[]
0 trong cmd. Xem đầu ra để đảm bảo không có lỗi nào xảy ra;

Để kiểm tra kỹ xem nó đã được cài đặt thành công hay chưa, hãy mở IDLE và thực hiện lệnh

with Listener[] as listener:
    listener.join[]
1;

Xây dựng kịch bản

Tạo một tệp python mới và lưu nó với một. phần mở rộng tệp py. Trước tiên, bạn sẽ muốn nhập Trình nghe từ pynput. con chuột

from pynput.mouse import Listener

Thiết lập trình nghe bằng cách tạo một thể hiện trong câu lệnh

with Listener[] as listener:
    listener.join[]
2 và sử dụng phương thức
with Listener[] as listener:
    listener.join[]
3 của nó để nối nó với luồng chính

with Listener[] as listener:
    listener.join[]

Tạo ba phương thức;

________số 8_______

Liên kết các phương thức này với phiên bản trình nghe với tên hàm là đối số; . Bây giờ khi một hành động xảy ra, một trong những phương thức này sẽ được chạy

with Listener[on_move=on_move, on_click=on_click, on_scroll=on_scroll] as listener:

Để đảm bảo chúng đang chạy, hãy thêm một số câu lệnh in vào từng phương thức. Lưu và chạy tập lệnh. Di chuột xung quanh một chút, bạn sẽ thấy đầu ra như bên dưới

def on_move[x, y]:
    print ["Mouse moved"]

def on_click[x, y, button, pressed]:
    print ["Mouse clicked"]

def on_scroll[x, y, dx, dy]:
    print ["Mouse scrolled"]

Sử dụng các câu lệnh in này và các tham số được cung cấp, chúng tôi có thể cung cấp thêm thông tin khi in. Chạy lại cái này để đảm bảo nó hoạt động bình thường [ví dụ đầu ra bên dưới]

def on_move[x, y]:
    print ["Mouse moved to [{0}, {1}]".format[x, y]]

def on_click[x, y, button, pressed]:
    if pressed:
        print ['Mouse clicked at [{0}, {1}] with {2}'.format[x, y, button]]

def on_scroll[x, y, dx, dy]:
    print ['Mouse scrolled at [{0}, {1}][{2}, {3}]'.format[x, y, dx, dy]]

Nếu bạn muốn tập lệnh này được chạy trong nền. Nhấp vào Tệp -> Lưu dưới dạng và lưu nó với một. phần mở rộng tệp pyw. Bây giờ khi nó chạy bên ngoài IDLE sẽ không có cửa sổ giao diện điều khiển và nó sẽ không giống như nó đang chạy. Nhưng để đảm bảo rằng bảng điều khiển không xuất hiện, trước tiên chúng ta cần xóa các câu lệnh in

Nhập nhật ký và thiết lập cấu hình cơ bản như tôi có bên dưới. Sau đó, thay đổi tất cả các câu lệnh in thành ghi nhật ký. thông tin

import logging

logging.basicConfig[filename="mouse_log.txt", level=logging.DEBUG, format='%[asctime]s: %[message]s']

def on_move[x, y]:
    logging.info["Mouse moved to [{0}, {1}]".format[x, y]]

def on_click[x, y, button, pressed]:
    if pressed:
        logging.info['Mouse clicked at [{0}, {1}] with {2}'.format[x, y, button]]

def on_scroll[x, y, dx, dy]:
    logging.info['Mouse scrolled at [{0}, {1}][{2}, {3}]'.format[x, y, dx, dy]]

Bây giờ khi tập lệnh được chạy, không có gì được in ra bàn điều khiển. Điều này là do tất cả được lưu vào tệp được khai báo trong cấu hình cơ bản

Lưu và đóng IDLE. Mở tệp có tên mouse_log. txt bên cạnh tập lệnh python của bạn;

Vị trí thực của tệp này sẽ nằm trong thư mục làm việc hiện tại nơi bạn chạy tập lệnh từ đó

chủ đề người nghe

Xin lưu ý nhanh, lớp Listener là một luồng, nghĩa là ngay khi nó được nối với luồng chính, sẽ không có mã nào được thực thi sau

with Listener[] as listener:
    listener.join[]
3 cho đến khi Listener dừng lại

Như đã nêu, chúng ta có thể gọi

with Listener[] as listener:
    listener.join[]
5 ở bất kỳ đâu trong tập lệnh để dừng chuỗi hoặc trả về Sai từ cuộc gọi lại để dừng người nghe. Như được hiển thị trong video của tôi, chúng ta cũng có thể gọi
with Listener[] as listener:
    listener.join[]
6 theo một trong các định nghĩa do thực tế là người nghe hiện đang ở trong phạm vi và là một thể hiện của os Listener

Kịch bản cuối cùng

from pynput.mouse import Listener
import logging

logging.basicConfig[filename="mouse_log.txt", level=logging.DEBUG, format='%[asctime]s: %[message]s']

def on_move[x, y]:
    logging.info["Mouse moved to [{0}, {1}]".format[x, y]]

def on_click[x, y, button, pressed]:
    if pressed:
        logging.info['Mouse clicked at [{0}, {1}] with {2}'.format[x, y, button]]

def on_scroll[x, y, dx, dy]:
    logging.info['Mouse scrolled at [{0}, {1}][{2}, {3}]'.format[x, y, dx, dy]]

with Listener[on_move=on_move, on_click=on_click, on_scroll=on_scroll] as listener:
    listener.join[]

Các vấn đề và câu hỏi thường gặp

ModuleNotFoundError/ImportError. Không có mô-đun nào có tên 'pynput'

Bạn đã cài đặt pynput chưa? . Nếu bạn có nhiều phiên bản Python, hãy đảm bảo rằng bạn đang cài đặt pynput trên cùng phiên bản với phiên bản bạn đang chạy tập lệnh

Tôi gặp lỗi SyntaxError

Lỗi cú pháp là do bạn gây ra và tôi không thể cung cấp gì nhiều để sửa nó ngoài việc yêu cầu bạn đọc lỗi. Họ luôn cho biết lỗi ở đâu trong đầu ra bằng dấu ^. Nói chung, những người gặp phải sự cố này có cách thụt đầu dòng không chính xác, đặt dấu ngoặc ở sai vị trí hoặc viết sai chính tả. Bạn có thể đọc về SyntaxError trên tài liệu của Python

Chủ Đề