专栏首页ascii0x03的安全笔记PySide——Python图形化界面入门教程(一)

PySide——Python图形化界面入门教程(一)

PySide——Python图形化界面入门教程(一)

——基本部件和HelloWorld

翻译自:http://pythoncentral.io/intro-to-pysidepyqt-basic-widgets-and-hello-world/

本教程第一部分将给出PySide的最基本知识点,包含使用的对象,和一些能帮助你了解Python/Qt应用是如何构建的小例子。

首先来看一下基本的Qt对象。Qt包含了许多类去处理XML、多媒体、数据库和网络等等事物,但我们现在重点关注可视化的元素——窗口、对话框和控件(controls)。Qt所有的可视化元素称为部件(原文widgets,翻译水平低,为不误导别人,所以下文沿用widgets),并且继承自一个公共的父类QWidget。本文中我们继续使用“widget”作为Qt应用程序可视化元素的称呼。

第一个Python/Qt应用:Hello,World

我们从一个非常简单的应用开始:一个带有标签显示“Hello,wordl!”的窗口。它非常易懂,但是并不好看——我们稍后会改造它。

# Allow access to command-line arguments
import sys
 
# Import the core and GUI elements of Qt
from PySide.QtCore import *
from PySide.QtGui import *
 
# Every Qt application must have one and only one QApplication object;
# it receives the command line arguments passed to the script, as they
# can be used to customize the application's appearance and behavior
qt_app = QApplication(sys.argv)
 
# Create a label widget with our text
label = QLabel('Hello, world!')
 
# Show it as a standalone widget
label.show()
 
# Run the application's event loop
qt_app.exec_()

我们概括一下程序都做了什么:

1.创建一个Qt application

2.创建一个widget

3.作为窗口显示

4.运行application的事件循环

这就是所有Qt应用程序的基本架构了。每一个应用,无论它打开了多少个窗口,一定有且只有一个QApplication对象——用来初始化、处理控制流、事件处理和应用层面的设置以及关闭应用时的清理工作。

一个没有设置父亲(parent,如父窗口)创建的widget,说明它作为一个窗口显示,这就是应用最开始窗口。它显示出来后,QApplication对象的exec_方法被调用,开始进入应用的主事件循环。

对例子的一些解释:

1.注意QApplication的构造器接收sys.argv作为参数,从而允许用户通过命令行定制外观等行为。

2.我们的主widget是一个QLabel,可以显示简单的文本。任何widget——继承自QWidget的任何对象——可以被作为窗口显示。

两个基本的Wedgets

让我们来看看两个最基本的Python/Qt widgets。第一个是所有widget的父类,QWidget;然后是继承自它的一个最简单的widgets。

QWidget

一个QWideget的构造器接收两个参数,parent QWidget和flags QWindowFlags,其所有子类都有这两个参数。widget被parent Qwidget拥有,当parent被销毁时,该widget也被销毁,并且该widget的位置受限于其parent。如果parent参数是None或没有设置,该widget处于最上层,由QApplication对象拥有。flags参数控制widget的多种属性,比如其是否作为窗口;通常,默认的0是正确的选择。

你会经常这样构造QWidget:

widget = QWidget()

或者

widget = QWidget(some_parent)

一个QWidget经常被用来创建最上层的窗口,像这样:

 1 qt_app = QApplication(sys.argv)
 2  
 3 # Create a widget
 4 widget = QWidget()
 5  
 6 # Show it as a standalone widget
 7 widget.show()
 8  
 9 # Run the application's event loop
10 qt_app.exec_()

QWidget类有很多方法,更多常用的方法在其他widget时讨论。接下来使用到的setMinimumSize方法接受一个QtCore.QSize作为其参数;QSize代表两个尺寸(宽 * 高)来度量widget的像素。

widget.setMinimumSize(QSize(800, 600))

另一个被所有widget使用的方法是setWindowTitle;如果widget作为最上层窗口显示,这会设置它的标题栏。

widget.setWindowTitle('I Am A Window!')

QLabel

我们已经在helloworld中使用过了QLabel,它经常被用来显示简单的文本或者富文本,甚至图片、视频。(常常是非交互式的)

它有两个相似的构造器,一个与QWidget完全一样,另一个接收一个用来显示的unicode string文本。

1 label = QLabel(parent_widget)
2 label = QLabel('Hello, world!', parent_widget)

标签(label)的内容默认是左对齐的,但是QLabel有一个setAlignment方法可以改变它到任何PySide.QtCore.Qt.Alignment,像这样:

