Как определить, были ли нажаты две кнопки QPushButtons (Python)

#python #user-interface #pyqt #qpushbutton

#python #пользовательский интерфейс #pyqt #кнопка qpushbutton

Вопрос:

Мне нужно вызвать функцию-член, когда были нажаты обе мои кнопки QPushButtons. Я не могу найти способ отслеживать, были ли они нажаты.

Я вызываю функцию, когда нажимается любая из кнопок, используя …clicked.connect(func), и в рамках этой функции я попытался: 1) вернуть значение, 2) обновить переменную-член. Ниже я показал, как я пытался создать и обновить переменную-член и использовать условное выражение, чтобы проверить, были ли обе переменные истинными, чтобы я мог вызвать свою следующую функцию.

 def __init__(self, parent=None):
    super(MorphingApp, self).__init__(parent)
    self.setupUi(self)

    self.startIm = None
    self.endIm = None

    self.initialState()


def initialState(self):

    self.btn_loadStart.clicked.connect(self.loadImageS)
    self.btn_loadEnd.clicked.connect(self.loadImageE)

    if(self.startIm is True and self.endIm is True):
        self.loadedState()


def initialState(self):
    self.startIm = True


def loadImageE(self):
    self.endIm = True
 

Мои функции, конечно, что-то делают, но я удалил части, которые не имели значения. Когда я запускаю графический интерфейс, я могу загружать изображения, но функция, которая должна вызываться после нажатия обеих кнопок, не вызывается. Я знаю это, потому что состояние графического интерфейса не меняется так, как я намереваюсь.

Я впервые задаю вопрос, поэтому дайте мне знать, как улучшить 🙂

Ответ №1:

Используйте простой флаг True / False, чтобы проверить, была ли кнопка нажата хотя бы один раз. Обе кнопки начинаются с флага, установленного в False, поэтому мы можем настроить это в методе init .

Затем поместите код, который проверяет, были ли нажаты обе кнопки внутри функций, связанных с ними. Наконец, просто вызовите соответствующую функцию «final», если проверка прошла.

Это пример использования двух общих кнопок:

 def __init__(self, parent=None):
    super(MorphingApp, self).__init__(parent)
    self.btn_01_pressed = False
    self.btn_02_pressed = False
    self.set_buttons()

def set_buttons(self):
    self.btn_01.clicked.connect(self.check01)
    self.btn_02.clicked.connect(self.check02)

def check01(self):
    self.btn_01_pressed = True
    if self.btn_01_pressed is True and self.btn_02_pressed is True:
        self.call_final_function()

def check02(self):
    self.btn_02_pressed = True
    if self.btn_01_pressed is True and self.btn_02_pressed is True:
        self.call_final_function()

def call_final_function(self):
    # do something great here
 

Как и в вашем сообщении, я пропустил некоторые части, необходимые для фактического кода (например, для создания QPushButton виджетов), но, надеюсь, вы поняли идею.

Ответ №2:

 def __init__(self, parent=None):
    super(MorphingApp, self).__init__(parent)
    self.setupUi(self)

    self.startIm = False
    self.endIm = False

    self.btn_loadStart.clicked.connect(self.loadImageS)
    self.btn_loadEnd.clicked.connect(self.loadImageE)


def loadImageS(self):
    self.startIm = True

    if self.startIm and self.endIm:
        self.loadedState()


def loadImageE(self):
    self.endIm = True

    if self.startIm and self.endIm:
       self.loadedState()