Как сохранить текст из QComboBox в глобальной переменной - PullRequest
1 голос
/ 01 мая 2019

У меня есть следующий код, и после просеивания ответов в StackOverflow мне не удается адаптировать их к моему (очень простому) коду. Это создает окно с двумя раскрывающимися списками (один выбирает месяц, а другой - год) и кнопкой для запуска остальной части сценария.

Мне нужно сохранить «выделение» поля со списком в глобальной переменной для использования в оставшейся части скрипта.

Я не уверен, является ли это наиболее элегантно написанным или даже лучшим способом сделать это.

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

def runapp():
    def on_button_clicked():
        startprocessing()

    app = QApplication([])
    app.setStyle('Fusion')
    window = QWidget()
    layout = QVBoxLayout()
    combobox_month = QComboBox()
    combobox_year = QComboBox()
    progress = QLabel('Test')
    layout.addWidget(progress)
    layout.addWidget(combobox_month)
    layout.addWidget(combobox_year)
    combobox_month.addItems(calendar.month_name)
    combobox_year.addItems(['2017', '2018', '2019'])
    processbutton = QPushButton('Process')
    layout.addWidget(processbutton)
    global month
    month = str(combobox_month.currentText())
    global year
    year = str(combobox_year.currentText())
    processbutton.clicked.connect(on_button_clicked)
    window.setLayout(layout)
    window.show()
    app.exec_()

1 Ответ

1 голос
/ 01 мая 2019

Анализируйте, если вам нужен класс или нетрудно проанализировать то, что вы предоставляете, я также рекомендую прочитать Почему глобальные переменные являются злыми? , потому что вы можете злоупотреблять глобальными переменными. Переходя к проблеме, вы должны обновить значение переменной, подключив слот к сигналу currentTextChanged:

from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QComboBox, QLabel, QPushButton
from PyQt5.QtCore import pyqtSlot

month = ""
year = ""

def runapp():
    def on_button_clicked():
        # startprocessing()
        print("process")

    app = QApplication([])
    app.setStyle('Fusion')
    window = QWidget()
    layout = QVBoxLayout()
    combobox_month = QComboBox()
    combobox_year = QComboBox()
    progress = QLabel('Test')
    layout.addWidget(progress)
    layout.addWidget(combobox_month)
    layout.addWidget(combobox_year)
    combobox_month.addItems(calendar.month_name)
    combobox_year.addItems(['2017', '2018', '2019'])
    processbutton = QPushButton('Process')
    layout.addWidget(processbutton)
    @pyqtSlot(str)
    def on_combobox_month_changed(text):
        global month
        month = text

    @pyqtSlot(str)
    def on_combobox_year_changed(text):
        global year
        year = text
    combobox_month.currentTextChanged.connect(on_combobox_month_changed)
    combobox_year.currentTextChanged.connect(on_combobox_year_changed)
    processbutton.clicked.connect(on_button_clicked)
    window.setLayout(layout)
    window.show()
    app.exec_()

if __name__ == '__main__':
    runapp()
    print(month, year)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...