PySide和PyQt加载ui文件的两种方法


Posted in Python onFebruary 27, 2019

本文实例为大家分享了PySide和PyQt加载ui文件的具体实现代码,供大家参考,具体内容如下

在用PySide或PyQt的时候,经常用到要将画好的ui文件导入到代码里使用,下面是两种调入的方法:

import PyQt4.uic
from PyQt4 import QtCore, QtGui

MainWindowForm, MainWindowBase = PyQt4.uic.loadUiType('ui/mainwindow.ui')

class MainWindow(MainWindowBase, MainWindowForm):
 def __init__(self, parent = None):
  super(MainWindow, self).__init__(parent)

  # setup the ui
  self.setupUi(self)

if ( __name__ == '__main__' ):
 app = None
 if ( not app ):
  app = QtGui.QApplication([])

 window = MainWindow()
 window.show()

 if ( app ):
  app.exec_()

第二种:

import PyQt4.uic
from PyQt4 import QtCore, QtGui

class MainWindow(QtGui.QMainWindow):
 def __init__(self, parent = None):
  super(MainWindow, self).__init__(parent)

  # load the ui
  PyQt4.uic.loadUi('ui/mainwindow.ui', self)

if ( __name__ == '__main__' ):
 app = None
 if ( not app ):
  app = QtGui.QApplication([])

 window = MainWindow()
 window.show()

 if ( app ):
  app.exec_()

当然如果是用PySide的话,我们可以写个专门读取ui文件的方法,将baseclass和formclass返回出去,供后面UI的类继承。

# -*- coding: utf-8 -*-
from PySide import QtGui

import xml.etree.ElementTree as xml
from cStringIO import StringIO


def load_ui_file(ui_file, type='PySide'):
 if type == 'PySide':
  import pysideuic
  print pysideuic

  parsed = xml.parse(ui_file)
  widget_class = parsed.find('widget').get('class')
  form_class = parsed.find('class').text

  with open(ui_file, 'r') as f:
   o = StringIO()
   frame = {}

   pysideuic.compileUi(f, o, indent=0)
   pyc = compile(o.getvalue(), '<string>', 'exec')
   exec pyc in frame

   form_class = frame['Ui_%s' % form_class]
   base_class = getattr(QtGui, widget_class)
  return form_class, base_class

 elif type == 'PyQt4':
  import PyQt4.uic
  return PyQt4.uic.loadUiType(ui_file)


if __name__ == "__main__":
 ui_file = 'test.ui'
 load_ui_file(ui_file)

这样Pyside和PyQt就可以调用.ui文件了,而且这两种调用方法的性能和占用的内存都有人专门测试过,但作者也比较推荐第一种方法。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
解读Python编程中的命名空间与作用域
Oct 16 Python
Unicode和Python的中文处理
Mar 19 Python
Python实现字符串与数组相互转换功能示例
Sep 22 Python
Python实现连接两个无规则列表后删除重复元素并升序排序的方法
Feb 05 Python
python2.7实现爬虫网页数据
May 25 Python
python爬虫超时的处理的实例
Dec 19 Python
介绍一款python类型检查工具pyright(推荐)
Jul 03 Python
windows上安装python3教程以及环境变量配置详解
Jul 18 Python
django创建简单的页面响应实例教程
Sep 06 Python
Python搭建HTTP服务过程图解
Dec 14 Python
python中如何打包用户自定义模块
Sep 23 Python
Python中for后接else的语法使用
May 18 Python
Python利用字典破解WIFI密码的方法
Feb 27 #Python
pyside+pyqt实现鼠标右键菜单功能
Dec 08 #Python
基于PyQt4和PySide实现输入对话框效果
Feb 27 #Python
python使用PyQt5的简单方法
Feb 27 #Python
Python创建字典的八种方式
Feb 27 #Python
基于wxPython的GUI实现输入对话框(2)
Feb 27 #Python
基于wxPython的GUI实现输入对话框(1)
Feb 27 #Python
You might like
解析PHP缓存函数的使用说明
2013/05/10 PHP
PHP 安全检测代码片段(分享)
2013/07/05 PHP
thinkphp普通查询与表达式查询实例分析
2014/11/24 PHP
PHP检测接口Traversable用法详解
2017/12/29 PHP
laravel 时间格式转时间戳的例子
2019/10/11 PHP
jQuery Select(单选) 模拟插件 V1.3.62 改进版
2010/07/17 Javascript
HTML DOM的nodeType值介绍
2011/03/31 Javascript
图片onload事件触发问题解决方法
2011/07/31 Javascript
editable.js 基于jquery的表格的编辑插件
2011/10/24 Javascript
Underscore.js 的模板功能介绍与应用
2012/12/24 Javascript
jQuery实现随意改变div任意属性的名称和值(部分原生js实现)
2013/05/28 Javascript
Nodejs中读取中文文件编码问题、发送邮件和定时任务实例
2015/01/01 NodeJs
jQuery代码性能优化的10种方法
2016/06/21 Javascript
MUI  Scroll插件的使用详解
2017/04/13 Javascript
详解基于iview-ui的导航栏路径(面包屑)配置
2019/02/22 Javascript
vue history 模式打包部署在域名的二级目录的配置指南
2019/07/02 Javascript
Python列表切片用法示例
2017/04/19 Python
python中利用队列asyncio.Queue进行通讯详解
2017/09/10 Python
python合并同类型excel表格的方法
2018/04/01 Python
Python中整数的缓存机制讲解
2019/02/16 Python
Python OpenCV中的resize()函数的使用
2019/06/20 Python
Django通用类视图实现忘记密码重置密码功能示例
2019/12/17 Python
Tensorflow 实现释放内存
2020/02/03 Python
使用 pytorch 创建神经网络拟合sin函数的实现
2020/02/24 Python
python GUI库图形界面开发之PyQt5线程类QThread详细使用方法
2020/02/26 Python
Python3 io文本及原始流I/O工具用法详解
2020/03/23 Python
python 实现波浪滤镜特效
2020/12/02 Python
pandas 按日期范围筛选数据的实现
2021/02/20 Python
移动HTML5前端框架—MUI的使用
2017/12/18 HTML / CSS
HTML5拖拽功能实现的拼图游戏
2018/07/31 HTML / CSS
Java如何获得ResultSet的总行数
2016/09/03 面试题
捐款倡议书
2014/04/14 职场文书
机关职员工作检讨书
2014/10/23 职场文书
党员教师群众路线思想汇报范文
2014/10/28 职场文书
军训阅兵新闻稿
2015/07/17 职场文书
Flutter Navigator 实现路由传递参数
2022/04/22 Java/Android