#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()