添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
Skip to content
Miacss' website

Hello World

本章学习 Qt 的基本功能

例 1,简单的窗口

这个简单的小例子展示的是一个小窗口。但是我们可以在这个小窗口上面做很多事情,改变大小,最大化,最小化等,这需要很多代码才能实现。这在很多应用中很常见,没必要每次都要重写这部分代码,Qt 已经提供了这些功能。PyQt5 是一个高级的工具集合,相比使用低级的工具,能省略上百行代码。

运行上面的代码,能展示出一个小窗口。

这里引入了 PyQt5.QtWidgets 模块,这个模块包含了基本的组件。

每个 PyQt5 应用都必须创建一个应用对象。 sys.argv 是一组命令行参数的列表。Python 可以在 shell 里运行,这个参数提供对脚本控制的功能。

QWidge 控件是一个用户界面的基本控件,它提供了基本的应用构造器。默认情况下,构造器是没有父级的,没有父级的构造器被称为窗口 (window)。

resize() 方法能改变控件的大小,这里的意思是窗口宽 250px,高 150px。

move() 是修改控件位置的方法。它把控件放置到屏幕坐标的 (300,300) 的位置。注:屏幕坐标系的原点是屏幕的左上角。

我们给这个窗口添加了一个标题,标题在标题栏展示 (虽然这看起来是一句废话,但是后面还有各种栏,还是要注意一下,多了就蒙了)。

show() 能让控件在桌面上显示出来。控件在内存里创建,之后才能在显示器上显示出来。

最后,我们进入了应用的主循环中,事件处理器这个时候开始工作。主循环从窗口上接收事件,并把事件派发到应用控件里。当调用 exit() 方法或直接销毁主控件时,主循环就会结束。 sys.exit() 方法能确保主循环安全退出。外部环境会收到主控件如何结束的信息。

exec_() 之所以有个下划线,是因为 exec 是一个 Python 的关键字。

程序预览:

simple

例 2,带窗口图标

窗口图标通常是显示在窗口的左上角,标题栏的最左边。下面的例子就是怎么用 PyQt5 创建一个这样的窗口。

在某些环境下,图标显示不出来。如果你遇到了这个问题,看我在 Stackoverfolw 的 回答

前一个例子是使用的 过程式编程 。Python 还支持 面向对象 的编程:

面向对象编程最重要的三个部分是类(class)、数据和方法。我们创建了一个类的调用,这个类继承自 QWidget 。这就意味着,我们调用了两个构造器,一个是这个类本身的,一个是这个类继承的。 super() 构造器方法返回父级的对象。 __init__() 方法是构造器的一个方法。

使用 initUI() 方法创建一个 GUI。

上面的三个方法都继承自 QWidget 类。 setGeometry() 有两个作用:把窗口放到屏幕上并且设置窗口大小。参数分别代表屏幕坐标的 x、y 和窗口大小的宽、高。也就是说这个方法是 resize() move() 的合体。最后一个方法是添加了图标。先创建一个 QIcon 对象,然后接受一个路径作为参数显示图标。

应用和示例的对象创立,主循环开始。

程序预览:

icon

例 3,提示框

在这个例子中,我们为应用创建了一个提示框。

setFont() 这个静态方法设置了提示框的字体,我们使用了 10px 的 SansSerif 字体。

调用 setToolTip() 创建提示框可以使用富文本格式的内容。

创建一个按钮,并且为按钮添加了一个提示框。

调整按钮大小,并让按钮在屏幕上显示出来, sizeHint() 方法提供了一个默认的按钮大小。

程序预览:

tooltip

例 4,关闭窗口

关闭一个窗口最直观的方式就是点击标题栏的那个叉,这个例子里,我们展示的是如何用程序关闭一个窗口。这里我们将接触到一点 signals (信号) 和 slots (槽) 的知识。

本例使用的是 QPushButton 组件类。

text 参数是想要显示的按钮名称, parent 参数是放在按钮上的组件,在我们的例子里,这个参数是 QWidget 。应用中的组件都是一层一层继承而来的,在这个层里,大部分的组件都有自己的父级,没有父级的组件,是顶级的窗口。

这里创建了一个点击之后就退出窗口的按钮。

程序需要 QtCore 对象。

创建一个继承自 QPushButton 的按钮。第一个参数是按钮的文本,第二个参数是按钮的父级组件,这个例子中,父级组件就是我们创建的继承自 QWidget Example 类。

事件传递系统在 PyQt5 内建的 signals 和 slots 机制里面。点击按钮之后,信号会被捕捉并给出既定的反应。 QCoreApplication 包含了事件的主循环,它能添加和删除所有的事件, instance() 创建了一个它的实例。 QCoreApplication 是在 QApplication 里创建的。点击事件和能终止进程并退出应用的 quit 函数绑定在了一起。在发送者和接受者之间建立了通讯,发送者就是按钮,接受者就是应用对象。

程序预览:

quitbutton

例 5,消息盒子

默认情况下,我们点击标题栏的 × 按钮, QWidget 就会关闭。但是有时候,我们修改默认行为。比如,如果我们打开的是一个文本编辑器,并且做了一些修改,我们就会想在关闭按钮的时候让用户进一步确认操作。

如果关闭 QWidget,就会产生一个 QCloseEvent ,并且把它传入到 closeEvent 函数的 event 参数中。改变控件的默认行为,就是替换掉默认的事件处理。

我们创建了一个消息框,上面有俩按钮:Yes 和 No。第一个字符串显示在消息框的标题栏,第二个字符串显示在对话框,第三个参数是消息框的俩按钮,最后一个参数是默认按钮,这个按钮是默认选中的。返回值在变量 reply 里。

这里判断返回值,如果点击的是 Yes 按钮,我们就关闭组件和应用,否者就忽略关闭事件。

程序预览:

messagebox

例 6,窗口居中