First programs
来源:互联网 发布:linux查看版本命令 编辑:程序博客网 时间:2024/06/11 20:59
First programs
这一部分教程中,学习一些基本的功能。比如显示提示框、图标、关闭窗口、显示消息框和把框口放屏幕中间。
简单例子
这是个显示一个小窗口的简单例子。然而可对这个窗口做些操作。可以设置它的大小,最大化或者最小化。
import sysfrom PyQt5.QtWidgets import QApplication, QWidgetif __name__ == '__main__': app = QApplication(sys.argv) w = QWidget() w.resize(250, 150) w.move(300, 300) w.setWindowTitle('Simple') w.show() sys.exit(app.exec_())
以上代码会在屏幕中间显示一个窗口
import sysfrom PyQt5.QtWidgets import QApplication, QWidget
基本的控件在 PyQt5.QtWidgets 模块中
app = QApplication(sys.argv)
每个PyQt5应用必须创建application对象。sys.argv是命令行传入的参数。
python脚本可以从shell运行,它是其中一种控制脚本启动的方式
w = QWidget( )
QWidget控件是PyQt5中所有类的基类。
代码中我们调用了QWidget的默认构造器,默认的构造器没有父类。没有父类的控件叫做window
w.resize(250, 150)
该方法改变控件的大小。250PX 宽 、150PX 高
w.move(300, 300)
该方法移动控件到屏幕的(300 , 300)位置
w.setWindowTitle('Simple')
该方法设置window的title,该title显示在标题栏中
w.show()
该方法将控件显示在屏幕上。一个控件首先在内存中创建,然后显示在屏幕上
sys.exit(app.exec_())
最后,进入应用的主循环。
事件处理从这开始。主循环从窗口系统接收事件,然后向应用中的控件分发。
当调用 exit() 方法 或者 主控件销毁,主循环就会结束。
sys.exit()会确保 a clean exit。
注意exec_方法,因为exec是python的关键字,因此用exec_代替
应用图标
应用小图标通常显示在标题栏左上角,下面的例子介绍在PyQt5中如何做。并且介绍一些新方法。
环境并不显示应用图标。需要我们使能它们。
import sysfrom PyQt5.QtWidgets import QApplication, QWidgetfrom PyQt5.QtGui import QIconclass Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setGeometry(300, 300, 300, 220) self.setWindowTitle("Icon") self.setWindowIcon(QIcon("../web.png")) self.show()if __name__ == "__main__": app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())
前一个例子是面向过程的。python语言支持面向过程和面向对象。
class Example(QWidget): def __init__(self): super().__init__() ...
面向对象的程序设计三个重要的东西是:类,数据和方法。
这里创建了一个叫 Example 的新类,这个类继承自 QWidget 类,这意味着我们调了两个构造器:第一个是Example的,第二个是父类的。super() 方法返回 Example 类的父类对象,并调用这个父类对象的构造器方法。python语言中 _init_() 是类的构造器方法
self.initUI()
UI相关操作放在这个方法中
self.setGeometry(300, 300, 300, 220)self.setWindowTitle('Icon')self.setWindowIcon(QIcon('web.png'))
上面三个方法继承自 QWidget 类。setGeometry() 做两件事:将window放在屏幕上并设置大小,前两个参数是定位坐标点,第三、四个参数分别是是window的宽度、高度,其实是resize() 和 move() 两个方法的结合。为了设置应用图标,需要创建QIcon 对象,接受图标的路径作为参数
if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())
创建application和Example
显示提示框
可以为任意widget设置提示框
import sysfrom PyQt5.QtWidgets import QApplication, QWidget, QToolTip, QPushButtonfrom PyQt5.QtGui import QFontclass Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): QToolTip.setFont(QFont("SansSerif", 10)) self.setToolTip("this is a <b>QWidget</b>widget") btn = QPushButton("button", self) btn.setToolTip("this is a <b>QPushButton</b> widget") btn.resize(btn.sizeHint()) btn.move(50, 50) self.setGeometry(300, 300, 300, 200) self.setWindowTitle("ToolTip") self.show()if __name__ == "__main__": app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())
这个例子中,为两个控件显示提示框
QToolTip.setFont(QFont('SansSerif', 10))
这个方法设置提示框里的字体和字体大小
self.setToolTip('This is a <b>QWidget</b> widget')
调用setToolTip() 方法创建提示框,可以使用富文本格式
btn = QPushButton('Button', self)btn.setToolTip('This is a <b>QPushButton</b> widget')
创建一个button,并为它设置提示框
btn.resize(btn.sizeHint())btn.move(50, 50)
sizeHint() 为button设置推荐的大小
关闭window
我们都知道可以通过点击标题栏的X号关闭库存窗口。下面介绍通过程序关闭window,并初步接触 signals ( 信号 ) 和 slots ( 槽 )
下面是 QPushButton 的构造器,我们会在例子中用到 QPushButton(string text, QWidget parent = None)
参数text是将在button上显示的文本,参数parent是一个放置这个button的控件。
应用的所有控件有层次结构,多用控件有父视图。顶层的window无父视图
import sysfrom PyQt5.QtWidgets import QWidget, QPushButton, QApplicationfrom PyQt5.QtCore import QCoreApplicationclass Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): qbtn = QPushButton("quit", self) qbtn.clicked.connect(QCoreApplication.instance().quit) qbtn.resize(qbtn.sizeHint()) qbtn.move(50, 50) self.setGeometry(300, 300, 250, 150) self.setWindowTitle('Quit button') self.show()if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())
例子中,创建了一个button,点击button,应用终止
from PyQt5.QtCore import QCoreApplication
从QtCore模块导入类QCoreApplication
qbtn = QPushButton('Quit', self)
这个button是QPushButton类的实例。构造器第一个参数是button上显示的文字,第二个参数是这个button的父控件,即继承自QWidget的Example控件
qbtn.clicked.connect(QCoreApplication.instance().quit)
PyQt5事件处理系统建立在 signal & slot 机制上。
当点击按键时。点击 signal 被发射。
slot可以是Qt slot 或者 python 回调。
QCoreApplication包含主要的事件循环–处理和分发所有事件,instance方法返回QCoreApplication当前实例,注意,QCoreApplication实例由QApplication创建。点击 signal被连接到quit()方法,该方法可以结束应用。通讯是在发送者和接受者两个对象之间完成的,发送者是这个button,接受者是这个application对象
消息框
默认点击标题栏的X,QWidget就会关闭,有时我们想修改这个默认行为。例如,有个被打开的、编辑过的文件,我们会显示一个消息框来确认操作。
import sysfrom PyQt5.QtWidgets import QWidget, QMessageBox, QApplicationclass Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setGeometry(300, 300, 250, 150) self.setWindowTitle('Message box') self.show() def closeEvent(self, event): reply = QMessageBox.question(self, 'Message', "Are you sure to quit?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if reply == QMessageBox.Yes: event.accept() else: event.ignore() if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())
当关闭一个QWidget,会生成一QCloseEvent。要修改控件的行为,需要重载closeEvent()事件处理器
reply = QMessageBox.question(self, 'Message', "Are you sure to quit?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
显示带有Yes和No的两个button的消息框,第一个字符串显示在标题栏上,第二个字符创是对话框内容,第三个参数指定显示在对话框中的按键组合,最后一个参数是默认获得焦点的button,返回值保存在replay变量中
if reply == QtGui.QMessageBox.Yes: event.accept()else: event.ignore()
这里是测试返回值。如果点击yes,就会处理这个close事件来终止应用,否则忽略close事件
将window放屏幕中间
下面的程序展示如何将window放在屏幕中间
import sysfrom PyQt5.QtWidgets import QWidget, QDesktopWidget, QApplicationclass Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.resize(250, 150) self.center() self.setWindowTitle('Center') self.show() def center(self): qr = self.frameGeometry() cp = QDesktopWidget().availableGeometry().center() qr.moveCenter(cp) self.move(qr.topLeft())if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())
QDesktopWidget 类提供屏幕的相关信息,包括屏幕的大小
self.center()
功能代码放在center()方法中
qr = self.frameGeometry()
返回一个指明主window几何结构的矩形,它包含窗口框架
cp = QDesktopWidget().availableGeometry().center()
计算出屏幕分辨率,根据分辨率得到中心点
qr.moveCenter(cp)
矩形已经有宽和高了,现在将矩形的中心点定位到屏幕的中心点上,矩形的大小不变
self.move(qr.topLeft())
移动 应用窗口的左上角 到 矩形左上角,这样,window就位于屏幕的中间了
原文地址:http://zetcode.com/gui/pyqt5/firstprograms/
- First programs
- First programs in PyQt4 toolkit
- How to design your first programs
- 9.1 Programs
- Useful programs
- Optimal Programs
- Higher-Order Perl: Transforming Programs with Programs
- first
- first
- first
- First
- first
- first
- first
- first
- First
- first
- First
- sleep和wait的区别
- 协调者布局 实现上下滑动
- Eclipse中的SVN操作
- 转发与重定向的区别
- 基于位置的服务——百度地图SDK练习
- First programs
- CSS 选择器常见类型
- DigitalOcean Vpn
- SpringMVC 常用注解 及 其用法 (下)
- jsp中taglib属性
- 获取DataTable表的总行数
- 设置的mysql密码无效的问题
- Centos7+nginx+tomcat7反向代理,负载,集群
- 标签二值化LabelBinarizer