『PyQt5-基础篇』| 05 Qt Designer保存的.ui文件如何生成.py文件?

简介: 『PyQt5-基础篇』| 05 Qt Designer保存的.ui文件如何生成.py文件?
  • .ui文件是用Qt Designer设计的界面保存后的文件;
  • 保存后我们需要把这个文件转换成.py 文件,才能进行运行。

1 使用Qt Designer设计一个简单的界面

  • 设计如下一个界面:
    在这里插入图片描述

  • 保存为question.ui,保存工程目录下即可:

  • UI文件的源码为以下,其实是一个xml格式文件:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>366</width>
    <height>324</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>问卷调查</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <widget class="QRadioButton" name="radioButton">
    <property name="geometry">
     <rect>
      <x>20</x>
      <y>30</y>
      <width>86</width>
      <height>21</height>
     </rect>
    </property>
    <property name="text">
     <string>A、Python</string>
    </property>
    <property name="checked">
     <bool>false</bool>
    </property>
   </widget>
   <widget class="QLabel" name="label">
    <property name="geometry">
     <rect>
      <x>10</x>
      <y>10</y>
      <width>171</width>
      <height>16</height>
     </rect>
    </property>
    <property name="text">
     <string>1、你最喜欢的编程语言是(D)</string>
    </property>
   </widget>
   <widget class="QRadioButton" name="radioButton_2">
    <property name="geometry">
     <rect>
      <x>20</x>
      <y>60</y>
      <width>86</width>
      <height>21</height>
     </rect>
    </property>
    <property name="text">
     <string>B、C</string>
    </property>
    <property name="checked">
     <bool>false</bool>
    </property>
   </widget>
   <widget class="QRadioButton" name="radioButton_3">
    <property name="geometry">
     <rect>
      <x>20</x>
      <y>90</y>
      <width>86</width>
      <height>21</height>
     </rect>
    </property>
    <property name="text">
     <string>C、Go</string>
    </property>
    <property name="checked">
     <bool>false</bool>
    </property>
   </widget>
   <widget class="QRadioButton" name="radioButton_4">
    <property name="enabled">
     <bool>true</bool>
    </property>
    <property name="geometry">
     <rect>
      <x>20</x>
      <y>120</y>
      <width>86</width>
      <height>21</height>
     </rect>
    </property>
    <property name="text">
     <string>D、Java</string>
    </property>
    <property name="checked">
     <bool>true</bool>
    </property>
   </widget>
   <widget class="QRadioButton" name="radioButton_5">
    <property name="geometry">
     <rect>
      <x>20</x>
      <y>180</y>
      <width>86</width>
      <height>21</height>
     </rect>
    </property>
    <property name="text">
     <string>A、苹果</string>
    </property>
    <property name="checked">
     <bool>false</bool>
    </property>
   </widget>
   <widget class="QRadioButton" name="radioButton_6">
    <property name="geometry">
     <rect>
      <x>20</x>
      <y>270</y>
      <width>86</width>
      <height>21</height>
     </rect>
    </property>
    <property name="text">
     <string>D、葡萄</string>
    </property>
    <property name="checked">
     <bool>false</bool>
    </property>
   </widget>
   <widget class="QRadioButton" name="radioButton_7">
    <property name="geometry">
     <rect>
      <x>20</x>
      <y>240</y>
      <width>86</width>
      <height>21</height>
     </rect>
    </property>
    <property name="text">
     <string>C、梨</string>
    </property>
    <property name="checked">
     <bool>false</bool>
    </property>
   </widget>
   <widget class="QLabel" name="label_2">
    <property name="geometry">
     <rect>
      <x>10</x>
      <y>160</y>
      <width>221</width>
      <height>16</height>
     </rect>
    </property>
    <property name="text">
     <string>2、请选择你最喜欢的水果()</string>
    </property>
   </widget>
   <widget class="QRadioButton" name="radioButton_8">
    <property name="geometry">
     <rect>
      <x>20</x>
      <y>210</y>
      <width>86</width>
      <height>21</height>
     </rect>
    </property>
    <property name="text">
     <string>B、香蕉</string>
    </property>
    <property name="checked">
     <bool>false</bool>
    </property>
   </widget>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources/>
 <connections/>
