python教程详解PyQt-Designer生成的UI代码的装配【转载】

本文转自:http://www.52ij.com/jishu/432.html,转载请保留链接

之前说了一下PyQt-Designer生成UI文件转为py文件的方法.波哥试了一下,在装配到自己工程的时候卡住了.我那篇笔记最后也说了,要想用,还有点需要改动的.今天趁自测项目的空闲,写一下.

先随便做一个UI,这里我直接拖了一个日历控件过来.

生成py代码,之前说过的.

新建一个工程.新建一个src包,会自动生成一个__init__.py.

把test.py,就是那个ui生成的代码拷进来.

下面是没有经过改动的代码,需要注意的几个地方,做了标记.

框起来的(object)表示这个类继承自object.这里修改成QtGui.QMainWindow.至于原因,也很简单.在我做实验的时候,发现生成的两个方法

setupUi和retranslateUi需要传入一个参数,就是上图红线画出来的,MainWindow,我就想,不如让这个类本身继承自QMainWindow,那么在调用自动生成的方法来初始化窗口的时候,自需要把它本身,也就是self传进去即可.

改动之后的代码如下,加了一个__init__方法,这个在一会儿创建窗口对象的时候会自动调用,类似java的构造器.

在__init__里,先调用了父类QMainWindow的构造方法,然后调用了自动生成的两个方法,注意,传的是self,因为他自己已经是QMainWindow了.

这里需要调用super(xxx,yyy).__init__(),其实是一点点试出来的,一开始按照java的习惯去做,没有这个调用,结果报错了,才发现它不会自动调用父类构造方法.

下面,在自动生成的那个__init__.py文件里,写入如下代码.

第一句是创建了一个PyQt封装的QApplication对象,创建的时候,把系统参数传进去了.顾名思义,这一句创建了一个应用程序对象

第二句是创建一个我们生成的那个窗口

第三句是显示窗口

第四句是把应用程序对象的exec_()方法的返回值传给sys.exit().当点击关闭窗口的时候,exec_()方法会给sys.exit()一个返回值,让它关闭程序

这里多说一句,上面的分析可能有不妥的地方,再深入学习之后,回过来看的时候会改.

另外,写完第四点,我灵光一闪,觉得app.exec_()这个方法,应该是一个阻塞方法,它维持着整个程序的运行,当接收到退出操作的时候,才会返回一个值,然后sys.exit()接到返回值让整个程序退出.

原来这就是我一直在想的,pyqt没有tkinter里的.mainloop()类似方法,怎么让程序一直跑起来的呢.原来藏这么深...

我换了好几个UI,做了好几个小工具,所以,上面的步骤重复了好几次,但是在写前两遍的时候,我并没有想这么多,只是觉得这样能跑起来.知道今天,再一次尝试,才有一点点深入的体会.所以,多用,多思考真的很重要啊...

在这个文件上右键run一下,跑起来了...

代码贴出来:


src/__init__.py

from PyQt4 import QtCore, QtGui

import sys

import test

app=QtGui.QApplication(sys.argv)

win=test.Ui_MainWindow()

win.show()

sys.exit(app.exec_())

src/test.py

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file ‘D:\Program Files\Python2.7\Lib\site-packages\PyQt4\test.ui‘

#

# Created: Mon Mar 04 13:03:57 2013

# by: PyQt4 UI code generator 4.9.6

#

# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui

try:

_fromUtf8 = QtCore.QString.fromUtf8

except AttributeError:

def _fromUtf8(s):

return s

try:

_encoding = QtGui.QApplication.UnicodeUTF8

def _translate(context, text, disambig):

return QtGui.QApplication.translate(context, text, disambig, _encoding)

except AttributeError:

def _translate(context, text, disambig):

return QtGui.QApplication.translate(context, text, disambig)

class Ui_MainWindow(QtGui.QMainWindow):

def __init__(self):

super(Ui_MainWindow,self).__init__()

self.setupUi(self);

self.retranslateUi(self)

def setupUi(self, MainWindow):

MainWindow.setObjectName(_fromUtf8("MainWindow"))

MainWindow.resize(440, 200)

self.centralwidget = QtGui.QWidget(MainWindow)

self.centralwidget.setObjectName(_fromUtf8("centralwidget"))

self.calendarWidget = QtGui.QCalendarWidget(self.centralwidget)

self.calendarWidget.setGeometry(QtCore.QRect(0, 0, 441, 181))

self.calendarWidget.setObjectName(_fromUtf8("calendarWidget"))

MainWindow.setCentralWidget(self.centralwidget)

self.statusbar = QtGui.QStatusBar(MainWindow)

self.statusbar.setObjectName(_fromUtf8("statusbar"))

MainWindow.setStatusBar(self.statusbar)

self.retranslateUi(MainWindow)

QtCore.QMetaObject.connectSlotsByName(MainWindow)

def retranslateUi(self, MainWindow):

MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None))

又到了结尾,这个界面跑起来了,但是点上去是没有反应的.怎么把回调函数(事件处理函数)安上去,这个,下次再写,涉及到pyqt的信号和槽.

总结:

1. 创建scr 文件夹,将目标ui 文件保存到此目录,复制"C:\Python27\Lib\site-packages\PyQt4\uic\pyuic.py" 到该目录,新建transform.bat 文件,在里面写上 pyuic.py -o test.py test.ui,双击运行此文件产生test.py

