Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Qt for Python
  4. How to add navigation to application
Forum Updated to NodeBB v4.3 + New Features

How to add navigation to application

Scheduled Pinned Locked Moved Unsolved Qt for Python
2 Posts 2 Posters 445 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • K Offline
    K Offline
    Kyler
    wrote on last edited by
    #1

    Hello, first off I am new to PyQt5, so I apologize if I make a mistake in my explanation.

    Background
    I am building a desktop application, and I am trying to figure out how to navigate to a new page once an event is triggered such as a click on a QPushButton. Right now, I have a login page, and I would like to display the user's dashboard if they use the correct credentials.

    Problem
    The issue I am having is understanding how to do the actual updating to the screen. If possible, I would like to have two classes one for the login screen, and another for the dashboard and then just replace the login part with the dashboard when it's needed. I have tried to do something like this, but I end up with 2 individual windows rather than just updating the current window. I might be able to write some messy logic that would utilize the .close() and .show() methods, but I would imagine there is a cleaner way to do so.

    A Brief Version of My Code

    # This class is for displaying the simple login screen 
    class Login(QtWidgets.QMainWindow):
        def __init__(self):
            super(Login, self).__init__()
            login_path = ".//UI Files//login.ui"
            uic.loadUi(os.path.join(login_path, "login.ui"), self) 
    
            self.loginbutton = self.findChild(QtWidgets.QPushButton,"loginbutton")
            self.usernamefield = self.findChild(QtWidgets.QLineEdit, "usernamefield")
            self.passwordfield = self.findChild(QtWidgets.QLineEdit, "passwordfield")
    
            def sometypeoffunction(self):
             # This function would just verify the credentials 
    
    # This class would be for displaying the dashboard
    class MainUI(QtWidgets.QMainWindow):
        def __init__(self):
            super(MainUI, self).__init__()
            ui_path = os.path.dirname(os.path.abspath(__file__))
            uic.loadUi(os.path.join(ui_path, "mainui.ui"), self) 
    
            # Sidebar assignments 
            self.logo = self.findChild(QtWidgets.QLabel,"logo")
            self.newpatientbuttion = self.findChild(QtWidgets.QLabel,"newpatientbutton")   
    
            
            self.graphlist = QtWidgets.QListWidget(self)
            temp = ["One", "Two", "Three"]
            self.graphlist.addItems(temp)
            self.graphlist.setGeometry(8,190,191,241)
            self.graphlist.setStyleSheet("background-color: rgb(209, 102, 24); border:none; color:white")
            self.graphlist.setFont(QtGui.QFont("Ariel", 14))
            self.graphlist.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
            #Topbar assignemts
            self.searchbar = self.findChild(QtWidgets.QLineEdit, "lineEdit")
            self.logoutbutton = self.findChild(QtWidgets.QLabel,"logoutbutton")
            self.confirmbutton = self.findChild(QtWidgets.QPushButton, "confirmbutton")
    
    def main():
        app = QtWidgets.QApplication(sys.argv)
        
        login = Login()
        login.show()
        
        # I would need some way to not show window until the login is verified 
        window = MainUI()
        window.show()
        app.exec_()
    
    
    if __name__ == "__main__":
        main()
    
    

    My WireFrame for Context

    I want to start off from a login page as so
    Wireframe login.PNG

    Then once the user logs in, the application should update as so,

    Wireframe.PNG

    From within this dashboard, it would as update as so
    Wireframe Profile.PNG

    My Take
    I believe that my problem here is that both classes inherit from QMainWindow however, I am not exactly how to handle this situation. Should just the Login class inherit from this class? If so, then what should MainUI inherit from? I could be completely wrong, but I wanted to attempted this before asking for help. If someone could explain to me what I am doing wrong I would greatly appreciate it. I haven't been able to find many similar examples so, I am running out of solutions I can think of. Thank you.

    jsulmJ 1 Reply Last reply
    0
    • K Kyler

      Hello, first off I am new to PyQt5, so I apologize if I make a mistake in my explanation.

      Background
      I am building a desktop application, and I am trying to figure out how to navigate to a new page once an event is triggered such as a click on a QPushButton. Right now, I have a login page, and I would like to display the user's dashboard if they use the correct credentials.

      Problem
      The issue I am having is understanding how to do the actual updating to the screen. If possible, I would like to have two classes one for the login screen, and another for the dashboard and then just replace the login part with the dashboard when it's needed. I have tried to do something like this, but I end up with 2 individual windows rather than just updating the current window. I might be able to write some messy logic that would utilize the .close() and .show() methods, but I would imagine there is a cleaner way to do so.

      A Brief Version of My Code

      # This class is for displaying the simple login screen 
      class Login(QtWidgets.QMainWindow):
          def __init__(self):
              super(Login, self).__init__()
              login_path = ".//UI Files//login.ui"
              uic.loadUi(os.path.join(login_path, "login.ui"), self) 
      
              self.loginbutton = self.findChild(QtWidgets.QPushButton,"loginbutton")
              self.usernamefield = self.findChild(QtWidgets.QLineEdit, "usernamefield")
              self.passwordfield = self.findChild(QtWidgets.QLineEdit, "passwordfield")
      
              def sometypeoffunction(self):
               # This function would just verify the credentials 
      
      # This class would be for displaying the dashboard
      class MainUI(QtWidgets.QMainWindow):
          def __init__(self):
              super(MainUI, self).__init__()
              ui_path = os.path.dirname(os.path.abspath(__file__))
              uic.loadUi(os.path.join(ui_path, "mainui.ui"), self) 
      
              # Sidebar assignments 
              self.logo = self.findChild(QtWidgets.QLabel,"logo")
              self.newpatientbuttion = self.findChild(QtWidgets.QLabel,"newpatientbutton")   
      
              
              self.graphlist = QtWidgets.QListWidget(self)
              temp = ["One", "Two", "Three"]
              self.graphlist.addItems(temp)
              self.graphlist.setGeometry(8,190,191,241)
              self.graphlist.setStyleSheet("background-color: rgb(209, 102, 24); border:none; color:white")
              self.graphlist.setFont(QtGui.QFont("Ariel", 14))
              self.graphlist.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
              #Topbar assignemts
              self.searchbar = self.findChild(QtWidgets.QLineEdit, "lineEdit")
              self.logoutbutton = self.findChild(QtWidgets.QLabel,"logoutbutton")
              self.confirmbutton = self.findChild(QtWidgets.QPushButton, "confirmbutton")
      
      def main():
          app = QtWidgets.QApplication(sys.argv)
          
          login = Login()
          login.show()
          
          # I would need some way to not show window until the login is verified 
          window = MainUI()
          window.show()
          app.exec_()
      
      
      if __name__ == "__main__":
          main()
      
      

      My WireFrame for Context

      I want to start off from a login page as so
      Wireframe login.PNG

      Then once the user logs in, the application should update as so,

      Wireframe.PNG

      From within this dashboard, it would as update as so
      Wireframe Profile.PNG

      My Take
      I believe that my problem here is that both classes inherit from QMainWindow however, I am not exactly how to handle this situation. Should just the Login class inherit from this class? If so, then what should MainUI inherit from? I could be completely wrong, but I wanted to attempted this before asking for help. If someone could explain to me what I am doing wrong I would greatly appreciate it. I haven't been able to find many similar examples so, I am running out of solutions I can think of. Thank you.

      jsulmJ Offline
      jsulmJ Offline
      jsulm
      Lifetime Qt Champion
      wrote on last edited by jsulm
      #2

      @Kyler The log-in window does not have to be a main window. Simply use a widget without parent - it will be shown as window. Or better use QDialog for that.

      https://forum.qt.io/topic/113070/qt-code-of-conduct

      1 Reply Last reply
      2

      • Login

      • Login or register to search.
      • First post
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • Users
      • Groups
      • Search
      • Get Qt Extensions
      • Unsolved