</ui>
AI 代码解读

在这里插入图片描述

2 UI文件转PY文件

2.1 方法一:直接使用命令

  • 直接在命令行输入以下命令即可:
python -m PyQt5.uic.pyuic question.ui -o question.py
AI 代码解读
  • 可以发现在question.ui同目录生成了一个question.py文件
    在这里插入图片描述

    2.2 方法二:直接调用PyUIC5工具

  • 直接依次点击pycharm-工具-EXternal Tools-PyUIC即可:
    在这里插入图片描述
  • 可以达到相同的效果:
    在这里插入图片描述
  • 从图片中看,其实效果也是使用命令来运行的,一个直接输入命令,一个调用PyUIC工具来运行。

3 运行转换后的py文件

  • 先看下question.py文件代码:
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'question.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(366, 324)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.radioButton = QtWidgets.QRadioButton(self.centralwidget)
        self.radioButton.setGeometry(QtCore.QRect(20, 30, 86, 21))
        self.radioButton.setChecked(False)
        self.radioButton.setObjectName("radioButton")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(10, 10, 171, 16))
        self.label.setObjectName("label")
        self.radioButton_2 = QtWidgets.QRadioButton(self.centralwidget)
        self.radioButton_2.setGeometry(QtCore.QRect(20, 60, 86, 21))
        self.radioButton_2.setChecked(False)
        self.radioButton_2.setObjectName("radioButton_2")
        self.radioButton_3 = QtWidgets.QRadioButton(self.centralwidget)
        self.radioButton_3.setGeometry(QtCore.QRect(20, 90, 86, 21))
        self.radioButton_3.setChecked(False)
        self.radioButton_3.setObjectName("radioButton_3")
        self.radioButton_4 = QtWidgets.QRadioButton(self.centralwidget)
        self.radioButton_4.setEnabled(True)
        self.radioButton_4.setGeometry(QtCore.QRect(20, 120, 86, 21))
        self.radioButton_4.setChecked(True)
        self.radioButton_4.setObjectName("radioButton_4")
        self.radioButton_5 = QtWidgets.QRadioButton(self.centralwidget)
        self.radioButton_5.setGeometry(QtCore.QRect(20, 180, 86, 21))
        self.radioButton_5.setChecked(False)
        self.radioButton_5.setObjectName("radioButton_5")
        self.radioButton_6 = QtWidgets.QRadioButton(self.centralwidget)
        self.radioButton_6.setGeometry(QtCore.QRect(20, 270, 86, 21))
        self.radioButton_6.setChecked(False)
        self.radioButton_6.setObjectName("radioButton_6")
        self.radioButton_7 = QtWidgets.QRadioButton(self.centralwidget)
        self.radioButton_7.setGeometry(QtCore.QRect(20, 240, 86, 21))
        self.radioButton_7.setChecked(False)
        self.radioButton_7.setObjectName("radioButton_7")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(10, 160, 221, 16))
        self.label_2.setObjectName("label_2")
        self.radioButton_8 = QtWidgets.QRadioButton(self.centralwidget)
        self.radioButton_8.setGeometry(QtCore.QRect(20, 210, 86, 21))
        self.radioButton_8.setChecked(False)
        self.radioButton_8.setObjectName("radioButton_8")
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "问卷调查"))
        self.radioButton.setText(_translate("MainWindow", "A、Python"))
        self.label.setText(_translate("MainWindow", "1、你最喜欢的编程语言是(D)"))
        self.radioButton_2.setText(_translate("MainWindow", "B、C"))
        self.radioButton_3.setText(_translate("MainWindow", "C、Go"))
        self.radioButton_4.setText(_translate("MainWindow", "D、Java"))
        self.radioButton_5.setText(_translate("MainWindow", "A、苹果"))
        self.radioButton_6.setText(_translate("MainWindow", "D、葡萄"))
        self.radioButton_7.setText(_translate("MainWindow", "C、梨"))
        self.label_2.setText(_translate("MainWindow", "2、请选择你最喜欢的水果()"))
        self.radioButton_8.setText(_translate("MainWindow", "B、香蕉"))
