【发布时间】:2019-09-07 20:47:35
【问题描述】:
本质上,我正在尝试将一个显示大量鼠标信息的简单程序转换为一个窗口,就像一个辅助项目一样。我已经尝试了人们拥有的几乎所有解决方案,但没有任何效果。我正在使用 pyinstaller 和 python-to-exe。
尝试更改文件目录、pyinstaller 中的每个选项以及更改循环函数。
import pyautogui
from pygame import *
import time
import keyboard
import logging
import datetime
logging.basicConfig(filename="mouse_log.log", filemode="w",
format='%(message)s', level=logging.DEBUG)
pygame.init()
pygame.font.init()
screen = pygame.display.set_mode((250, 95))
pygame.display.set_caption("Cursor Info")
font = pygame.font.SysFont("Arial", 15)
title_font = pygame.font.SysFont("Arial", 16)
icon = pygame.image.load("MouseController.png").convert_alpha()
pygame.display.set_icon(icon)
def main():
previous_pos = pyautogui.position()
running = True
while running:
mx, my = pyautogui.position()
current_pos = mx, my
msx = current_pos[0] - previous_pos[0]
msy = current_pos[1] - previous_pos[1]
mouse_color = pyautogui.pixel(mx, my)
if msx == 0 and msy == 0:
moving = False
else:
moving = True
cords = font.render("Position: x = {}, y = {}".format(mx, my), False, (0, 0, 0))
color = font.render("Current Color: {}".format(mouse_color), False, (0, 0, 0))
is_moving = font.render("Currently Moving: {}".format(str(moving)), False, (0, 0, 0))
speed = font.render("Speed: x = {}, y = {}".format(msx, msy), False, (0, 0, 0))
log = title_font.render("Press Alt+C to log all aspects", True, (0, 0, 0))
pygame.display.flip()
pygame.Surface.fill(screen, (255, 255, 255))
screen.blit(cords, (5, 0))
screen.blit(color, (5, 15))
pygame.draw.rect(screen, (0, 0, 0), (211, 13, 30, 22))
pygame.draw.rect(screen, (0, 0, 0), (211, 13, 31, 23))
pygame.draw.rect(screen, mouse_color, (212, 14, 28, 20))
screen.blit(is_moving, (5, 30))
screen.blit(speed, (5, 45))
screen.blit(log, (20, 75))
previous_pos = current_pos
if keyboard.is_pressed('C') and keyboard.is_pressed('Alt'):
logging.debug("TIME: {}".format(datetime.datetime.now().time()))
logging.debug("POSITION: x = {}, y = {}".format(mx, my))
logging.debug("COLOR: {}".format(mouse_color))
logging.debug("MOVING: {}".format(str(moving)))
logging.debug("SPEED: x = {}, y = {}".format(msx, msy))
logging.debug("=========")
time.sleep(0.2)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.quit()
if __name__ == "__main__":
main()
在每种情况下,exe 文件的输出都是因为严重错误而无法运行,并且无法运行脚本。我不知道发生了什么,请帮忙!
【问题讨论】:
-
我不知道您遇到的错误,因为没有发布错误消息。也许你会让你的程序更简单,然后先用 python 测试它。只有成功的resukts然后你编译为exe。然后确保 exe 文件仍然可以工作。然后用更多功能修改您的程序并再次重复该过程。希望这会指导你。
-
更新:我查看了给出的日志文件,发现这一行
missing module named pyautogui。现在我知道 pyautogui 没有导入,但我不知道如何修复它。谢谢 -
你可以打开一个 python shell 并运行
import pyautogui。如果不成功,请尝试安装它。如果您在 Linux 中运行 python 3,请执行此操作pip3 install pyautogui。否则只需通过pip install pyautogui安装 -
好的,我现在都做了,但是当我运行
import pyautogui时它仍然说它不存在。我会继续努力 -
然后安装它。见pyautogui.readthedocs.io/en/latest/install.html。另一个原因是您使用一个 python 版本安装 pyautogui,但使用另一个版本运行您的脚本。您可以按照说明查看您的 python 正在寻找库的路径:dummies.com/programming/python/…