【发布时间】:2020-08-01 21:07:04
【问题描述】:
我有一个TextBox 和一个Button。当用户点击 Enter 时,我希望单击与 TextBox 相关的特定按钮。 TextBox 和 Button 是类。我将Button 实例传递给TextBox,以便我们知道应该点击一个。 Button 是一个有 2 个方法 click() 和 autoclick() 的类。
我想要autoclick() 检查是否按下了 Enter 键,如果是,则使click() 返回True。我尝试使用装饰器并编写了这个玩具程序来展示我所尝试的。
class Button:
def click(self):
return False
def autoclick(self, func, *args):
def wrapper():
func(*args)# This function needes events as it argumnet
return True
return wrapper
b = Button()
class TextBox:
def __init__(self, button=None):
self.button = button
def box(self):
if enterPressed:
if self.button is not None:
self.button.autoclick(self.button.click, events)()
tb = TextBox(button=b)
while True:
tb.box()
if b.click():
print("this needs to be printed when user hits enter")
我没有收到任何错误,但它根本不起作用。
【问题讨论】:
-
tb.button总是 None,所以self.button.autoclick(self.button.click, events)永远不会被执行。 -
这个问题已经被问过了,所以请随时查看7201715
-
@Jack Song 抱歉,b 本来是要传递给 TextBox,我更新了问题
-
另一个问题是装饰器实际上从未被调用过。
self.button.autoclick(self.button.click, events)只返回函数处理程序,但不运行函数。 -
啊,是的,我又不好了,我更新了问题,对不起