将qtDesigner .ui文件链接到python / pyqt?


Answers:


61

在代码中使用.ui的另一种方法是:

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

两种方法都很好。不要忘记,如果您将Qt资源文件(极其有用)用于图标等,则也必须对其进行编译:

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

请注意,在uic编译接口时,它将在.py文件的末尾添加“ import images_rc”,因此您必须使用此名称将资源编译到文件中,或在生成的代码中重命名。


2
完成后,您能否添加如何访问变量?如pushButton?
乔纳森(Jonathan)

2
@JonathanLeaders如果.ui文件中定义了一个按钮,则可以这样称呼它:self.pushButton。您还可以将ui加载到所需的任何类属性:uic.loadUi('uifile.ui',self.ui)并调用小部件和诸如self.ui.pushButton之类的东西。
Maxim Popravko 2015年

48

结合Max的答案Shriramana Sharma的邮件列表帖子,我构建了一个小的工作示例来加载mywindow.ui包含的文件QMainWindow(因此只需选择在Qt Designer的File-New对话框中创建一个主窗口)。

这是加载它的代码:

import sys
from PyQt4 import QtGui, uic

class MyWindow(QtGui.QMainWindow):
    def __init__(self):
        super(MyWindow, self).__init__()
        uic.loadUi('mywindow.ui', self)
        self.show()

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    window = MyWindow()
    sys.exit(app.exec_())

3
这应该是最好的答案,因为它是一个完整的示例。
Francesco Pasa

29

您需要使用pyuic工具从ui文件生成一个python文件(site-packages \ pyqt4 \ bin)

pyuic form1.ui > form1.py

与pyqt4

pyuic4.bat form1.ui > form1.py

然后,您可以将form1导入到脚本中。


25

我发现这篇文章很有帮助。

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

我将简要介绍从该文章中获取的创建.ui文件并将其更改为.py文件的操作。

  1. 从开始菜单中启动Qt Designer。
  2. 在“新表单”窗口中,创建“主窗口”
  3. 从“显示小部件”到左侧“小部件框菜单”的底部,
    添加“标签小部件”。(单击拖放)
  4. 双击新添加的Label Widget,将其名称更改为“ Hello World”
  5. 此时,您可以使用Control + R热键查看外观。
  6. 如果需要,可以通过拖放添加按钮或文本或其他小部件。
  7. 现在保存您的表单。文件->另存为->“ Hello World.ui”(Control + S也会弹出
    “另存为”选项)记下保存“ Hello World” .ui
    文件的目录。(为方便起见,我在(C :)中保存了我的)

文件已创建并保存,现在我们将使用pyuic从中生成Python代码!

  1. 从开始菜单中打开命令窗口。
  2. 现在“ cd”进入保存“ Hello World.ui”的目录。对我来说,我只需要“ cd \”,并在我的“ C:>”提示符下保存“ Hello World.ui”。
  3. 当您到达文件存储目录时,请输入以下内容。
  4. pyuic4 -x helloworld.ui -o helloworld.py
  5. 恭喜!! 您现在有了python Qt4 GUI应用程序!!
  6. 双击您的helloworld.py文件以运行它。(我使用pyscripter,双击
    它会在pyscripter中打开,然后从那里“运行”文件)

希望这对某人有帮助。


1
我正在使用以下命令进行编译:pyuic4 helloworld.ui> helloworld.py。确实必须将-x和-o参数传递给pyuic4。谢谢你提供的详情!。
muammar 2015年

很棒的解释,特别是“ GUI的生成”代码实际上在生成的文件中,这让我大吃一惊!
瓦尔蒙德

16

您也可以uic在PyQt5中使用以下代码。

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_())

12

我认为更干净的方法是先如上所述导出到.py:

pyuic4 foo.ui > foo.py

然后在代码中使用它(例如main.py),例如:

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()

这种方式使不使用qt-designer的其他人能够读取代码,并使您的功能代码不foo.py被设计人员覆盖。您只需要ui通过MyWindow类进行引用即可,如上所示。


self.ui.okButton.clicked.connect(self.function_name)给我 TypeError: event() takes 1 positional argument but 2 were given。您是如何解决的?
Ahsanul Haque

9

您可以使用以下命令将.ui文件转换为可执行的python文件。

pyuic4 -x form1.ui > form1.py

现在您可以直接执行python文件

python3(whatever version) form1.py

您可以导入该文件并可以使用它。


仅供参考,如果省略-x选项,则不会获得创建和运行该应用程序的代码部分。我已经看到了一些省略“ -x”的答案。这个答案是最完整的。
不是一部机器,

5

您可以像这样编译ui文件

pyuic4 -x helloworld.ui -o helloworld.py

4

为了将.ui文件编译为.py文件,我这样做了:

python pyuic.py form1.ui > form1.py

参加



0

使用Anaconda3(2018年9月)和QT Designer 5.9.5。在QT设计器中,将文件另存为ui。打开Anaconda提示符。搜索文件:cd C:...(复制/粘贴文件的访问路径)。然后输入:pyuic5 -x helloworld.ui -o helloworld.py(helloworld =文件名)。输入。启动Spyder。打开文件.py。


0

2020年11月)这对我有用UBUNTU 20.04):

pyuic5 /home/someuser/Documents/untitled.ui > /home/someuser/Documents/untitled.py
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.