Linking a qtDesigner .ui file to python/pyqt?

前端 未结 12 1314
北海茫月
北海茫月 2020-11-28 01:33

So if I go into QtDesigner and build a UI, it\'ll be saved as a .ui file. How can I make this as a python file or use this in python?

相关标签:
12条回答
  • 2020-11-28 01:58

    Using Anaconda3 (September 2018) and QT designer 5.9.5. In QT designer, save your file as ui. Open Anaconda prompt. Search for your file: cd C:.... (copy/paste the access path of your file). Then write: pyuic5 -x helloworld.ui -o helloworld.py (helloworld = name of your file). Enter. Launch Spyder. Open your file .py.

    0 讨论(0)
  • 2020-11-28 02:01

    (November 2020) This worked for me (UBUNTU 20.04):

    pyuic5 /home/someuser/Documents/untitled.ui > /home/someuser/Documents/untitled.py
    
    0 讨论(0)
  • 2020-11-28 02:04

    I found this article very helpful.

    http://talk.maemo.org/archive/index.php/t-43663.html

    I'll briefly describe the actions to create and change .ui file to .py file, taken from that article.

    1. Start Qt Designer from your start menu.
    2. From "New Form" window, create "Main Window"
    3. From "Display Widgets" towards the bottom of your "Widget Box Menu" on the left hand side
      add a "Label Widget". (Click Drag and Drop)
    4. Double click on the newly added Label Widget to change its name to "Hello World"
    5. at this point you can use Control + R hotkey to see how it will look.
    6. Add buttons or text or other widgets by drag and drop if you want.
    7. Now save your form.. File->Save As-> "Hello World.ui" (Control + S will also bring up
      the "Save As" option) Keep note of the directory where you saved your "Hello World" .ui
      file. (I saved mine in (C:) for convenience)

    The file is created and saved, now we will Generate the Python code from it using pyuic!

    1. From your start menu open a command window.
    2. Now "cd" into the directory where you saved your "Hello World.ui" For me i just had to "cd\" and was at my "C:>" prompt, where my "Hello World.ui" was saved to.
    3. When you get to the directory where your file is stored type the following.
    4. pyuic4 -x helloworld.ui -o helloworld.py
    5. Congratulations!! You now have a python Qt4 GUI application!!
    6. Double click your helloworld.py file to run it. ( I use pyscripter and upon double click
      it opens in pyscripter, then i "run" the file from there)

    Hope this helps someone.

    0 讨论(0)
  • 2020-11-28 02:08

    You can also use uic in PyQt5 with the following code.

    from PyQt5 import uic, QtWidgets
    import sys
    
    class Ui(QtWidgets.QDialog):
        def __init__(self):
            super(Ui, self).__init__()
            uic.loadUi('SomeUi.ui', self)
            self.show()
    
    if __name__ == '__main__':
        app = QtWidgets.QApplication(sys.argv)
        window = Ui()
        sys.exit(app.exec_())
    
    0 讨论(0)
  • 2020-11-28 02:09

    Another way to use .ui in your code is:

    from PyQt4 import QtCore, QtGui, uic
    class MyWidget(QtGui.QWidget)
        ...
        #somewhere in constructor:
        uic.loadUi('MyWidget.ui', self)
    

    both approaches are good. Do not forget, that if you use Qt resource files (extremely useful) for icons and so on, you must compile it too:

    pyrcc4.exe -o ui/images_rc.py ui/images/images.qrc
    

    Note, when uic compiles interface, it adds 'import images_rc' at the end of .py file, so you must compile resources into the file with this name, or rename it in generated code.

    0 讨论(0)
  • 2020-11-28 02:11

    The cleaner way in my opinion is to first export to .py as aforementioned:

    pyuic4 foo.ui > foo.py
    

    And then use it inside your code (e.g main.py), like:

    from foo import Ui_MyWindow
    
    
    class MyWindow(QtGui.QDialog):
        def __init__(self):
            super(MyWindow, self).__init__()
    
            self.ui = Ui_MyWindow()
            self.ui.setupUi(self)
    
            # go on setting up your handlers like:
            # self.ui.okButton.clicked.connect(function_name)
            # etc...
    
    def main():
        app = QtGui.QApplication(sys.argv)
        w = MyWindow()
        w.show()
        sys.exit(app.exec_())
    
    if __name__ == "__main__":
        main()
    

    This way gives the ability to other people who don't use qt-designer to read the code, and also keeps your functionality code outside foo.py that could be overwritten by designer. You just reference ui through MyWindow class as seen above.

    0 讨论(0)
提交回复
热议问题