例1,简单的窗口
import sys
from PyQt5.QtWidgets import QApplication, QWidget
# 这里引入了PyQt5.QtWidgets模块,这个模块包含了基本的组件。
if __name__ == '__main__':
app = QApplication(sys.argv)#每个PyQt5应用都必须创建一个应用对象。sys.argv是一组命令行参数的列表
w = QWidget()#窗口
w.resize(550, 450)#resize()方法能改变控件的大小,这里的意思是窗口宽250px,高150px
w.move(300, 300)#移动
w.setWindowTitle('Simple')#设置标题
w.show()
sys.exit(app.exec_())
例2,带窗口图标
class Example(QWidget): def __init__(self): super().__init__() ...
面向对象编程最重要的三个部分是类(class)、数据和方法。我们创建了一个类的调用,这个类继承自QWidget。这就意味着,我们调用了两个构造器,一个是这个类本身的,一个是这个类继承的。super()构造器方法返回父级的对象。__init__()方法是构造器的一个方法。
setGeometry(坐标的x,y,窗口大小的宽,高)把窗口放到屏幕上并且设置窗口大小(resize()和move()的合体)
# import sys
# from PyQt5.QtWidgets import QApplication, QWidget
# from PyQt5.QtGui import QIcon
#
# class 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_())
例3,提示框
import sys
from PyQt5.QtWidgets import (QWidget, QToolTip,
QPushButton, QApplication)
from PyQt5.QtGui import QFont
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# QToolTip.setFont(QFont('SansSerif', 10))
self.setToolTip('这是背景提示')
btn = QPushButton('Button', self)
btn.setToolTip('这里是按钮提示')
btn.resize(btn.sizeHint())
btn.move(50, 50)
but2=QPushButton('第二个按钮',self)
but2.setToolTip('按钮二提示')
but2.resize(but2.sizeHint())
but2.move(200,50)
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('Tooltips')
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
QToolTip.setFont(QFont('SansSerif', 10))
这个静态方法设置了提示框的字体,我们使用了10px的SansSerif字体。
self.setToolTip('This is a QWidget widget')
调用setTooltip()创建提示框可以使用富文本格式的内容。
btn = QPushButton('Button', self)
btn.setToolTip('This is a QPushButton widget')
创建一个按钮,并且为按钮添加了一个提示框。
btn.resize(btn.sizeHint())
btn.move(50, 50)
调整按钮大小,并让按钮在屏幕上显示出来,sizeHint()方法提供了一个默认的按钮大小。
关闭一个窗口最直观的方式就是点击标题栏的那个叉,这个例子里,我们展示的是如何用程序关闭一个窗口。这里我们将接触到一点single和slots(插槽)的知识。
本例使用的是QPushButton组件类。
QPushButton(string text, QWidget parent = None)
Copied!
text参数是想要显示的按钮名称,parent参数是放在按钮上的组件,在我们的 例子里,这个参数是QWidget。应用中的组件都是一层一层(继承而来的?)的,在这个层里,大部分的组件都有自己的父级,没有父级的组件,是顶级的窗口。
import sys
from PyQt5.QtWidgets import QWidget, QPushButton, QApplication
from PyQt5.QtCore import QCoreApplication
class 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_())
例5,消息盒子
如果关闭QWidget,就会产生一个QCloseEvent,并且把它传入到closeEvent函数的event参数中。改变控件的默认行为,就是替换掉默认的事件处理。
reply = QMessageBox.question(self, 'Message',
"Are you sure to quit?", QMessageBox.Yes |
QMessageBox.No, QMessageBox.No)
我们创建了一个消息框,上面有俩按钮:Yes和No.第一个字符串显示在消息框的标题栏,第二个字符串显示在对话框,第三个参数是消息框的俩按钮,最后一个参数是默认按钮,这个按钮是默认选中的。返回值在变量reply里。
if reply == QMessageBox.Yes:
event.accept()
else:
event.ignore()
这里判断返回值,如果点击的是Yes按钮,我们就关闭组件和应用,否者就忽略关闭事件。
import sys
from PyQt5.QtWidgets import QWidget, QMessageBox, QApplication
class 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_())
例6,窗口居中
QtGui.QDesktopWidget提供了用户的桌面信息,包括屏幕的大小。
self.center()
这个方法是调用我们下面写的,实现对话框居中的方法。
qr = self.frameGeometry()
获得主窗口所在的框架。
cp = QDesktopWidget().availableGeometry().center()
获取显示器的分辨率,然后得到屏幕中间点的位置。
qr.moveCenter(cp)
然后把主窗口框架的中心点放置到屏幕的中心位置。
self.move(qr.topLeft())
然后通过move函数把主窗口的左上角移动到其框架的左上角,这样就把窗口居中了。
import sys
from PyQt5.QtWidgets import QWidget, QDesktopWidget, QApplication
class 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_())
菜单和工具栏
这个章节,我们会创建状态栏、菜单和工具栏。菜单是一组位于菜单栏的命令。工具栏是应用的一些常用工具按钮。状态栏显示一些状态信息,通常在应用的底部。
主窗口
QMainWindow提供了主窗口的功能,使用它能创建一些简单的状态栏、工具栏和菜单栏。
状态栏
statusBar()方法,创建状态栏。第一次调用会创建一个状态栏,而再次调用会返回一个状态栏对象。showMessage()方法在状态栏上显示一条信息。
self.statusBar().showMessage('Ready')
菜单栏
在示例中,我们创建了只有一个命令的菜单栏,这个命令就是终止应用。同时也创建了一个状态栏。而且还能使用快捷键Ctrl+Q退出应用。
exitAct = QAction(QIcon('exit.png'), '&Exit', self)
exitAct.setShortcut('Ctrl+Q')
exitAct.setStatusTip('Exit application')
QAction是菜单栏、工具栏或者快捷键的动作的组合。上面三行中,前两行创建了一个图标、一个exit的标签和一个快捷键组合,都执行了一个动作;第三行,创建了一个状态栏,当鼠标悬停在菜单栏的时候,能显示当前状态。
exitAct.triggered.connect(qApp.quit)
当执行这个指定的动作时,就触发了一个事件。这个事件跟QApplication的quit()行为相关联,所以这个动作就能终止这个应用。
menubar = self.menuBar()
fileMenu = menubar.addMenu('&File')
fileMenu.addAction(exitAct)
menuBar()创建菜单栏。这里创建了一个菜单栏,并用addMenu()在上面添加了一个file菜单,用addAction()关联了点击退出应用的事件。



