QtDesigner changes will be lost after redesign User Interface












3















I'm using QtDesinger for design GUI to use in python, after designing my desired UI in QtDesigner, convert it to python code and then I changed generated code to do some action in my python code, but if I changed the UI with QtDesigner and convert it to python code again, I lost my previous changes on my code.



how can I solve the problem?



can we Spreading a Class Over Multiple Files in python to write code in other files?










share|improve this question

























  • Please see Using Qt Designer in the PyQt5 docs for examples showing how to use the code generated by pyuic.

    – ekhumoro
    Oct 3 '17 at 13:52
















3















I'm using QtDesinger for design GUI to use in python, after designing my desired UI in QtDesigner, convert it to python code and then I changed generated code to do some action in my python code, but if I changed the UI with QtDesigner and convert it to python code again, I lost my previous changes on my code.



how can I solve the problem?



can we Spreading a Class Over Multiple Files in python to write code in other files?










share|improve this question

























  • Please see Using Qt Designer in the PyQt5 docs for examples showing how to use the code generated by pyuic.

    – ekhumoro
    Oct 3 '17 at 13:52














3












3








3








I'm using QtDesinger for design GUI to use in python, after designing my desired UI in QtDesigner, convert it to python code and then I changed generated code to do some action in my python code, but if I changed the UI with QtDesigner and convert it to python code again, I lost my previous changes on my code.



how can I solve the problem?



can we Spreading a Class Over Multiple Files in python to write code in other files?










share|improve this question
















I'm using QtDesinger for design GUI to use in python, after designing my desired UI in QtDesigner, convert it to python code and then I changed generated code to do some action in my python code, but if I changed the UI with QtDesigner and convert it to python code again, I lost my previous changes on my code.



how can I solve the problem?



can we Spreading a Class Over Multiple Files in python to write code in other files?







python pyqt pyqt5 qt-designer






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Sep 28 '18 at 16:05









eyllanesc

79.4k103258




79.4k103258










asked Oct 3 '17 at 12:37









Ahad aghapourAhad aghapour

1,46311325




1,46311325













  • Please see Using Qt Designer in the PyQt5 docs for examples showing how to use the code generated by pyuic.

    – ekhumoro
    Oct 3 '17 at 13:52



















  • Please see Using Qt Designer in the PyQt5 docs for examples showing how to use the code generated by pyuic.

    – ekhumoro
    Oct 3 '17 at 13:52

















Please see Using Qt Designer in the PyQt5 docs for examples showing how to use the code generated by pyuic.

– ekhumoro
Oct 3 '17 at 13:52





Please see Using Qt Designer in the PyQt5 docs for examples showing how to use the code generated by pyuic.

– ekhumoro
Oct 3 '17 at 13:52












2 Answers
2






active

oldest

votes


















6














To avoid having these problems it is advisable not to modify this file but to create a new file where we implement a class that uses that design.



For example, suppose you have used the MainWindow template in the design.ui file, then convert it to Ui_Design.py like to the following structure:



from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
def setupUi(self, MainWindow):
[...]

def retranslateUi(self, MainWindow):
[...]


Then we will create a new file that we will call logic.py where we will create the file that handles the logic and that uses the previous design:



class Logic(QMainWindow, Ui_MainWindow):
def __init__(self, *args, **kwargs):
QMainWindow.__init__(self, *args, **kwargs)
self.setupUi(self)


So even if you modify the design and generate the file again .py you will not have to modify the file of the logic.



To generalize the idea we must have the following rules but for this the logic class must have the following structure:



class Logic(PyQtClass, DesignClass):
def __init__(self, *args, **kwargs):
PyQtClass.__init__(self, *args, **kwargs)
self.setupUi(self)



  • PyQtClass: This class depends on the design chosen.




Template PyQtClass
─────────────────────────────────────────────
Main Window QMainWindow
Widget QWidget
Dialog with Buttons Bottom QDialog
Dialog with Buttons Right QDialog
Dialog with Without Buttons QDialog




  • DesignClass: The name of the class that appears in your design.




