QT中建立Python GUI应用程序

移动开发
Python具有脚本语言中最丰富和强大的类库,足以支持绝大多数日常应用。python常被昵称为胶水语言,它能很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松联结在一起。

本文介绍的是在QT中建立Python GUI应用程序,图文并茂,相信你很喜欢这篇有趣的文章,提醒一下:这是在linux环境下运行的。

注:本教程使用的是QT 3。QT的最新版本为4.5。

Python 是一种有着许多令人惊叹的特性的伟大语言,但其默认的GUI包(TkInter)相当难看。另外,谁愿意手工输入所有GUI代码呢?做为替代,一个更好的建立Python GUI程序的方法,就是使用Trolltech的Qt Designer,用所见即所得的方式创建漂亮的界面,然后用pyuic自动生成所需的代码(这是一个PyQT包所带的QT界面编译器。)Qt Designer也使得在项目中添加Python代码变得非常容易。(如果想您的应用程序做有用的事的,你无疑将需要编写一些代码。:))

因此,下面是一个如何使用PythonQT建立你的第一个程序的简短教程。

我们将创建一个小小的应用程序,接受用户输入,然后将输入内容添加到一个列表中,此外允许用户清除列表中的内容。

首先,需要安装以下软件包:

  1. Python的2.X   
  2. PyQt的3.X   
  3. Qt Designer 3.X  

我采用Fedora Core 1的默认安装,没有任何问题。我还测试了RedHat 9,也没有任何问题。情况因人而异。(注:RedHat 8.0版也应该可以工作,但它的Qt designer是旧版本,没有RH9和FC1的好用。)
如果一切就绪,就让我们开始吧。启动QT designer。在RedHat 9和Fedora Core 1,它位于在Programming->More Programming菜单。

使用QT建立Python GUI应用程序 

QT Designer将会出现。就像这样:

使用QT建立Python GUI应用程序

在New->Open对话框,单击Dialog,并点击OK。

使用QT建立Python GUI应用程序 

#p#

QT Designer会创建一个新的dialog canvas,并命名为Form1 。

使用QT建立Python GUI应用程序

在左侧工具栏选择LineEdit工具并在canvas上创建一个编辑框。命名为lineEdit1。这将是获取用户输入的地方。

使用QT建立Python GUI应用程序

现在,在左侧工具栏选择ListBox工具,并在canvas上建立一个列表框。命名为listBox1 。这将是我们存储用户输入的地方

使用QT建立Python GUI应用程序

请注意,列表框中已经有一个项目。我们并不需要它,让我们来清掉它。双击列表框。弹出一个显示列表框中内容的对话框。点击Delete Item删除这个项目。然后单击OK。

使用QT建立Python GUI应用程序

现在,在左边工具栏选择PushButton工具并在canvas创建一个按钮。命名为pushButton1

使用QT建立Python GUI应用程序 

#p#

双击该按钮,出现一个允许你修改按钮上显示文字的对话框。重新命名为X,然后单击OK。

使用QT建立Python GUI应用程序

现在,我们来让按钮做一些事情。在Qt中的术语,按钮将发送一个signal,被slot接收。(slot就像一个对象的方法,作为事件的回应被调用,例如用户单击按钮。)请记住,当用户点击这个按钮的时候,我们要清除列表框。已经有内置的方法做到这一点,因此我们直接使用它。使用连接工具将一个signal连接到一个slot,该工具位于顶部工具栏的右侧,一个绿色方块上的红色箭头。就像这样:使用QT建立Python GUI应用程序

下面是比较难的部分。选择了这个工具以后,点选X按钮并拖到列表框上。一旦拖到列表框上(列表框会加亮),你会看到一条从按钮到列表框的线,然后放开鼠标。另一个对话框会弹出,您可以在此明确的指定哪一对signal和slot连接。选择pushButton1作为发送者, signal为clicked(),listBox1为接收者,clear()作为slot。然后单击OK。(这意味着当用户点击按钮时将删除列表框中的所有内容。)

使用QT建立Python GUI应用程序

在上一步中,我们使用一个内置slot来完成工作。现在,我们来创建自己的slot:当用户输入内容按下回车键后,它会将编辑框的内容添加到列表框中。要创建一个新的slot(记住,它就是一个方法),从Edit菜单中选择Slots 。

使用QT建立Python GUI应用程序

将显示一个自定义slots的对话框。开始时是空的。单击New Function添加新的slot。将该功能命名为AddEntry()(不要忘了新名称中的括号),因为它在列表框中增加新的项目。不要更改任何其他设置,只需点击OK。(我们将在后面编写此方法的代码。)

使用QT建立Python GUI应用程序

现在,我们有一个slot,我们可以将其他东西连接到它。回想一下,当用户输入一些内容按下回车键后,我们将增加一个项目到列表中。选择我们的好朋友--连接工具,连接编辑框到列表框。连接对话框将会再次弹出。这一次选择lineEdit1作为发送者,returnPressed()作为signal,Form1作为接收者,我们自己的AddEntry()作为slot。

使用QT建立Python GUI应用程序 

 

最后,我们准备编写一些代码,来实现我们的AddEntry()方法。在Project Overview的右上角,双击窗口的form1.ui.h文件。(第二个,在你的主文件之后。)弹出一个显示这个文件文本的窗口。此文件就是你实现所有的自定义slots的地方,将会在编译过程中被包含进去。请注意,Qt designer已经将我们的AddEntry()函数放在了头文件中...不过是C++格式!不需要为此担心,我们仍然可以在大括号中使用Python代码,并且工作得很好。(Python的UI编译器足够聪明,完全可以理解Qt Designer生成的头文件。)唯一的问题是,Qt designer自动缩进代码,并且预期一行的末尾有分号,这自然会让Python混淆,并且缩进会把一切都搞得一团糟。或者,你可以用你喜欢的编辑器 (例如:vi)编辑此文件。(或者找出如何关闭自动缩进。)

