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中使用partial改变方法默认参数实例
Apr 28 Python
Python实现高效求解素数代码实例
Jun 30 Python
python读取oracle函数返回值
Jul 18 Python
Python中字符串String的基本内置函数与过滤字符模块函数的基本用法
May 27 Python
python实现各种插值法(数值分析)
Jul 30 Python
解决在pycharm运行代码,调用CMD窗口的命令运行显示乱码问题
Aug 23 Python
python list转置和前后反转的例子
Aug 26 Python
如何使用selenium和requests组合实现登录页面
Feb 03 Python
python logging通过json文件配置的步骤
Apr 27 Python
Django如何实现密码错误报错提醒
Sep 04 Python
Python GUI之tkinter窗口视窗教程大集合(推荐)
Oct 20 Python
详解pandas赋值失败问题解决
Nov 29 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文件上传小程序 适合初学者学习!
2019/05/23 PHP
Tab页界面,用jQuery及Ajax技术实现
2009/09/21 Javascript
ajax上传时参数提交不更新等相关问题
2012/12/11 Javascript
js关闭模态窗口刷新父页面或跳转页面
2012/12/13 Javascript
左右悬浮可分组的网站QQ在线客服代码(可谓经典)
2012/12/21 Javascript
extjs render 用法介绍
2013/09/11 Javascript
JavaScript DOM节点添加示例
2014/07/16 Javascript
javascript中利用柯里化函数实现bind方法
2016/04/29 Javascript
浅谈js中的this问题
2017/08/31 Javascript
js装饰设计模式学习心得
2018/02/17 Javascript
一个基于react的图片裁剪组件示例
2018/04/18 Javascript
Vue实现远程获取路由与页面刷新导致404错误的解决
2019/01/31 Javascript
Vue使用Canvas绘制图片、矩形、线条、文字,下载图片
2019/04/26 Javascript
vue 指令和过滤器的基本使用(品牌管理案例)
2019/11/04 Javascript
Vue组件基础用法详解
2020/02/05 Javascript
[01:39]2014DOTA2国际邀请赛 Newbee经理CU专访队伍火力全开
2014/07/15 DOTA
Python实现包含min函数的栈
2016/04/29 Python
Python高级用法总结
2018/05/26 Python
如何安装并使用conda指令管理python环境
2019/07/10 Python
在django-xadmin中APScheduler的启动初始化实例
2019/11/15 Python
浅谈pytorch池化maxpool2D注意事项
2020/02/18 Python
Python如何输出百分比
2020/07/31 Python
惠普美国官方商店:HP Official Store
2016/08/28 全球购物
应聘医药代表职位求职信
2013/10/21 职场文书
电大毕业自我鉴定
2014/02/03 职场文书
《要下雨了》教学反思
2014/02/17 职场文书
个人授权委托书
2014/04/03 职场文书
2014最新预备党员思想汇报范文:中国梦,我的梦
2014/10/25 职场文书
2014年学校办公室工作总结
2014/12/19 职场文书
2015年助理政工师工作总结
2015/05/26 职场文书
2016春季运动会通讯稿
2015/07/18 职场文书
电子表的操作介绍说明书
2019/10/28 职场文书
Python中使用subprocess库创建附加进程
2021/05/11 Python
PHP实现rar解压读取扩展包小结
2021/06/03 PHP
Redis做数据持久化的解决方案及底层原理
2021/07/15 Redis
Nginx实现负载均衡的项目实践
2022/03/18 Servers