Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Qt for Python
  4. Additional windows not opening on correct monitor
Qt 6.11 is out! See what's new in the release blog

Additional windows not opening on correct monitor

Scheduled Pinned Locked Moved Solved Qt for Python
22 Posts 5 Posters 17.3k Views 2 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.
  • F Offline
    F Offline
    fvez_demtroys
    wrote on last edited by
    #10

    Hi Friedemannkleint,

    I find using saveGeometry and restoreGeometry to cause some weird visual glitches on startup.
    When the settings are restored the screen visibly shrinks to the right size and moves to the correct position.

    Using move does not do this, the transition is instant, as I think it should be.

    As for QWidget.screen(), I saw that this exists, however, there seems to be no way for me to set the screen once I have it.
    I did not find any setScreen function.

    Thanks,
    FVez

    1 Reply Last reply
    0
    • F Offline
      F Offline
      fvez_demtroys
      wrote on last edited by
      #11

      Seems I have spoken too fast.
      QWidget does have a setScreen function.

      However this function is not present for QMainWindow.

      JonBJ 1 Reply Last reply
      0
      • F fvez_demtroys

        Seems I have spoken too fast.
        QWidget does have a setScreen function.

        However this function is not present for QMainWindow.

        JonBJ Offline
        JonBJ Offline
        JonB
        wrote on last edited by
        #12

        @fvez_demtroys
        QMainWindow is derived from QWidget, so it must have all its methods....

        jsulmJ 1 Reply Last reply
        0
        • F Offline
          F Offline
          fvez_demtroys
          wrote on last edited by
          #13

          Hi JonB,

          Here is my additional window.

          class HelperWindow(QMainWindow):
              def __init__(self, mainWindow):
                  super().__init__()
                  self.mainWindow = mainWindow
                  self.setMinimumSize(900, 700)
                  self.setWindowTitle('Helper')
                  self.initialPosition()
          
              def initialPosition(self):
                  geometry = self.frameGeometry()
                  centerPoint = QApplication.desktop().availableGeometry(self.mainPage.mainWindow).center()
                  centerPoint.setY(self.mainPage.tabWidget.y())
                  geometry.moveCenter(centerPoint)
                  self.move(geometry.topRight())
                  self.setScreen(self.mainPage.mainWindow.screen())
          

          I get :
          AttributeError: 'HelperWindow' object has no attribute 'setScreen'

          Any idea if I have an error in my code?
          It should inherit all methods from QMainWindow...

          FVez

          1 Reply Last reply
          0
          • JonBJ JonB

            @fvez_demtroys
            QMainWindow is derived from QWidget, so it must have all its methods....

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

            @JonB I think setScreen is not present in Qt5 but in in Qt6

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

            JonBJ 1 Reply Last reply
            0
            • F Offline
              F Offline
              fvez_demtroys
              wrote on last edited by
              #15

              Is there no simple way to align both windows?
              I want the top of the second window to be aligned with the top of the main window. Nothing more.

              Thanks!
              FVez

              1 Reply Last reply
              0
              • F Offline
                F Offline
                fvez_demtroys
                wrote on last edited by
                #16

                When I try to simply self.move(self.mainWindow.pos())
                I get the following error.
                qt.qpa.window: Window position QRect(0,-22 900x700) outside any known screen, using primary screen

                Not sure why self.mainWindow.pos() returns a position outside the screen, I've been using only one monitor today to simplify the issue.

                1 Reply Last reply
                0
                • jsulmJ jsulm

                  @JonB I think setScreen is not present in Qt5 but in in Qt6

                  JonBJ Offline
                  JonBJ Offline
                  JonB
                  wrote on last edited by
                  #17

                  @jsulm said in Additional windows not opening on correct monitor:

                  @JonB I think setScreen is not present in Qt5 but in in Qt6

                  All I know is @fvez_demtroys wrote

                  QWidget does have a setScreen function.

                  However this function is not present for QMainWindow.

                  I don't know whether Qt 5 or 6, I just don't see how QWidget can have a method which QMainWindow does not.

                  1 Reply Last reply
                  0
                  • F Offline
                    F Offline
                    fvez_demtroys
                    wrote on last edited by
                    #18

                    Hi JonB,

                    As I mentioned in my original post, I am using PyQt5 5.15.4.
                    PyQt5 documentation does not mention a setScreen function for the QWidget class.
                    https://doc.qt.io/qt-5/qwidget.html

                    FVez

                    JonBJ 1 Reply Last reply
                    0
                    • F fvez_demtroys

                      Hi JonB,

                      As I mentioned in my original post, I am using PyQt5 5.15.4.
                      PyQt5 documentation does not mention a setScreen function for the QWidget class.
                      https://doc.qt.io/qt-5/qwidget.html

                      FVez

                      JonBJ Offline
                      JonBJ Offline
                      JonB
                      wrote on last edited by
                      #19

                      @fvez_demtroys
                      Earlier you wrote

                      QWidget does have a setScreen function.

                      but now you agree it does not. I was confused. Anyway @jsulm has explained it's only Qt6.

                      1 Reply Last reply
                      0
                      • F Offline
                        F Offline
                        fvez_demtroys
                        wrote on last edited by
                        #20

                        Hi JonB,

                        Yes my error, I was looking at the PyQt6 Doc!
                        Sorry for the confusion.

                        I'm still having no luck in achieving what I want though.

                        Is there no way to tell the new window to open at the same Y position as the main window and be centered on the main window?
                        Could this issue be caused by the OSX environment?

                        I don't understand why I can't use mainWindow.pos().y() and mainWindow.geometry().center().x() to properly display my new window where I want it to be...

                        Thanks,
                        FVez

                        1 Reply Last reply
                        0
                        • F Offline
                          F Offline
                          fvez_demtroys
                          wrote on last edited by
                          #21

                          For those interested, I got it to work.

                          The main issue was that I was trying to set the position in the __init__ method of my widget.
                          I changed my approach and decided to override the show() method of the widget.

                          I think the initial position of my mainWindow wasn't correct when the __init__ method was called and thus my widget couldn't center properly.
                          Here is the code for anyone interested in my solution.

                              def show(self):
                                  geo = self.frameGeometry()
                                  geo.moveCenter(self.mainWindow.geometry().center())
                                  geo.moveTop(self.mainWindow.geometry().top())
                                  self.move(geo.topLeft())
                                  super().show()
                          

                          Had to take a break to figure out what I was doing wrong.
                          Thanks for the help!

                          FVez

                          1 Reply Last reply
                          2
                          • SGaistS Offline
                            SGaistS Offline
                            SGaist
                            Lifetime Qt Champion
                            wrote on last edited by
                            #22

                            Indeed !

                            Until shown, the widget has no "physical presence" hence doing geometry manipulation will not generate the expected result.

                            Interested in AI ? www.idiap.ch
                            Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                            1 Reply Last reply
                            1

                            • Login

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