У меня есть 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