python - 为什么键绑定在 macOS 上不起作用?
问题描述
一位朋友发现更改第 7 行的绑定 from'w'
和's'
to'Left'
并且'Right'
工作得很好,但找不到任何其他字符串可以让绑定正常工作。我没有个人访问 macOS 计算机来调试程序的权限。有人可以解释为什么该程序可以在 Windows 上运行,以及需要做什么才能使其在 macOS 上按预期运行?
import tkinter
class Pong(tkinter.Canvas):
def __init__(self):
super().__init__(widt=640, heig=480, bg='black', highlightthickness=0)
self.a, self.b = Pad(10, self, 'w', 's'), Pad(630, self, 'Up', 'Down')
self.after_idle(self.animate)
self.focus_force()
def animate(self):
self.a.move()
self.b.move()
self.delete(tkinter.ALL)
self.a.render(self)
self.b.render(self)
self.after(10, self.animate)
class Pad:
def __init__(self, alignment, surface, up, down):
self.x, self.y = alignment, 240
self.keys = KeyListener(surface, up=up, down=down)
def move(self):
if self.keys.up and self.y > 60:
self.y -= 5
if self.keys.down and self.y < 420:
self.y += 5
def render(self, surface):
surface.create_rectangle(
(self.x - 7, self.y - 60, self.x + 7, self.y + 60),
fill='blue', outline='blue')
class KeyListener:
def __init__(self, widget, **kwargs):
self.__state = dict.fromkeys(kwargs, False)
for name, key in kwargs.items():
widget.bind('<KeyPress-{}>'.format(key), self.__set(name, True))
widget.bind('<KeyRelease-{}>'.format(key), self.__set(name, False))
def __set(self, name, value):
def handler(_):
self.__state[name] = value
return handler
def __getattr__(self, name):
return self.__state[name]
if __name__ == '__main__':
Pong().grid()
tkinter.mainloop()
解决方案
推荐阅读
- powershell - Powershell 脚本将 Excel 工作表拼接成工作簿(.xslx 格式)
- python - 如何将字典值与阈值进行比较?
- ruby - 使用干式验证在 Ruby 中创建嵌套/可重用的验证器
- angular - 角度 glpi api 坏数组
- python - 转换为python字典时保留pandas df的重复索引
- mysql - 如何在 MySQL 中对数据模型进行转发工程而不得到错误:错误 1273:未知排序规则:'utf8mb4_0900_ai_ci'?
- node.js - NPM start: TypeError: ext[key].bind is not a function
- xamarin - Xamarin Forms Shell Flyout 具有多列
- python - 向我的 ANN(Keras 功能 API)添加嵌入层时出错
- string - 如何从文本框中的字符串中删除最后一个字符?