2. 打开test.py 修改里面class 的参数为QtGui.QMainWindow, 并定义构造函数:

  def __init__(self):

    self.super(Ui_MainWindow,self).__init__()

    self.setupUi(self)

    self.retranslateUi(self)

3. 在src 中创建包标志文件__init__.py, 打开在里面写上:

from PyQt4 import QtCore, QtGui

import sys

import test

app = QtCore.QApplication(sys,argv)

win = test.Ui_MainWindow()

win = show()

sys.exit(app_exec())

时间: 2024-10-26 19:08:32

python教程详解PyQt-Designer生成的UI代码的装配【转载】的相关文章

webpack安装配置使用教程详解

webpack安装配置使用教程详解 www.111cn.net 更新:2015-09-01 编辑:swteen 来源:转载 本文章来为各位详细的介绍一下关于webpack安装配置使用教程吧,这篇文章对于不喜欢使用 jspm测试的朋友可以参考一下. webpack 入门 目录 1 安装 webpack2 初始化项目3 webpack 配置4 自动刷新5 第三方库6 模块化7 打包.构建8 webpack 模板我最近大量使用的是 jspm,但因为用它搭建的前端开发环境中,写测试代码非常困难,而项目又

windows上安装Anaconda和python的教程详解

一提到数字图像处理编程,可能大多数人就会想到matlab,但matlab也有自身的缺点: 1.不开源,价格贵 2.软件容量大.一般3G以上,高版本甚至达5G以上. 3.只能做研究,不易转化成软件. 因此,我们这里使用Python这个脚本语言来进行数字图像处理. 要使用Python,必须先安装python,一般是2.7版本以上,不管是在windows系统,还是Linux系统,安装都是非常简单的. 要使用python进行各种开发和科学计算,还需要安装对应的包.这和matlab非常相似,只是matla

使用ssh开发rest web服务支持http etag header的教程详解

原创整理不易,转载请注明出处:使用ssh开发rest web服务支持http etag header的教程详解 代码下载地址:http://www.zuidaima.com/share/1777391667989504.htm 导言 REST方式的应用程序构架在近日所产生的巨大影响突出了Web应用程序的优雅设计的重要性.现在人们开始理解"WWW架构"内在的可测量性及弹性,并且已经开始探索使用其范例的更好的方式.在本文中,我们将讨论一个Web应用开发工具--"简陋的.卑下的&q

python difflib详解

difflib -帮助进行差异化比较 这个模块提供的类和方法用来进行差异化比较,它能够生成文本或者html格式的差异化比较结果,如果需要比较目录的不同,可以使用filecmp模块. class difflib.SequenceMatcher 这是可以用来比较任何类型片段的类,只要比较的片段是可hash的,都可以用来比较,使用非常灵活.他源于1980,s的“完形匹配算法”,并且进行了一系列的优化和改进. 通过对算法的复杂度比较,它由于原始的完形匹配算法,在最坏情况下有n的平方次运算,在最好情况下,

转 python数据类型详解

python数据类型详解 目录 1.字符串 2.布尔类型 3.整数 4.浮点数 5.数字 6.列表 7.元组 8.字典 9.日期 1.字符串 1.1.如何在Python中使用字符串 a.使用单引号(') 用单引号括起来表示字符串,例如: str='this is string'; print str; b.使用双引号(") 双引号中的字符串与单引号中的字符串用法完全相同,例如: str="this is string"; print str; c.使用三引号(''') 利用三

超轻量级DI容器框架Google Guice与Spring框架的区别教程详解及其demo代码片段分享

原创不易,转载请注明出处:超轻量级DI容器框架Google Guice与Spring框架的区别教程详解及其demo代码片段分享 代码下载地址:http://www.zuidaima.com/share/1759689106541568.htm 依赖注入,DI(Dependency Injection),它的作用自然不必多说,提及DI容器,例如spring,picoContainer,EJB容器等等,近日,google诞生了更轻巧的DI容器--Guice! 废话不多讲了,先看看Guice是如何实现

python正则表达式详解

python正则表达式详解 正则表达式是一个很强大的字符串处理工具,几乎任何关于字符串的操作都可以使用正则表达式来完成,作为一个爬虫工作者,每天和字符串打交道,正则表达式更是不可或缺的技能,正则表达式的在不同的语言中使用方式可能不一样,不过只要学会了任意一门语言的正则表达式用法,其他语言中大部分也只是换了个函数的名称而已,本质都是一样的.下面,我来介绍一下python中的正则表达式是怎么使用的. 首先,python中的正则表达式大致分为以下几部分: 元字符 模式 函数 re 内置对象用法 分组用

python线程详解

#线程状态 #线程同步(锁)#多线程的优势在于可以同时运行多个任务,至少感觉起来是这样,但是当线程需要共享数据时,可能存在数据不同步的问题. #threading模块#常用方法:'''threading.currentThread():返回当前的线程变量threading.enumerate():返回一个包含正在运行的线程的list,正在运行指:线程启动后,结束前,不包含启动前和终止后的线程threading.activeCount():返回正在运行的线程数量,与len(threading.en

navicat使用教程详解

navicat mysql数据库管理软件 用这个软件来管理mysql数据库 方便快捷,王道之选 来看一下怎么通过 navicat软件来 创建数据库和导入mysql数据库 2 3 4 5 6 7 8 9 10 11 navicat教程 navicat使用教程详解 图文版完毕