我正在尝试在我的应用中进行两次选择事件-一个用于选择一名士兵,另一个用于选择要攻击的敌人。
此事件的流程如下所示:
按下“订婚”按钮->选择一个士兵->选择一个敌人进行攻击
我有一个event.artist
变量,它保存了我选择的点。问题是当我想切换到其他事件时-即使我选择了不同的点,变量也没有改变。
因此,我的第二个选择事件函数未执行应做的事情。
通过按钮激活第一次选择事件:
def engage_button(self):
self.MplWidget.canvas.mpl_connect('pick_event', self.pick_soldier_for_engage)
领兵的功能:
def pick_soldier_for_engage(self, event):
if len(self.picked_soldier) > 0:
self.picked_soldier.pop(0)
this_point = event.artist
# x_data and y_data of the point that was picked by the user
x_data = this_point.get_xdata()
y_data = this_point.get_ydata()
ind = event.ind
if self.company_commander.company_number == self.get_company_num(x_data, y_data):
for soldier in self.soldiers:
if soldier.x == x_data and soldier.y == y_data:
self.picked_soldier.append(soldier)
break
self.MplWidget.canvas.mpl_disconnect(
self.MplWidget.canvas.mpl_connect('pick_event', self.pick_soldier_for_engage))
self.MplWidget.canvas.mpl_connect('pick_event', self.pick_enemy_for_engage)
print("pick soldier completed")
第一次选择事件的结束激活了第二个事件,但是point
的值与this_point
的值保持不变,因此找不到匹配的敌人:
def pick_enemy_for_engage(self, event):
if len(self.picked_enemy) > 0:
self.picked_enemy.pop(0)
point = event.artist
# x_data and y_data of the point that was picked by the user
x_data = point.get_xdata()
y_data = point.get_ydata()
ind = event.ind
for enemy in self.enemies:
if enemy.x == x_data and enemy.y == y_data:
self.picked_enemy.append(enemy)
break
self.MplWidget.canvas.mpl_disconnect(self.MplWidget.canvas.mpl_connect('pick_event',
self.pick_enemy_for_engage))
print("pick enemy completed")
第二个事件结束了for循环,没有找到任何匹配项。
两个活动结束后,我将从列表(picked_enemy[0]
,picked_soldier[0]
)中获取它们作为数据发送给他们