Как сохранить и передать значение из QComboBox без непосредственной активации другой функции?

Как сделать так, чтобы приложение печатало «Вы нажали кнопку 1 для валюты XXX» только после того, как пользователь нажал кнопку «Стратегия 1», а не тогда, когда он/она только что выбрал валюту?

Вот что я сделал до сих пор, но он печатает «Вы нажали ...» сразу после того, как пользователь выбрал валюту из QComboBox.

from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt

app = QApplication([])

def button1_clicked(curr_pair):
    alert = QMessageBox()
    alert.setText('You clicked the button1 for currency {}'.format(curr_pair))
    alert.exec_()

button1 = QPushButton('Strategy1')
button1.setToolTip('Click to run strategy 1')
button1.show()
button1.clicked.connect(button1_clicked)

combo = QComboBox()
combo.addItems(['', 'eur', 'usd', 'gbp'])
combo.show()
combo.activated[str].connect(button1_clicked)

window = QWidget()
layout = QVBoxLayout()

title1 = QLabel("Choose currency") 
title1.setAlignment(Qt.AlignCenter) 
title2 = QLabel("Push the button") 
title2.setAlignment(Qt.AlignCenter) 

layout.addWidget(title1)
layout.addWidget(combo)
layout.addWidget(title2)
layout.addWidget(button1)

window.setLayout(layout)
window.show()

app.exec_()

person EugeneSam    schedule 04.02.2019    source источник


Ответы (1)


Попытайся:

from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt

app = QApplication([])

def button1_clicked(curr_pair):
    alert = QMessageBox()
    if curr_pair:
        alert.setText('You clicked the button1 for currency: `{}`'.format(curr_pair))
    else:
        alert.setText('You have pressed the button1 no currency is selected !!!')
    alert.exec_()

currencyName = QLabel("")                                              # <--- +++

button1 = QPushButton('Strategy1')
button1.setToolTip('Click to run strategy 1') 
button1.show()

#button1.clicked.connect(button1_clicked)
button1.clicked.connect(lambda : button1_clicked(currencyName.text())) # <--- +++

combo = QComboBox()
combo.addItems(['', 'eur', 'usd', 'gbp'])
combo.show()

#combo.activated[str].connect(button1_clicked)
combo.activated[str].connect(currencyName.setText)                      # <--- +++

window = QWidget()
layout = QVBoxLayout()

title1 = QLabel("Choose currency")      
title1.setAlignment(Qt.AlignCenter) 
title2 = QLabel("Push the button")      
title2.setAlignment(Qt.AlignCenter) 

layout.addWidget(title1)
layout.addWidget(combo)
layout.addWidget(title2)
layout.addWidget(button1)

window.setLayout(layout)
window.show()

app.exec_()

введите здесь описание изображения

person S. Nick    schedule 04.02.2019