Сигнализация принимается с помощью QPushButtons или Изменение имен QDialogButtons - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть QDialog и QMainWindow. Предполагается, что «Startup» QDialog появится и позволит пользователю выполнить некоторые начальные настройки перед переходом в главное окно. Диалоговое окно может выполнить две задачи: 1. Parse, который выполняет волшебный файл c за сценой и выходит из GUI. 2. Карта, которая вызывает главное окно «Карта» с интерфейсом отображения данных. Я использовал QT Designer, не понимая, что я делаю. В диалоге запуска я создал две кнопки QPushButton - Parse и Map. Так как они являются QPushButton, я не могу принять сигнал, так что мое главное окно знает, чтобы загрузить полностью.

Однако я не могу переименовать кнопки QButtonDialog, включать или отключать их по мере необходимости. Это очень ухудшит удобство использования диалогового окна, когда вместо кнопок «Parse» и «Map» используются кнопки «ОК» и «Отмена». Поэтому я спрашиваю, есть ли другой способ сообщить или пометить, что была нажата кнопка «Карта», чтобы мое главное окно карты могло загружаться?

Я кое-что обрезал, чтобы он был более читабельным.

Диалог запуска

class StartupDialog(QDialog):
    def __init__(self, parent=None):
        QDialog.__init__(self, parent)
        self.ui = Ui_StartupFile()
        self.ui.setupUi(self)    

class Ui_StartupFile(object):
    def setupUi(self, StartupFile):       
        StartupFile.setObjectName("StartupFile")
        StartupFile.resize(541, 292)

        self.map_or_parse_btns_widget_parent = QtWidgets.QWidget(StartupFile)
        self.map_or_parse_btns_widget_parent.setGeometry(QtCore.QRect(10, 230, 521, 41))
        self.map_or_parse_btns_widget_parent.setObjectName("map_or_parse_btns_widget_parent")
        self.map_or_parse_btns_layout = QtWidgets.QHBoxLayout(self.map_or_parse_btns_widget_parent)
        self.map_or_parse_btns_layout.setContentsMargins(0, 0, 0, 0)
        self.map_or_parse_btns_layout.setObjectName("map_or_parse_btns_layout")

        #This button is supposed to fully open the Map main window and close the import dialog
        self.map_btn = QtWidgets.QPushButton(self.map_or_parse_btns_widget_parent)
        self.map_btn.setObjectName("map_btn")
        self.map_btn.setEnabled(False)
        self.map_btn.clicked.connect(self.load_and_show_map_gui)
        self.map_or_parse_btns_layout.addWidget(self.map_btn)

        #The button parses the file and writes it off somewhere, closing the dialog and never opening
        #the map window.
        self.parse_btn = QtWidgets.QPushButton(self.map_or_parse_btns_widget_parent)
        self.parse_btn.setEnabled(False)
        self.parse_btn.setObjectName("parse_btn")
        self.parse_btn.clicked.connect(self.parse_with_preset)
        self.map_or_parse_btns_layout.addWidget(self.parse_btn)
        self.retranslateUi(StartupFile)
        QtCore.QMetaObject.connectSlotsByName(StartupFile)

    # Main functions
    def load_and_show_map_gui(self):
        fields = self.all_import_fields()
        #Make sure all the file paths are right before launching parser & main window
        if self.check_paths(fields["input_file"]):
            #Signal Map window full launch here somehow??

    def parse_with_preset(self):
        try:
            fields = self.all_import_fields()
            split_opath = os.path.split(fields["output_file"]) 
            if self.check_paths(fields["input_file"], split_opath[0], fields["preset_file"]):
                parse(fields)
                # Close down the Dialog and main window?
        except Exception as e:
            pass


MapWindow

class Map_Fed_window(QMainWindow):
    def __init__(self, parent=None):
        QMainWindow.__init__(self, parent)
        self.ui = Ui_Map_Fed_window()
        self.ui.setupUi(self)

        # Show login dialog before anything else
        self.show_import_dialog()


    def show_import_dialog(self):
        if_dialog = ImportFile.ImportFileDialog()
        fields = if_dialog.ui.all_import_fields()
        #How do I capture parse or map button click here?

class Ui_Map_Fed_window(object):
    def setupUi(self, Map_Fed_window):
        Map_Fed_window.setObjectName("Map_Fed_window")
        Map_Fed_window.resize(610, 642)
        self.mainWidgetParent = QtWidgets.QWidget(Map_Fed_window)
        self.mainWidgetParent.setLayoutDirection(QtCore.Qt.LeftToRight)
        self.mainWidgetParent.setObjectName("mainWidgetParent")


if __name__ == "__main__":
    import sys
    try:
        app = QtWidgets.QApplication(sys.argv)
        mw = Map_Fed_window()
        mw.show()
        sys.exit(app.exec_())
    except Exception as e:
        pass
...