PyQt Can't open 3d dialog window and close the 1st one

63 Views Asked by At

In the window click Edit -> Add Row. dlg1 Dialog is executed. By default there is a data to get an error because it tries to open dlg2 Dialog. If value in the fist row is changed dlg3 Dialog will be shown.

  1. How to i get dlg2 Dialog to show up?
  2. How do i close dlg1 Dialog after pressing a button in it?

What am i doing wrong?

main.py

#!/usr/bin/python3

import sys
import getopt
import json, csv
import os.path
import pip
#-------------------------------------------------
from datetime import datetime, date
from dateutil.relativedelta import relativedelta
#-------------------------------------------------
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *

from main_window_ui import Ui_MainWindow
#-------------------------------------------------
data = [{"edrpou": "44444", "name": "Org Name 1", "serviced": ""},{"edrpou": "5666667", "name": "Org Name 2", "serviced": ""}]
fileEReports = 'data.json'
inEdrpou = ""
##################################################
def check_spaces(whatT):
    w = 0
    while w == 0:
        whatF = input(whatT)
        if (' ' in whatF):
            print("error, no space allowed!")
        else:
            w = 1
            return whatF
##################################################
def add_data_to_file(filer):
    isExist = os.path.exists(filer)
    if isExist == False:
        with open(filer, "w+") as write_file:
            #json.dump(data, write_file, sort_keys=True, indent=4, separators=(',', ': '))
            json.dump(data, write_file)
        write_file.close()
##################################################
def get_orgs_from_file(filer):
    with open(filer, "r") as read_file:
        for jsonObj in read_file:
            orgsDict = json.loads(jsonObj)
    read_file.close()
    return orgsDict

def write_orgs_to_file(filer, data):
    with open(filer, "w+") as write_file:
        json.dump(data, write_file)
    write_file.close()

##################################################
class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        Ui_MainWindow.__init__(self)
        super(MainWindow, self).__init__()
        self.setupUi(self)
###################### vars ######################
        self.action_add_row_orgs.triggered.connect(lambda: self.dialog_add_org())
###################### slot load ######################
    def dialog_add_org(self):
        dlg1 = QDialog(self)
        dlg1.resize(200,30)
        layout = QVBoxLayout(dlg1)

        lineEdrpou = QLineEdit("5666667")
        lineName = QLineEdit("Yolo")
        buttonAdd = QPushButton("Add Data")

        layout.addWidget(lineEdrpou)
        layout.addWidget(lineName)
        layout.addWidget(buttonAdd)

        buttonAdd.clicked.connect(lambda: self.add_org(lineEdrpou.text(), lineName.text()))

        dlg1.exec_()
        # dlg1.close()

    def add_org(self, edrpou, name):
        new_row = [edrpou, name]
        print(new_row)
        add_new_organisation(fileEReports, edrpou, name, "")
        # MainWindow(dialog_add_org(dlg1.close()))

    def message_org_exist(self, edrpou):
        dlg2 = QMessageBox(self)
        dlg2.setWindowTitle("Attention!")
        dlg2.setText("Organisation with Edrpou {0} already exists!".format(edrpou))
        button = dlg2.exec_()

        if button == QMessageBox.Ok:
            print("OK!")
            dlg2.close()

def add_new_organisation(filer, inEdrpou, inNewData, inType):
    orgsDict = get_orgs_from_file(filer)
    lenOrgsDict = len(orgsDict)

    itExist = 0
    for i in range(lenOrgsDict):
        if orgsDict[i]["edrpou"] == inEdrpou:
            itExist = itExist + 1

    if itExist == 0:
        dlg3 = QMessageBox()
        dlg3.setWindowTitle("Success!")
        dlg3.setText("Organisation {1} with Edrpou {0} was added!".format(inEdrpou, inNewData))
        button2 = dlg3.exec_()

        if button2 == QMessageBox.Ok:
            print("OK!")
            dlg3.close()

        print("adding new Organisation {0} - {1}".format(inEdrpou, inNewData))
    else:
        MainWindow(lambda: message_org_exist(inEdrpou))
        print("Organisation with this Edrpou already exist")