AI 代码解读
  • 生成的代码是不能直接运行的,需要进行调用;
  • 我们再写一个主函数来调用这个py文件,比如main.py,代码如下:
# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/8/25
# 文件名称:main.py
# 作用:主程序入口
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson

import sys
from test_case.question import Ui_MainWindow
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(window)
    window.resize(400, 400)
    window.show()

    sys.exit(app.exec_())
AI 代码解读
  • 执行main.py,如下:
    在这里插入图片描述
目录
打赏
0
0
0
0
419
分享
相关文章
使用opencv在Qt控件上播放mp4文件
使用opencv在Qt控件上播放mp4文件
237 2
|
10月前
|
基于Qt的简易文件压缩与解压缩工具设计与实现
基于Qt的简易文件压缩与解压缩工具设计与实现
408 1
|
10月前
【QT】创建、打开QT项目只显示.pro文件的问题解决
【QT】创建、打开QT项目只显示.pro文件的问题解决
2798 0
【Qt UI】调色板QPalette类在Qt编程中的应用
【Qt UI】调色板QPalette类在Qt编程中的应用
317 0
|
10月前
|
【Qt UI】QT 窗口/控件置顶方法详解
【Qt UI】QT 窗口/控件置顶方法详解
675 0
【Qt UI相关】Qt设置窗体或控件的背景色透明
【Qt UI相关】Qt设置窗体或控件的背景色透明
1057 0
Qt中实现界面回放的艺术:从理论到代码“ (“The Art of Implementing UI Playback in Qt: From Theory to Code
Qt中实现界面回放的艺术:从理论到代码“ (“The Art of Implementing UI Playback in Qt: From Theory to Code
195 1
|
7月前
【qt】如何读取文件并拆分信息?
【qt】如何读取文件并拆分信息?
77 0
|
8月前
|
C++
基于QT实现的拷贝文件以及实时进度条(简易版)
1.基于按钮或者菜单栏的槽里去写逻辑函数(我这边用的是菜单栏),ui实现的进度条 2.创建两个对象,一个是源文件,一个是目标文件分别用getopenfileName、getsavefileName函数即可。 3.利用QFile类去实现对两个文件的创建,因为QFile中可以获取文件的属性已经读写等。 4.循环的去读取源文件中的数据,然后写入目标文件
660 6
|
7月前
qt 手搓ui
qt 手搓ui
59 3

热门文章

最新文章

  • 1
    【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    9
  • 2
    Magma:微软放大招!新型多模态AI能看懂视频+浏览网页+UI交互+控制机器人,数字世界到物理现实无缝衔接
    33
  • 3
    【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
    6
  • 4
    如何在React.js中使用Shadcn/UI
    73
  • 5
    移动端UI名词 - AxureMost
    2
  • 6
    unity判断鼠标在不在UI上
    14
  • 7
    Flame:开源AI设计图转代码模型!生成React组件,精准还原UI+动态交互效果
    91
  • 8
    Vue Amazing UI 组件库(Vue3+TypeScript+Vite 等最新技术栈开发)
    10
  • 9
    FirstUI:Deepseek能帮我们做很多事情,而这款开源框架专为开发者设计的开源UI框架,让你的项目加速起飞
    26
  • 10
    【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
    6
  • 1
    如何在React.js中使用Shadcn/UI
    73
  • 2
    Flame:开源AI设计图转代码模型!生成React组件,精准还原UI+动态交互效果
    91
  • 3
    WEB CAD插件通过上下文对象MxPluginContext修改UI界面的方法
    18
  • 4
    FirstUI:Deepseek能帮我们做很多事情,而这款开源框架专为开发者设计的开源UI框架,让你的项目加速起飞
    35
  • 5
    【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
    29
  • 6
    Vue Amazing UI 组件库(Vue3+TypeScript+Vite 等最新技术栈开发)
    34
  • 7
    Magma:微软放大招!新型多模态AI能看懂视频+浏览网页+UI交互+控制机器人,数字世界到物理现实无缝衔接
    93
  • 8
    unity判断鼠标在不在UI上
    58
  • 9
    【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
    83
  • 10
    【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    163