Как узнать, были ли нажаты две кнопки QPushButton (Python) - PullRequest
0 голосов
/ 17 апреля 2019

Мне нужно вызвать функцию-член, когда обе мои кнопки 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

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

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

Ответы [ 2 ]

0 голосов
/ 17 апреля 2019
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()
0 голосов
/ 17 апреля 2019

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

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

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

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), но, надеюсь, вы поняли идею.

...