label.setAlignment(Qt.AlignCenter)

你还可以使用QLabel的setIndet方法设置缩进;缩进是从内容对齐边按照像素算起的,例如:如果对其是Qt.AlignRight,那么缩进将从右边算起。在QLabel中换行(wrap text)使用QLabel.setWordWrap(True);设置为False取消自动换行(注“calling it with an argument of False turns of word-wrapping.word-wrapping”或许是turns off)。QLabel还有许多方法,但这些是最基本的。

一个更高级的Hello,World

现在我们研究了QWidget类和它的子类QLabel,可以来升级我们的“Hello,world!”应用了。

之前我们是简单创建了一个全局的widget变量,这次我们通过集成QLabel来封装我们的窗口。这看起来有一些复杂,但稍后我们会在后面的例子中解释原理。

 1 # Remember that we're omitting the import
 2 # section from our examples for brevity
 3  
 4 # Create the QApplication object
 5 qt_app = QApplication(sys.argv)
 6  
 7 class HelloWorldApp(QLabel):
 8     ''' A Qt application that displays the text, "Hello, world!" '''
 9     def __init__(self):
10         # Initialize the object as a QLabel
11         QLabel.__init__(self, "Hello, world!")
12  
13         # Set the size, alignment, and title
14         self.setMinimumSize(QSize(600, 400))
15         self.setAlignment(Qt.AlignCenter)
16         self.setWindowTitle('Hello, world!')
17  
18     def run(self):
19         ''' Show the application window and start the main event loop '''
20         self.show()
21         qt_app.exec_()
22  
23 # Create an instance of the application and run it
24 HelloWorldApp().run()

好,走到这一步,我们已经准备好在下一个例子中来一些干货了:更多的widget,布局容器(layout containers)、槽与信号——Qt的方式让应用与用户交互。

转载请注明出处:http://www.cnblogs.com/ascii0x03/p/5495035.html

By Ascii0x03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 手把手 | 教你用Python创建微信聊天机器人

    前言 最近研究微信 API,发现个非常好用的 python 库:wxpy。wxpy 基于 itchat,使用了 Web 微信的通讯协议,实现了微信登录、收发消息...

    灯塔大数据
  • 推荐 | 6 款 Python 特殊文本格式处理库

    前言 以下是一些 Python 编写的用来解析和操作特殊文本格式的库,希望对大家有所帮助。 1 Tablib https://www.oschina.net/p...

    灯塔大数据
  • 技术 | Python从零开始系列连载(八)

    导读 上一期学习了Python特色数据类型(列表)上半节,相信大家都已经熟悉啦,我们这一期就来学习Python特色数据类型(列表)下半节吧! 列表切片 列表切片...

    灯塔大数据
  • 塔秘 | 极简Python带你探索分类与回归的奥秘

    前言 本文从分类和回归两个方面介绍了基本的监督学习方法,并用Scikit-Learn做了实例演示。 ? 为何使用人工智能和机器学习? 地球的未来在于人工智能和机...

    灯塔大数据
  • Python 基础 类的继承

    如果寂静定义了Person类,需要定义新的Student 和Teacher 类时     可以直接从Person 中继承     class Person(Ob...

    用户1197315
  • 技术 | Python从零开始系列连载(七)

    导读 上一期学习了Python程序的基本控制流程,相信大家都已经熟悉啦,我们这一期就来学习Python特色数据类型(列表)吧! Python特色数据类型(列表)...

    灯塔大数据
  • 技术 | Python从零开始系列连载(六)

    导读 为了解答大家初学Python时遇到各种常见问题,小灯塔特地整理了一系列从零开始的入门到熟练的系列连载 上一期学习了Python程序的基本控制流程,相信大家...

    灯塔大数据
  • Install Python3.6.x on CentOS7

    ---- 概述 在之前的文章中,我已经介绍了在CentOS6中安装Python2.7.x和Python3.4.x。请参考源码编译安装或者升级Python在Cen...

    BrianLv
  • Python进阶教程(三)

    Python 进阶 我们在Python进阶教程(二),介绍了一些Python进阶用法。今天给大家介绍的是和c/c++混合编程的用法。我们都知道特别是Python...

    BrianLv
  • python基础 面向对象编程

    面向对象编程的基本思想   类和实例     类用于定义抽象类型     实例根据类的定义创建出来 python 定义类并创建实例   在python 中,通过...

    用户1197315

扫码关注云+社区

领取腾讯云代金券