Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. PySide2 loadUiTools returns None on Windows 10.

PySide2 loadUiTools returns None on Windows 10.

Scheduled Pinned Locked Moved Solved General and Desktop
8 Posts 2 Posters 1.4k Views
  • 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.
  • P Offline
    P Offline
    Paul E
    wrote on 12 Dec 2020, 04:45 last edited by
    #1

    I am not sure if this the correct forum to post this but when I try using PySide2's loadUiType on Windows 10 it just returns None. I'm not sure if its in issue with my machine or a bug in PySide2's Windows build. I installed PySide2 using pip. If I build the UI from scratch in Python everything works fine.

    calculator.py

    import sys
    import PySide2
    import PySide2.QtUiTools
    
    print(PySide2)              #<module 'PySide2' from 'C:\\Python\\Python39\\lib\\site-packages\\PySide2\\__init__.py'>
    print(PySide2.QtUiTools)    #<module 'PySide2.QtUiTools' from 'C:\\Python\\Python39\\lib\\site-packages\\PySide2\\QtUiTools.pyd'>
    print (sys.version_info)    #sys.version_info(major=3, minor=9, micro=0, releaselevel='final', serial=0)
    print (PySide2.__version__) #5.15.2
    
    print(PySide2.QtUiTools.loadUiType("C:\calculator.ui"))  #None
    

    calculator.ui

    <?xml version="1.0" encoding="UTF-8"?>
    <ui version="4.0">
     <class>Form</class>
     <widget class="QWidget" name="Form">
      <property name="geometry">
       <rect>
        <x>0</x>
        <y>0</y>
        <width>400</width>
        <height>300</height>
       </rect>
      </property>
      <property name="windowTitle">
       <string>Form</string>
      </property>
      <layout class="QHBoxLayout" name="horizontalLayout">
       <item>
        <widget class="QPushButton" name="pushButton">
         <property name="text">
          <string>PushButton</string>
         </property>
        </widget>
       </item>
      </layout>
     </widget>
     <resources/>
     <connections/>
    </ui>
    
    J 1 Reply Last reply 12 Dec 2020, 08:11
    0
    • P Paul E
      12 Dec 2020, 17:13

      I just installed the c++ Qt 5.14.2 libraries and am still just getting None as my return.

      I also made sure the newly installed uic was in my Path variable.
      I also just noticed the codereview link says the patch has been merged. It seems like Qt is under the impression it is working properly.

      P Offline
      P Offline
      Paul E
      wrote on 12 Dec 2020, 17:24 last edited by Paul E 12 Dec 2020, 17:25
      #7

      @Paul-E I added C:\Python\Python39\Scripts (path to pyside2-uic.exe) to my PATH and now it is working. I did not need the Qt libs after all.

      J 1 Reply Last reply 13 Dec 2020, 08:00
      1
      • P Paul E
        12 Dec 2020, 04:45

        I am not sure if this the correct forum to post this but when I try using PySide2's loadUiType on Windows 10 it just returns None. I'm not sure if its in issue with my machine or a bug in PySide2's Windows build. I installed PySide2 using pip. If I build the UI from scratch in Python everything works fine.

        calculator.py

        import sys
        import PySide2
        import PySide2.QtUiTools
        
        print(PySide2)              #<module 'PySide2' from 'C:\\Python\\Python39\\lib\\site-packages\\PySide2\\__init__.py'>
        print(PySide2.QtUiTools)    #<module 'PySide2.QtUiTools' from 'C:\\Python\\Python39\\lib\\site-packages\\PySide2\\QtUiTools.pyd'>
        print (sys.version_info)    #sys.version_info(major=3, minor=9, micro=0, releaselevel='final', serial=0)
        print (PySide2.__version__) #5.15.2
        
        print(PySide2.QtUiTools.loadUiType("C:\calculator.ui"))  #None
        

        calculator.ui

        <?xml version="1.0" encoding="UTF-8"?>
        <ui version="4.0">
         <class>Form</class>
         <widget class="QWidget" name="Form">
          <property name="geometry">
           <rect>
            <x>0</x>
            <y>0</y>
            <width>400</width>
            <height>300</height>
           </rect>
          </property>
          <property name="windowTitle">
           <string>Form</string>
          </property>
          <layout class="QHBoxLayout" name="horizontalLayout">
           <item>
            <widget class="QPushButton" name="pushButton">
             <property name="text">
              <string>PushButton</string>
             </property>
            </widget>
           </item>
          </layout>
         </widget>
         <resources/>
         <connections/>
        </ui>
        
        J Offline
        J Offline
        JonB
        wrote on 12 Dec 2020, 08:11 last edited by
        #2

        @Paul-E said in PySide2 loadUiTools returns None on Windows 10.:

        print(PySide2.QtUiTools.loadUiType("C:\calculator.ui")) #None

        Look up how Python handles that single \ in your literal string! You are not passing the path correctly....

        P 1 Reply Last reply 12 Dec 2020, 10:13
        0
        • J JonB
          12 Dec 2020, 08:11

          @Paul-E said in PySide2 loadUiTools returns None on Windows 10.:

          print(PySide2.QtUiTools.loadUiType("C:\calculator.ui")) #None

          Look up how Python handles that single \ in your literal string! You are not passing the path correctly....

          P Offline
          P Offline
          Paul E
          wrote on 12 Dec 2020, 10:13 last edited by Paul E 12 Dec 2020, 10:14
          #3

          @JonB that is not the problem. Look up python's escape characters, \c is not an escape character.

          print("C:\calculator.ui")      #C:\calculator.ui
          print(r"C:\calculator.ui")     #C:\calculator.ui
          print(os.path.exists("C:\calculator.ui"))    #True
          print(os.path.exists(r"C:\calculator.ui"))   #True
          
          J 1 Reply Last reply 12 Dec 2020, 10:40
          0
          • P Paul E
            12 Dec 2020, 10:13

            @JonB that is not the problem. Look up python's escape characters, \c is not an escape character.

            print("C:\calculator.ui")      #C:\calculator.ui
            print(r"C:\calculator.ui")     #C:\calculator.ui
            print(os.path.exists("C:\calculator.ui"))    #True
            print(os.path.exists(r"C:\calculator.ui"))   #True
            
            J Offline
            J Offline
            JonB
            wrote on 12 Dec 2020, 10:40 last edited by JonB 12 Dec 2020, 10:54
            #4

            @Paul-E
            Sorry, you are right. I did not realise Python treats \ as literal if the next character is not a legitimate escape char. I still think you'd be better with r"C:\calculator.ui" in case you change it to r"C:\nalculator.ui"! :)

            I tried your two files under my Ubuntu 20.04, Qt 5.12, PySide2 5.15. I have never used loadUiType() myself, but I got a pretty strange error message which I cannot explain:

            jon@ubuntu-20:~/QtTests$ python3 calculator.py 
            <module 'PySide2' from '/home/jon/.local/lib/python3.8/site-packages/PySide2/__init__.py'>
            <module 'PySide2.QtUiTools' from '/home/jon/.local/lib/python3.8/site-packages/PySide2/QtUiTools.abi3.so'>
            sys.version_info(major=3, minor=8, micro=5, releaselevel='final', serial=0)
            5.15.0
            Error while compiling the generated Python file
              File "<stdin>", line 1
                /********************************************************************************
                ^
            SyntaxError: invalid syntax
            
            The above exception was the direct cause of the following exception:
            
            Traceback (most recent call last):
              File "calculator.py", line 10, in <module>
                print(PySide2.QtUiTools.loadUiType("calculator.ui"))  #None
            SystemError: <built-in function loadUiType> returned a result with an error set
            jon@ubuntu-20:~/QtTests$ 
            

            I don't know where it's finding that C++ comment line from, and I don't know why it's even mentioning stdin.

            I came across the following in https://codereview.qt-project.org/c/pyside/pyside-setup/+/302757

            Use pyside2-uic instead of uic for the loadUiType

            Since we deploy the pyside2-uic wrapper inside the

            bin/ directory of virtual environments, that takes care

            of using the 'uic' binary we ship with the wheels,

            which is located in site-packages/PySide2/.

            Don't know if there is a clue there. So I tried uic -g python calculator.ui. That worked OK, generating a good C++ file for the .ui. But that is also where the /****** ... comes from, as the first line. Looks like something is running that and then trying to interpret that as Python instead of C++??

            I accept that PySide2 brought back loadUiType() as of 5.14. But just maybe there is still some issue? Have a read of https://stackoverflow.com/questions/56658314/pyside2-equivalent-of-pyqt5s-loaduitype-to-dynamically-mix-in-ui-designs.

            In a word: I don't know what's going on with uic -g python calculator.ui. But if you run pyside2-uic calculator.ui it generates Python instead of C++. I can only leave you with that observation...

            1 Reply Last reply
            0
            • P Offline
              P Offline
              Paul E
              wrote on 12 Dec 2020, 11:45 last edited by
              #5

              Thank you for taking a second another look.

              Interesting, it seems like on ubuntu you are at least getting some kind of error message. That is way better than getting None(with no errors) on windows.

              I saw that stackoverflow link as well, which seemed to imply the problem would be solved after 5.14.2. Which is why I decided to post here.

              The codereview link is new to me (and appears to be newer than the stackoverflow link). I think I am running into the issue they are describing. I do not have the C++ Qt library installed. I am only using PySide2. Maybe if I install the library it will work (or more likely it will fail exactly where yours is).

              I currently am using the pyside2-uic as a workaround. I was just hoping I could skip that step. (I use to use loadUiType a few years ago just fine so I was hoping to get it working again)

              I do not know if it is worth escalating this as a bug, or I could just ignore it and continue using pyside2-uic as a workaround.

              1 Reply Last reply
              0
              • P Offline
                P Offline
                Paul E
                wrote on 12 Dec 2020, 17:13 last edited by Paul E 12 Dec 2020, 17:14
                #6

                I just installed the c++ Qt 5.14.2 libraries and am still just getting None as my return.

                I also made sure the newly installed uic was in my Path variable.
                I also just noticed the codereview link says the patch has been merged. It seems like Qt is under the impression it is working properly.

                P 1 Reply Last reply 12 Dec 2020, 17:24
                0
                • P Paul E
                  12 Dec 2020, 17:13

                  I just installed the c++ Qt 5.14.2 libraries and am still just getting None as my return.

                  I also made sure the newly installed uic was in my Path variable.
                  I also just noticed the codereview link says the patch has been merged. It seems like Qt is under the impression it is working properly.

                  P Offline
                  P Offline
                  Paul E
                  wrote on 12 Dec 2020, 17:24 last edited by Paul E 12 Dec 2020, 17:25
                  #7

                  @Paul-E I added C:\Python\Python39\Scripts (path to pyside2-uic.exe) to my PATH and now it is working. I did not need the Qt libs after all.

                  J 1 Reply Last reply 13 Dec 2020, 08:00
                  1
                  • P Paul E
                    12 Dec 2020, 17:24

                    @Paul-E I added C:\Python\Python39\Scripts (path to pyside2-uic.exe) to my PATH and now it is working. I did not need the Qt libs after all.

                    J Offline
                    J Offline
                    JonB
                    wrote on 13 Dec 2020, 08:00 last edited by
                    #8

                    @Paul-E
                    Well done, so it was indeed an issue about correctly locating pyside2-uic, I thought it might be. What seems a shame is that you received no kind of error/warning message from loadUiType() that it could not be found, making the task of resolving difficult....

                    1 Reply Last reply
                    0

                    1/8

                    12 Dec 2020, 04:45

                    • Login

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