本质上,我正在尝试将一个显示很多鼠标信息的简单程序转换为一个窗口,就像一个侧面项目一样。我已经尝试了人们所拥有的几乎所有解决方案,但是没有任何效果。我正在使用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文件的输出都是由于出现严重错误而无法运行,并且无法运行脚本。我不知道发生了什么事,请帮忙!
答案 0 :(得分:0)
1。。我要做的第一件事是在命令提示符下使用所在文件夹中的python {script name}.py
运行python文件。我发现我没有在计算机上安装默认情况下在我的IDE(PyCharm)上安装的模块,该模块原来是keyboard
模块。确保其安装正确,并且应该可以正常工作。
2。 (非常重要)。检查是否已多次安装python。稍后我会发现,诸如pyautogui
之类的某些模块不起作用的原因是,默认情况下它们被安装到了我也安装在系统上的其他版本的python中。在我的情况下,pyautogui
是自动安装到Python版本3.6.4的,而不是所有其他模块都在运行的3.7.3。只需删除您不使用的python版本,然后重新安装软件包,它便可以正常工作。
3。除非您有一部分脚本来解决它的不足,否则如果脚本中包含任何形式的图像(图标图像除外)或任何其他导入的文件,则它们必须与代码中指定的位置位于同一位置,否则它将不起作用。如果您正在执行基于窗口的程序,则该窗口将弹出并显示为黑色,然后出现致命错误消息。只要可以访问所有图像和外部媒体,就不会出现图形错误。
4。 (TROUBLESHOOT)显然,您从运行.exe文件获得的致命错误消息对于尝试解决任何问题没有用,但是,如果您使用的是pyinstaller
它应该创建一个__pycache__
文件夹,其中包含一个更友好的.pyc文件,该文件实际上将为您提供错误以及代码出错的地方。如果这里没有任何效果,请尝试此操作。