无法正确在两个选择事件之间切换

时间:2019-12-22 11:22:54

标签: python matplotlib events

我正在尝试在我的应用中进行两次选择事件-一个用于选择一名士兵,另一个用于选择要攻击的敌人。 此事件的流程如下所示: 按下“订婚”按钮->选择一个士兵->选择一个敌人进行攻击 我有一个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])中获取它们作为数据发送给他们

0 个答案:

没有答案