The advantage of this implementation is that you can implement all the logic since it is a widget, for example we will implement the solution closing pyqt messageBox with closeevent of the parent window :



class Logic(QMainWindow, Ui_MainWindow):
def __init__(self, *args, **kwargs):
QMainWindow.__init__(self, *args, **kwargs)
self.setupUi(self)
def closeEvent(self, event):
answer = QtWidgets.QMessageBox.question(
self,
'Are you sure you want to quit ?',
'Task is in progress !',
QtWidgets.QMessageBox.Yes,
QtWidgets.QMessageBox.No)
if answer == QtWidgets.QMessageBox.Yes:
event.accept()
else:
event.ignore()





share|improve this answer

































    0














    The easiest way is to use the *.ui file directly in the python code, you don't need convert to *.py file every time you change the ui.
    you can use this pseudo code in your project.



    # imports
    from PyQt5 import uic

    # load ui file
    baseUIClass, baseUIWidget = uic.loadUiType("MainGui.ui")

    # use loaded ui file in the logic class
    class Logic(baseUIWidget, baseUIClass):
    def __init__(self, parent=None):
    super(Logic, self).__init__(parent)
    self.setupUi(self)
    .
    .
    .
    .

    def main():
    app = QtWidgets.QApplication(sys.argv)
    ui = Logic(None)
    ui.showMaximized()
    sys.exit(app.exec_())





    share|improve this answer

























      Your Answer






      StackExchange.ifUsing("editor", function () {
      StackExchange.using("externalEditor", function () {
      StackExchange.using("snippets", function () {
      StackExchange.snippets.init();
      });
      });
      }, "code-snippets");

      StackExchange.ready(function() {
      var channelOptions = {
      tags: "".split(" "),
      id: "1"
      };
      initTagRenderer("".split(" "), "".split(" "), channelOptions);

      StackExchange.using("externalEditor", function() {
      // Have to fire editor after snippets, if snippets enabled
      if (StackExchange.settings.snippets.snippetsEnabled) {
      StackExchange.using("snippets", function() {
      createEditor();
      });
      }
      else {
      createEditor();
      }
      });

      function createEditor() {
      StackExchange.prepareEditor({
      heartbeatType: 'answer',
      autoActivateHeartbeat: false,
      convertImagesToLinks: true,
      noModals: true,
      showLowRepImageUploadWarning: true,
      reputationToPostImages: 10,
      bindNavPrevention: true,
      postfix: "",
      imageUploader: {
      brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
      contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
      allowUrls: true
      },
      onDemand: true,
      discardSelector: ".discard-answer"
      ,immediatelyShowMarkdownHelp:true
      });


      }
      });














      draft saved

      draft discarded


















      StackExchange.ready(
      function () {
      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f46544780%2fqtdesigner-changes-will-be-lost-after-redesign-user-interface%23new-answer', 'question_page');
      }
      );

      Post as a guest















      Required, but never shown

























      2 Answers
      2






      active

      oldest

      votes








      2 Answers
      2






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes









      6














      To avoid having these problems it is advisable not to modify this file but to create a new file where we implement a class that uses that design.



      For example, suppose you have used the MainWindow template in the design.ui file, then convert it to Ui_Design.py like to the following structure:



      from PyQt5 import QtCore, QtGui, QtWidgets

      class Ui_MainWindow(object):
      def setupUi(self, MainWindow):
      [...]

      def retranslateUi(self, MainWindow):
      [...]


      Then we will create a new file that we will call logic.py where we will create the file that handles the logic and that uses the previous design:



      class Logic(QMainWindow, Ui_MainWindow):
      def __init__(self, *args, **kwargs):
      QMainWindow.__init__(self, *args, **kwargs)
      self.setupUi(self)


      So even if you modify the design and generate the file again .py you will not have to modify the file of the logic.



      To generalize the idea we must have the following rules but for this the logic class must have the following structure:



      class Logic(PyQtClass, DesignClass):
      def __init__(self, *args, **kwargs):
      PyQtClass.__init__(self, *args, **kwargs)
      self.setupUi(self)



      • PyQtClass: This class depends on the design chosen.




      Template PyQtClass
      ─────────────────────────────────────────────
      Main Window QMainWindow
      Widget QWidget
      Dialog with Buttons Bottom QDialog
      Dialog with Buttons Right QDialog
      Dialog with Without Buttons QDialog




      • DesignClass: The name of the class that appears in your design.




      The advantage of this implementation is that you can implement all the logic since it is a widget, for example we will implement the solution closing pyqt messageBox with closeevent of the parent window :



      class Logic(QMainWindow, Ui_MainWindow):
      def __init__(self, *args, **kwargs):
      QMainWindow.__init__(self, *args, **kwargs)
      self.setupUi(self)
      def closeEvent(self, event):
      answer = QtWidgets.QMessageBox.question(
      self,
      'Are you sure you want to quit ?',
      'Task is in progress !',
      QtWidgets.QMessageBox.Yes,
      QtWidgets.QMessageBox.No)
      if answer == QtWidgets.QMessageBox.Yes:
      event.accept()
      else:
      event.ignore()





      share|improve this answer






























        6














        To avoid having these problems it is advisable not to modify this file but to create a new file where we implement a class that uses that design.



        For example, suppose you have used the MainWindow template in the design.ui file, then convert it to Ui_Design.py like to the following structure:



        from PyQt5 import QtCore, QtGui, QtWidgets

        class Ui_MainWindow(object):
        def setupUi(self, MainWindow):
        [...]

        def retranslateUi(self, MainWindow):
        [...]


        Then we will create a new file that we will call logic.py where we will create the file that handles the logic and that uses the previous design:



        class Logic(QMainWindow, Ui_MainWindow):
        def __init__(self, *args, **kwargs):
        QMainWindow.__init__(self, *args, **kwargs)
        self.setupUi(self)


        So even if you modify the design and generate the file again .py you will not have to modify the file of the logic.



        To generalize the idea we must have the following rules but for this the logic class must have the following structure:



        class Logic(PyQtClass, DesignClass):
        def __init__(self, *args, **kwargs):
        PyQtClass.__init__(self, *args, **kwargs)
        self.setupUi(self)



        • PyQtClass: This class depends on the design chosen.




        Template PyQtClass
        ─────────────────────────────────────────────
        Main Window QMainWindow
        Widget QWidget
        Dialog with Buttons Bottom QDialog
        Dialog with Buttons Right QDialog
        Dialog with Without Buttons QDialog




        • DesignClass: The name of the class that appears in your design.




        The advantage of this implementation is that you can implement all the logic since it is a widget, for example we will implement the solution closing pyqt messageBox with closeevent of the parent window :



        class Logic(QMainWindow, Ui_MainWindow):
        def __init__(self, *args, **kwargs):
        QMainWindow.__init__(self, *args, **kwargs)
        self.setupUi(self)
        def closeEvent(self, event):
        answer = QtWidgets.QMessageBox.question(
        self,
        'Are you sure you want to quit ?',
        'Task is in progress !',
        QtWidgets.QMessageBox.Yes,
        QtWidgets.QMessageBox.No)
        if answer == QtWidgets.QMessageBox.Yes:
        event.accept()
        else:
        event.ignore()





        share|improve this answer




























          6












          6








          6







          To avoid having these problems it is advisable not to modify this file but to create a new file where we implement a class that uses that design.



          For example, suppose you have used the MainWindow template in the design.ui file, then convert it to Ui_Design.py like to the following structure:



          from PyQt5 import QtCore, QtGui, QtWidgets

          class Ui_MainWindow(object):
          def setupUi(self, MainWindow):
          [...]

          def retranslateUi(self, MainWindow):
          [...]


          Then we will create a new file that we will call logic.py where we will create the file that handles the logic and that uses the previous design:



          class Logic(QMainWindow, Ui_MainWindow):
          def __init__(self, *args, **kwargs):
          QMainWindow.__init__(self, *args, **kwargs)
          self.setupUi(self)


          So even if you modify the design and generate the file again .py you will not have to modify the file of the logic.



          To generalize the idea we must have the following rules but for this the logic class must have the following structure:



          class Logic(PyQtClass, DesignClass):
          def __init__(self, *args, **kwargs):
          PyQtClass.__init__(self, *args, **kwargs)
          self.setupUi(self)



          • PyQtClass: This class depends on the design chosen.




          Template PyQtClass
          ─────────────────────────────────────────────
          Main Window QMainWindow
          Widget QWidget
          Dialog with Buttons Bottom QDialog
          Dialog with Buttons Right QDialog
          Dialog with Without Buttons QDialog




          • DesignClass: The name of the class that appears in your design.




          The advantage of this implementation is that you can implement all the logic since it is a widget, for example we will implement the solution closing pyqt messageBox with closeevent of the parent window :



          class Logic(QMainWindow, Ui_MainWindow):
          def __init__(self, *args, **kwargs):
          QMainWindow.__init__(self, *args, **kwargs)
          self.setupUi(self)
          def closeEvent(self, event):
          answer = QtWidgets.QMessageBox.question(
          self,
          'Are you sure you want to quit ?',
          'Task is in progress !',
          QtWidgets.QMessageBox.Yes,
          QtWidgets.QMessageBox.No)
          if answer == QtWidgets.QMessageBox.Yes:
          event.accept()
          else:
          event.ignore()





          share|improve this answer















          To avoid having these problems it is advisable not to modify this file but to create a new file where we implement a class that uses that design.



          For example, suppose you have used the MainWindow template in the design.ui file, then convert it to Ui_Design.py like to the following structure:



          from PyQt5 import QtCore, QtGui, QtWidgets

          class Ui_MainWindow(object):
          def setupUi(self, MainWindow):
          [...]

          def retranslateUi(self, MainWindow):
          [...]


          Then we will create a new file that we will call logic.py where we will create the file that handles the logic and that uses the previous design:



          class Logic(QMainWindow, Ui_MainWindow):
          def __init__(self, *args, **kwargs):
          QMainWindow.__init__(self, *args, **kwargs)
          self.setupUi(self)


          So even if you modify the design and generate the file again .py you will not have to modify the file of the logic.



          To generalize the idea we must have the following rules but for this the logic class must have the following structure:



          class Logic(PyQtClass, DesignClass):
          def __init__(self, *args, **kwargs):
          PyQtClass.__init__(self, *args, **kwargs)
          self.setupUi(self)



          • PyQtClass: This class depends on the design chosen.




          Template PyQtClass
          ─────────────────────────────────────────────
          Main Window QMainWindow
          Widget QWidget
          Dialog with Buttons Bottom QDialog
          Dialog with Buttons Right QDialog
          Dialog with Without Buttons QDialog




          • DesignClass: The name of the class that appears in your design.




          The advantage of this implementation is that you can implement all the logic since it is a widget, for example we will implement the solution closing pyqt messageBox with closeevent of the parent window :



          class Logic(QMainWindow, Ui_MainWindow):
          def __init__(self, *args, **kwargs):
          QMainWindow.__init__(self, *args, **kwargs)
          self.setupUi(self)
          def closeEvent(self, event):
          answer = QtWidgets.QMessageBox.question(
          self,
          'Are you sure you want to quit ?',
          'Task is in progress !',
          QtWidgets.QMessageBox.Yes,
          QtWidgets.QMessageBox.No)
          if answer == QtWidgets.QMessageBox.Yes:
          event.accept()
          else:
          event.ignore()






          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited May 15 '18 at 3:15

























          answered Oct 3 '17 at 12:54









          eyllanesceyllanesc

          79.4k103258




          79.4k103258

























              0














              The easiest way is to use the *.ui file directly in the python code, you don't need convert to *.py file every time you change the ui.
              you can use this pseudo code in your project.



              # imports
              from PyQt5 import uic

              # load ui file
              baseUIClass, baseUIWidget = uic.loadUiType("MainGui.ui")

              # use loaded ui file in the logic class
              class Logic(baseUIWidget, baseUIClass):
              def __init__(self, parent=None):
              super(Logic, self).__init__(parent)
              self.setupUi(self)
              .
              .
              .
              .

              def main():
              app = QtWidgets.QApplication(sys.argv)
              ui = Logic(None)
              ui.showMaximized()
              sys.exit(app.exec_())





              share|improve this answer






























                0














                The easiest way is to use the *.ui file directly in the python code, you don't need convert to *.py file every time you change the ui.
                you can use this pseudo code in your project.



                # imports
                from PyQt5 import uic

                # load ui file
                baseUIClass, baseUIWidget = uic.loadUiType("MainGui.ui")

                # use loaded ui file in the logic class
                class Logic(baseUIWidget, baseUIClass):
                def __init__(self, parent=None):
                super(Logic, self).__init__(parent)
                self.setupUi(self)
                .
                .
                .
                .

                def main():
                app = QtWidgets.QApplication(sys.argv)
                ui = Logic(None)
                ui.showMaximized()
                sys.exit(app.exec_())





                share|improve this answer




























                  0












                  0








                  0







                  The easiest way is to use the *.ui file directly in the python code, you don't need convert to *.py file every time you change the ui.
                  you can use this pseudo code in your project.



                  # imports
                  from PyQt5 import uic

                  # load ui file
                  baseUIClass, baseUIWidget = uic.loadUiType("MainGui.ui")

                  # use loaded ui file in the logic class
                  class Logic(baseUIWidget, baseUIClass):
                  def __init__(self, parent=None):
                  super(Logic, self).__init__(parent)
                  self.setupUi(self)
                  .
                  .
                  .
                  .

                  def main():
                  app = QtWidgets.QApplication(sys.argv)
                  ui = Logic(None)
                  ui.showMaximized()
                  sys.exit(app.exec_())





                  share|improve this answer















                  The easiest way is to use the *.ui file directly in the python code, you don't need convert to *.py file every time you change the ui.
                  you can use this pseudo code in your project.



                  # imports
                  from PyQt5 import uic

                  # load ui file
                  baseUIClass, baseUIWidget = uic.loadUiType("MainGui.ui")

                  # use loaded ui file in the logic class
                  class Logic(baseUIWidget, baseUIClass):
                  def __init__(self, parent=None):
                  super(Logic, self).__init__(parent)
                  self.setupUi(self)
                  .
                  .
                  .
                  .

                  def main():
                  app = QtWidgets.QApplication(sys.argv)
                  ui = Logic(None)
                  ui.showMaximized()
                  sys.exit(app.exec_())






                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited May 15 '18 at 2:25









                  eyllanesc

                  79.4k103258




                  79.4k103258










                  answered Jan 24 '18 at 8:40









                  Ahad aghapourAhad aghapour

                  1,46311325




                  1,46311325






























                      draft saved

                      draft discarded




















































                      Thanks for contributing an answer to Stack Overflow!


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid



                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.


                      To learn more, see our tips on writing great answers.




                      draft saved


                      draft discarded














                      StackExchange.ready(
                      function () {
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f46544780%2fqtdesigner-changes-will-be-lost-after-redesign-user-interface%23new-answer', 'question_page');
                      }
                      );

                      Post as a guest















                      Required, but never shown





















































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown

































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown







                      Popular posts from this blog

                      Contact image not getting when fetch all contact list from iPhone by CNContact

                      count number of partitions of a set with n elements into k subsets

                      A CLEAN and SIMPLE way to add appendices to Table of Contents and bookmarks