我正在编写一个pyqt5程序来管理rom并从它们各自的仿真器中启动它们,但是在启动控制器后,我很难使用控制器退出仿真。
我正在使用dinput处于关闭状态的ds4windows,因此它仅显示为Xbox控制器。我使用pygame游戏杆模块来控制从保存我的rom的文件夹生成的菜单的选择。我在ds4windows中为ps按钮分配了一个alt-f4宏,当我打开模拟器并按ps按钮时,它退出,就像我按alt-f4一样。当我使用子进程模块从程序中启动游戏时,或者在命令行上调用其.exe的路径时,仍然可以通过按键盘上的alt-f4退出游戏,然后像这样直接回到程序中我想要,但是ps按钮没有任何作用。
当我启动模拟器时,我尝试使用pygame.quit()关闭用于检测游戏手柄输入的while循环,并使用subprocess.run(),subprocess.Popen()和subprocess启动模拟器。带有shell = True的Popen(),但结果完全相同:键盘工作,ps按钮不起作用。我已经在多个不同的仿真器上对其进行了测试,但是我认为这不是问题所在,因为,就像我说的那样,如果我从Program Files中的文件夹启动仿真器,那么它就可以工作,但是从我的应用程序启动仿真器时,我从命令行将其称为路径。
此外,当我从程序启动时,控制器仍可以按预期运行。只是分配给xbox控制器配置文件以外的其他任何按钮的按钮
从程序内部启动的代码示例(mpath是rom文件的路径):
def launch(selection):
global mpath
ext = selection[-4:]
emupath = 'C:\\Program Files\\emulators\\'
if ext in launchtypes:
if ext in ['.exe', '.lnk']:
Popen(mpath, shell=True)
elif ext == '.smc':
run([emupath + 'snes9x\\snes9x-x64.exe', mpath])
编辑:已解决
我正在从cmder控制台仿真器运行程序。当我从cmd.exe或powershell运行它时,它工作得很好。