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经常被用来创建最上层的窗口,像这样:

 qt_app = QApplication(sys.argv)

 # Create a widget
widget = QWidget() # Show it as a standalone widget
widget.show() # Run the application's event loop
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文本。

 label = QLabel(parent_widget)
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来封装我们的窗口。这看起来有一些复杂,但稍后我们会在后面的例子中解释原理。

 # Remember that we're omitting the import
# section from our examples for brevity # Create the QApplication object
qt_app = QApplication(sys.argv) class HelloWorldApp(QLabel):
''' A Qt application that displays the text, "Hello, world!" '''
def __init__(self):
# Initialize the object as a QLabel
QLabel.__init__(self, "Hello, world!") # Set the size, alignment, and title
self.setMinimumSize(QSize(600, 400))
self.setAlignment(Qt.AlignCenter)
self.setWindowTitle('Hello, world!') def run(self):
''' Show the application window and start the main event loop '''
self.show()
qt_app.exec_() # Create an instance of the application and run it
HelloWorldApp().run()

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

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

By Ascii0x03

PySide——Python图形化界面入门教程(一)的更多相关文章

  1. PySide——Python图形化界面入门教程(四)

    PySide——Python图形化界面入门教程(四) ——创建自己的信号槽 ——Creating Your Own Signals and Slots 翻译自:http://pythoncentral ...

  2. PySide——Python图形化界面入门教程(六)

    PySide——Python图形化界面入门教程(六) ——QListView和QStandardItemModel 翻译自:http://pythoncentral.io/pyside-pyqt-tu ...

  3. PySide——Python图形化界面入门教程(五)

    PySide——Python图形化界面入门教程(五) ——QListWidget 翻译自:http://pythoncentral.io/pyside-pyqt-tutorial-the-qlistw ...

  4. PySide——Python图形化界面入门教程(三)

    PySide——Python图形化界面入门教程(三) ——使用内建新号和槽 ——Using Built-In Signals and Slots 上一个教程中,我们学习了如何创建和建立交互widget ...

  5. PySide——Python图形化界面入门教程(二)

    PySide——Python图形化界面入门教程(二) ——交互Widget和布局容器 ——Interactive Widgets and Layout Containers 翻译自:http://py ...

  6. PySide——Python图形化界面

    PySide——Python图形化界面 PySide——Python图形化界面入门教程(四) PySide——Python图形化界面入门教程(四) ——创建自己的信号槽 ——Creating Your ...

  7. python+pycharm+PyQt5 图形化界面安装教程

    python图形化界面安装教程 配置环境变量 主目录 pip所在目录,及script目录 更新pip(可选) python -m pip install --upgrade pip ps:更新出错一般 ...

  8. Oracle数据库及图形化界面安装教程详解

    百度云盘oracle数据库及图形化界面安装包 链接: https://pan.baidu.com/s/1DHfui-D2n1R6_ND3wDziQw 密码: f934 首先在电脑D盘(或者其他不是C盘 ...

  9. 如何使用python图形化界面wxPython

    GUI库主要有三类:tkinter,wxPython和PyQt5,下面主要是针对wxPython的使用说明. 下面的操作均在win10 + pycharm上进行 wxPython的安装: pip in ...

随机推荐

  1. IT增值服务客户案例(二):河南郑州大四实习生,职业规划和项目开发指导

    客户整体情况,河南郑州大四在校学生,目前在企业实习,从事Java开发工作.有一定的项目开发经验,对Java周边技术有基本的理解. 客户购买的是"拜师学艺"服务,按月付款. 经过多次 ...

  2. Java多线程编程— 概念以及经常使用控制

    多线程能满足程序猿编写很有效率的程序来达到充分利用CPU的目的,由于CPU的空暇时间可以保持在最低限度.有效利用多线程的关键是理解程序是并发运行而不是串行运行的.比如:程序中有两个子系统须要并发运行, ...

  3. Erlang中频繁发送远程消息要注意的问题

    http://avindev.iteye.com/blog/76373 注:这篇文章可能会有争议,欢迎提出意见 在Erlang中,如果要实现两个远程节点之间的通信,就需要通过网络来实现,对于消息发送, ...

  4. HDU 4352 XHXJ's LIS - 状压dp + LIS

    传送门 题目大意: 求[l, r]中数位的最长上升序列恰好为k的数的个数. 题目分析: 首先要理解\(o(nlogn)\)求LIS问题的思路,每次寻找第一个大于等于的数将其更改. 设dp[pos][s ...

  5. 微信小程序之 满意度

    话不多说,我们来看一下效果图: 要实现的效果:点击到第几颗星,就要显示到第几颗星, 接下来直接查看源码: <view class="l-evalbox row"> &l ...

  6. [转载]Android Studio卡在refreshing gradle project的原因和快速解决办法

    转载请注明出处:http://blog.csdn.net/u013005791/article/details/60143750 这个问题遇到过很多次,网上也有很多解决办法,但是好像都没有发现refr ...

  7. Linode跨节点迁移:从Tokyo到Fremont

    背景 上一篇博客交代了如何在 Linode 上搭建邮件服务器,并配置好各种协议.记录来投入实际使用. 由于实践过程中,曾经尝试使用明文协议与服务器交流数据,可能泄露了账号.密码信息,造成之后被攻击发送 ...

  8. Android显示gif格式图片

    大家知道,在Android中使用ImageView来显示gif格式的图片,我们无法得到gif格式图片该有的效果,它只会停在第一帧上,而不会继续.这时只能看到一张静态的图片,这里我们可以使用个简单的方法 ...

  9. matplotlib:path effects

    import matplotlib.pyplot as plt, matplotlib.patheffects as path_effects 1. normal fig = plt.figure(f ...

  10. HistCite 引文分析软件的利器

    所需工具及网站清单, HISTCITE:DOWNLOAD YOUR FREE COPY. 提交自己的基本信息即可,十分简单: SCI数据库官网(web of science):http://apps. ...