使用QT建立Python GUI应用程序

那么,我们要写些什么代码呢?我们必须完成三件事:

从编辑框获取文字

将文字插入到列表框

清除编辑框

你定义的所有slots都是对话框的方法,它的所有部件都是对象,你可以看一下他们的名字。因此self.lineEdit1是编辑框,self.listBox1是列表框。编辑框有一个方法叫做text(),它返回一个包含编辑框中内容的QString对象。不需要知道这些对象太多的细节,只需要知道QString对象有一个ascii()方法,它将返回所输入文本的原始ASCII。因此,要获得编辑框中的文本:

  1. e = self.lineEdit1.text().ascii()  

接下来我们需要做的就是将文本增加到列表框中。列表框有一个方法insertItem(),它接受一个字符串,并将其添加到列表:

  1. self.listBox1.insertItem(e)  

最后,我们用clear()方法清除编辑框:

  1. self.lineEdit1.clear()  

 

使用QT建立Python GUI应用程序

#p#

快完成了!我们需要做的最后一件事就是关闭删除按钮的autoDefault设置。(设置按钮为默认,意味当用户在对话框中按回车时,相当于单击该按钮。回车键增加文本到列表框,然后自动触发删除按钮,清除列表框,对我们没有任何意思。)autoDefault属性默认为True,因此我们需要在该按钮的Property Editor窗口将它设置为False。点击该按钮,察看右下角的Property窗口。

使用QT建立Python GUI应用程序

终于,我们完成了Qt designer,保存您的所有工作。
现在打开一个shell,我们要将GUI代码编译成Python代码。通过pyuic编译器来做这件事。传递.ui文件作为参数,它输出Python代码到标准输出。(所以它更有助于将输出重定向到另一个文件。)

  1. pyuic form1.ui > form1.py  

最终得到form1.py,这是一个包含你的对话框的Python类模块。因为它没有main()函数,您不能直接运行。因此,我们需要为它创建一个简单的包装,像这样:

  1. from qt import *  
  2. from form1 import *  
  3. import sys  
  4. if __name__ == "__main__":  
  5.     app = QApplication(sys.argv)  
  6.     f = Form1()  
  7.     f.show()  
  8.     app.setMainWidget(f)  
  9.     app.exec_loop() 

不用考虑太多细节,我们导入Qt库的Python模块,同样也导入我们的对话框类。然后,为我们的Qt应用程序建立一个环境,实例化对话框,把它显示在屏幕上,设置它为应用程序主部件,让QT进入事件循环,处理所有的signals,并调用我们的slots。把它们保存在一个单独的Python文件中,例如mygui.py。不用说,这种包装是相当通用的,可在你的大多数Python/Qt应用程序中重用。最后,我们准备好运行了!运行你的应用程序:

  1. python mygui.py  

它看起来应该是这个样子:

使用QT建立Python GUI应用程序

如果你在编辑框输入一些东西,然后按回车键,输入的内容应该会被添加到列表框中。如果点击X按钮,列表框应被清除。如果程序表现的不同,回去重读上面的步骤,你可能错过了一些东西。 :)
仅此而已。现在去创建些更有趣的东西!只是你可能想知道所有这些部件和他们所有的方法。如何知道谁做什么?最简单的方法是通过QT Classes Reference去找,(或Main QT Reference page),它描述了所有的QT类(包括所有的部件)及其方法和属性。例子用的是C++,但他们能够很好地转化成的Python。所有的名称是相同的-只是将C++语法替换成Python,一路走好!

该项目使用的文件

form1.ui  

form1.ui.h  

mygui.py  

作为练习,添加一些Python代码,退出程序时把列表框的内容保存到文件中,然后在启动时从文件中读入数据。

小结:QT中建立Python GUI应用程序的内容介绍到这,本文章大多是操作,并且图文并茂,希望真的可以帮助你解决问题。谢谢留言。

【编辑推荐】

初识Python与Qt

Qt 4.5 开发环境及安装

利用Qt Designer开发Qt界面

Qt 平台中使GUI保持响应流畅

如何让插件加载到Qt Designer

快速开发交叉编译之Qt Designer

责任编辑:zhaolei 来源: 互联网
相关推荐

2021-02-05 11:55:37

PythonWindows平台代码

2011-06-09 09:12:12

QT symbian

2009-06-10 14:59:04

Netbeans 6.应用程序

2023-12-10 14:43:30

PythonGUIeel

2011-05-03 09:14:45

QtOvi商店Symbian

2009-12-23 17:30:54

ADO.NET应用程序

2021-05-26 13:34:21

Windows 10Linux GUI应用程序

2023-10-07 09:37:53

2011-04-29 10:17:07

应用商店

2023-05-19 08:49:58

SQLAlchemy数据库

2022-09-29 10:11:13

命令Arch LinuxGUI

2011-06-09 09:31:40

Qt 实例

2011-10-13 16:34:30

MeeGoQt插件

2021-09-26 08:30:31

Python应用程序代码

2009-04-01 14:33:33

2011-07-05 16:59:15

Qt 动态 链接库

2011-06-21 11:10:28

Qt Embedded

2011-07-05 17:07:46

Qt 插件 模块

2021-01-30 17:57:23

Python缓存开发

2010-02-02 15:37:11

点赞
收藏

51CTO技术栈公众号