def main(argv):
    app = QApplication(sys.argv)
    window = MainWindow()
    # print(PyQt5.QtWidgets.QStyleFactory.keys())
    # ['Breeze', 'Oxygen', 'QtCurve', 'Windows', 'Fusion']
    app.setStyle('Breeze')

    window.show()
    sys.exit(app.exec_())
##################################################
if __name__ == "__main__":
    add_data_to_file(fileEReports)
    main(sys.argv)
##################################################

main_window_ui.py

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'ui\main_window.ui'
#
# Created by: PyQt5 UI code generator 5.15.7
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(736, 551)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.centralwidget)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.verticalLayoutOrgs = QtWidgets.QVBoxLayout()
        self.verticalLayoutOrgs.setSpacing(3)
        self.verticalLayoutOrgs.setObjectName("verticalLayoutOrgs")
        self.horizontalLayoutOrgs = QtWidgets.QHBoxLayout()
        self.horizontalLayoutOrgs.setSizeConstraint(QtWidgets.QLayout.SetDefaultConstraint)
        self.horizontalLayoutOrgs.setSpacing(3)
        self.horizontalLayoutOrgs.setObjectName("horizontalLayoutOrgs")
        self.checkBoxServiced = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBoxServiced.setLocale(QtCore.QLocale(QtCore.QLocale.Ukrainian, QtCore.QLocale.Ukraine))
        self.checkBoxServiced.setChecked(True)
        self.checkBoxServiced.setObjectName("checkBoxServiced")
        self.horizontalLayoutOrgs.addWidget(self.checkBoxServiced)
        self.checkBoxUr = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBoxUr.setChecked(True)
        self.checkBoxUr.setObjectName("checkBoxUr")
        self.horizontalLayoutOrgs.addWidget(self.checkBoxUr)
        self.checkBoxFop = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBoxFop.setChecked(True)
        self.checkBoxFop.setObjectName("checkBoxFop")
        self.horizontalLayoutOrgs.addWidget(self.checkBoxFop)
        self.horizontalLayoutOrgs.setStretch(2, 1)
        self.verticalLayoutOrgs.addLayout(self.horizontalLayoutOrgs)
        spacerItem = QtWidgets.QSpacerItem(0, 8, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
        self.verticalLayoutOrgs.addItem(spacerItem)
        self.lineEditOrgs = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEditOrgs.setObjectName("lineEditOrgs")
        self.verticalLayoutOrgs.addWidget(self.lineEditOrgs)
        self.tableViewOrgs = QtWidgets.QTableView(self.centralwidget)
        self.tableViewOrgs.setLocale(QtCore.QLocale(QtCore.QLocale.Ukrainian, QtCore.QLocale.Ukraine))
        self.tableViewOrgs.setAlternatingRowColors(True)
        self.tableViewOrgs.setObjectName("tableViewOrgs")
        self.verticalLayoutOrgs.addWidget(self.tableViewOrgs)
        self.horizontalLayout.addLayout(self.verticalLayoutOrgs)
        self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
        self.tabWidget.setObjectName("tabWidget")
        self.tab_keys = QtWidgets.QWidget()
        self.tab_keys.setObjectName("tab_keys")
        self.verticalLayoutKeys = QtWidgets.QVBoxLayout(self.tab_keys)
        self.verticalLayoutKeys.setContentsMargins(0, 3, 0, 0)
        self.verticalLayoutKeys.setSpacing(3)
        self.verticalLayoutKeys.setObjectName("verticalLayoutKeys")
        self.lineEditKeys = QtWidgets.QLineEdit(self.tab_keys)
        self.lineEditKeys.setObjectName("lineEditKeys")
        self.verticalLayoutKeys.addWidget(self.lineEditKeys)
        self.tableViewKeys = QtWidgets.QTableView(self.tab_keys)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.tableViewKeys.sizePolicy().hasHeightForWidth())
        self.tableViewKeys.setSizePolicy(sizePolicy)
        self.tableViewKeys.setLocale(QtCore.QLocale(QtCore.QLocale.Ukrainian, QtCore.QLocale.Ukraine))
        self.tableViewKeys.setObjectName("tableViewKeys")
        self.verticalLayoutKeys.addWidget(self.tableViewKeys)
        self.tabWidget.addTab(self.tab_keys, "")
        self.tab_lic = QtWidgets.QWidget()
        self.tab_lic.setObjectName("tab_lic")
        self.verticalLayoutLic = QtWidgets.QVBoxLayout(self.tab_lic)
        self.verticalLayoutLic.setContentsMargins(0, 3, 0, 0)
        self.verticalLayoutLic.setSpacing(3)
        self.verticalLayoutLic.setObjectName("verticalLayoutLic")
        self.lineEditLic = QtWidgets.QLineEdit(self.tab_lic)
        self.lineEditLic.setObjectName("lineEditLic")
        self.verticalLayoutLic.addWidget(self.lineEditLic)
        self.tableViewLic = QtWidgets.QTableView(self.tab_lic)
        self.tableViewLic.setLocale(QtCore.QLocale(QtCore.QLocale.Ukrainian, QtCore.QLocale.Ukraine))
        self.tableViewLic.setObjectName("tableViewLic")
        self.verticalLayoutLic.addWidget(self.tableViewLic)
        self.tabWidget.addTab(self.tab_lic, "")
        self.tab_acc = QtWidgets.QWidget()
        self.tab_acc.setObjectName("tab_acc")
        self.verticalLayoutAcc = QtWidgets.QVBoxLayout(self.tab_acc)
        self.verticalLayoutAcc.setContentsMargins(0, 3, 0, 0)
        self.verticalLayoutAcc.setSpacing(3)
        self.verticalLayoutAcc.setObjectName("verticalLayoutAcc")
        self.lineEditAcc = QtWidgets.QLineEdit(self.tab_acc)
        self.lineEditAcc.setObjectName("lineEditAcc")
        self.verticalLayoutAcc.addWidget(self.lineEditAcc)
        self.tableViewAcc = QtWidgets.QTableView(self.tab_acc)
        self.tableViewAcc.setLocale(QtCore.QLocale(QtCore.QLocale.Ukrainian, QtCore.QLocale.Ukraine))
        self.tableViewAcc.setObjectName("tableViewAcc")
        self.verticalLayoutAcc.addWidget(self.tableViewAcc)
        self.tabWidget.addTab(self.tab_acc, "")
        self.horizontalLayout.addWidget(self.tabWidget)
        self.horizontalLayout.setStretch(0, 2)
        self.horizontalLayout.setStretch(1, 4)
        self.horizontalLayout_2.addLayout(self.horizontalLayout)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 736, 21))
        self.menubar.setObjectName("menubar")
        self.menuFile = QtWidgets.QMenu(self.menubar)
        self.menuFile.setObjectName("menuFile")
        self.menu_Edit = QtWidgets.QMenu(self.menubar)
        self.menu_Edit.setObjectName("menu_Edit")
        self.menu_Option = QtWidgets.QMenu(self.menubar)
        self.menu_Option.setObjectName("menu_Option")
        MainWindow.setMenuBar(self.menubar)
        self.toolBar = QtWidgets.QToolBar(MainWindow)
        self.toolBar.setObjectName("toolBar")
        MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.action_open = QtWidgets.QAction(MainWindow)
        self.action_open.setObjectName("action_open")
        self.action_open_recent = QtWidgets.QAction(MainWindow)
        self.action_open_recent.setObjectName("action_open_recent")
        self.action_save = QtWidgets.QAction(MainWindow)
        self.action_save.setObjectName("action_save")
        self.action_exit = QtWidgets.QAction(MainWindow)
        self.action_exit.setObjectName("action_exit")
        self.action_pref = QtWidgets.QAction(MainWindow)
        self.action_pref.setObjectName("action_pref")
        self.action_org_name = QtWidgets.QAction(MainWindow)
        self.action_org_name.setObjectName("action_org_name")
        self.action_key = QtWidgets.QAction(MainWindow)
        self.action_key.setObjectName("action_key")
        self.action_copy_edrpou = QtWidgets.QAction(MainWindow)
        self.action_copy_edrpou.setObjectName("action_copy_edrpou")
        self.action_copy_name = QtWidgets.QAction(MainWindow)
        self.action_copy_name.setObjectName("action_copy_name")
        self.action_copy_pass_dir = QtWidgets.QAction(MainWindow)
        self.action_copy_pass_dir.setObjectName("action_copy_pass_dir")
        self.action_copy_pass_stamp = QtWidgets.QAction(MainWindow)
        self.action_copy_pass_stamp.setObjectName("action_copy_pass_stamp")
        self.action_copy_pass_acc = QtWidgets.QAction(MainWindow)
        self.action_copy_pass_acc.setObjectName("action_copy_pass_acc")
        self.action_copy_active_line_pass = QtWidgets.QAction(MainWindow)
        self.action_copy_active_line_pass.setObjectName("action_copy_active_line_pass")
        self.action_add_row_orgs = QtWidgets.QAction(MainWindow)
        self.action_add_row_orgs.setObjectName("action_add_row_orgs")
        self.action_remove_row_orgs = QtWidgets.QAction(MainWindow)
        self.action_remove_row_orgs.setObjectName("action_remove_row_orgs")
        self.menuFile.addAction(self.action_open)
        self.menuFile.addAction(self.action_open_recent)
        self.menuFile.addSeparator()
        self.menuFile.addAction(self.action_save)
        self.menuFile.addSeparator()
        self.menuFile.addAction(self.action_exit)
        self.menuFile.addSeparator()
        self.menu_Edit.addAction(self.action_add_row_orgs)
        self.menu_Edit.addAction(self.action_remove_row_orgs)
        self.menu_Edit.addSeparator()
        self.menu_Edit.addAction(self.action_org_name)
        self.menu_Edit.addAction(self.action_key)
        self.menu_Edit.addSeparator()
        self.menu_Edit.addAction(self.action_copy_edrpou)
        self.menu_Edit.addAction(self.action_copy_name)
        self.menu_Edit.addAction(self.action_copy_pass_dir)
        self.menu_Edit.addAction(self.action_copy_pass_stamp)
        self.menu_Edit.addAction(self.action_copy_pass_acc)
        self.menu_Edit.addSeparator()
        self.menu_Edit.addAction(self.action_copy_active_line_pass)
        self.menu_Option.addAction(self.action_pref)
        self.menubar.addAction(self.menuFile.menuAction())
        self.menubar.addAction(self.menu_Edit.menuAction())
        self.menubar.addAction(self.menu_Option.menuAction())
        self.toolBar.addAction(self.action_open)
        self.toolBar.addAction(self.action_save)
        self.toolBar.addSeparator()
        self.toolBar.addAction(self.action_copy_edrpou)
        self.toolBar.addAction(self.action_copy_name)
        self.toolBar.addAction(self.action_copy_pass_dir)
        self.toolBar.addAction(self.action_copy_pass_stamp)
        self.toolBar.addAction(self.action_copy_pass_acc)

        self.retranslateUi(MainWindow)
        self.tabWidget.setCurrentIndex(0)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
        MainWindow.setTabOrder(self.checkBoxServiced, self.checkBoxUr)
        MainWindow.setTabOrder(self.checkBoxUr, self.checkBoxFop)
        MainWindow.setTabOrder(self.checkBoxFop, self.lineEditOrgs)
        MainWindow.setTabOrder(self.lineEditOrgs, self.tabWidget)
        MainWindow.setTabOrder(self.tabWidget, self.lineEditKeys)
        MainWindow.setTabOrder(self.lineEditKeys, self.lineEditLic)
        MainWindow.setTabOrder(self.lineEditLic, self.tableViewLic)
        MainWindow.setTabOrder(self.tableViewLic, self.lineEditAcc)
        MainWindow.setTabOrder(self.lineEditAcc, self.tableViewAcc)
        MainWindow.setTabOrder(self.tableViewAcc, self.tableViewOrgs)
        MainWindow.setTabOrder(self.tableViewOrgs, self.tableViewKeys)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.centralwidget.setWhatsThis(_translate("MainWindow", "<html><head/><body><p><br/></p></body></html>"))
        self.checkBoxServiced.setText(_translate("MainWindow", "Serviced"))
        self.checkBoxUr.setText(_translate("MainWindow", "Show Ur"))
        self.checkBoxFop.setText(_translate("MainWindow", "Show Fop"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_keys), _translate("MainWindow", "Keys"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_lic), _translate("MainWindow", "Licenses"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_acc), _translate("MainWindow", "Accountants"))
        self.menuFile.setTitle(_translate("MainWindow", "&File"))
        self.menu_Edit.setTitle(_translate("MainWindow", "&Edit"))
        self.menu_Option.setTitle(_translate("MainWindow", "&Option"))
        self.toolBar.setWindowTitle(_translate("MainWindow", "toolBar"))
        self.action_open.setText(_translate("MainWindow", "&Open"))
        self.action_open.setToolTip(_translate("MainWindow", "Open file"))
        self.action_open_recent.setText(_translate("MainWindow", "Open recent"))
        self.action_open_recent.setToolTip(_translate("MainWindow", "Open recent file"))
        self.action_save.setText(_translate("MainWindow", "&Save"))
        self.action_save.setToolTip(_translate("MainWindow", "Save file"))
        self.action_exit.setText(_translate("MainWindow", "E&xit"))
        self.action_pref.setText(_translate("MainWindow", "Preferences"))
        self.action_org_name.setText(_translate("MainWindow", "Name and Edrpou"))
        self.action_key.setText(_translate("MainWindow", "Key"))
        self.action_key.setToolTip(_translate("MainWindow", "Changing Key Data"))
        self.action_copy_edrpou.setText(_translate("MainWindow", "Copy Edrpou"))
        self.action_copy_name.setText(_translate("MainWindow", "Copy Name"))
        self.action_copy_pass_dir.setText(_translate("MainWindow", "Copy Password Dir"))
        self.action_copy_pass_stamp.setText(_translate("MainWindow", "Copy Password Stamp"))
        self.action_copy_pass_acc.setText(_translate("MainWindow", "Copy Password Accountant"))
        self.action_copy_active_line_pass.setText(_translate("MainWindow", "Copy Pass"))
        self.action_add_row_orgs.setText(_translate("MainWindow", "Add Row"))
        self.action_remove_row_orgs.setText(_translate("MainWindow", "Remove Row"))

======================== edit ========================

I've found a solution to one of my problems. Now the first dialog is closing after second diaog button pressed.

Added this connect signal before dlg1.exec_():

buttonAdd.clicked.connect(dlg1.close_clicked)

dlg1.exec_()

And a small class:

class Dialog(QDialog):
    def __init__(self):
        QDialog.__init__(self)

    def close_clicked(self):
        self.close()

And used it

dlg1 = Dialog()

======================== edit 2 ========================

And i've found solution to my other trouble here: https://www.w3docs.com/snippets/python/typeerror-missing-1-required-positional-argument-self.html

# MainWindow.message_org_exist(inEdrpou)
my_instance = MainWindow()
my_instance.message_org_exist(inEdrpou)  # This works
0

There are 0 best solutions below