找回密码
 立即注册
Qt开源社区 门户 查看内容

PYQT2

2019-5-14 05:55| 发布者: admin| 查看: 954| 评论: 0

摘要: 消息盒子MessageBox 其实就是各种类型的消息对话框,如信息对话框、警告对话框、循环对话框等,主要的是对话框的图标以及按钮的个个数。QMessageBox 类提供了若干个静态方法可以显示各种类型的对话框。例如informati ...
消息盒子MessageBox 其实就是各种类型的消息对话框,如信息对话框、警告对话框、循环对话框等,主要的是对话框的图标以及按钮的个个数。

QMessageBox 类提供了若干个静态方法可以显示各种类型的对话框。例如information方法用于显示信息对话框,warning方法用于显示警告对话框,question方法用于显示循环对话框。
import sys

from PyQt5.QtWidgets import QWidget,QMessageBox,QApplication

class MessageBox(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(800,600,300,300)
self.setWindowTitle('消息盒子')
self.show()
def closeEvent(self, event):
reply =QMessageBox.question(self,'消息',"你真的要退出?",QMessageBox.Yes|QMessageBox.No,QMessageBox.No)

if reply == QMessageBox.Yes:
event.accept()
else:
event.ignore()

if __name__ == '__main__':
app = QApplication(sys.argv)
ex= MessageBox()
sys.exit(app.exec_())
面向对象的方式将与窗口县官代码都封装到MessageBox类中,这是编写PYQT5程序常用的方式,以后编写的代码都会采用这种方式

closeEvent方法窗口关闭的事件方法,当窗口关闭时,会首先调用该方法。这个方法调用是自动的,不需要干预,也不需要注册该方法。方法名必须是closeEvent

closeEvent方法第2个参数是与关闭事件有关的对象,其中accept方法让窗口关闭,ignore方法方法会让取消窗口关闭动作。

窗口居中

没有提供让窗口居中的方法,根据窗口的宽度、高度以及屏幕的宽度高于计算出窗口左上角的左边,然后使用窗口对象的move方法将窗口移动到中心位置。
import sys

from PyQt5.QtWidgets import QWidget,QMessageBox,QApplication,QDesktopWidget

class MessageBox(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(800,600,300,300)
self.center()
self.setWindowTitle('消息盒子')
self.show()
def closeEvent(self, event):
reply =QMessageBox.question(self,'消息',"你真的要退出?",QMessageBox.Yes|QMessageBox.No,QMessageBox.No)

if reply == QMessageBox.Yes:
event.accept()
else:
event.ignore()
def center(self):
desktop =app.desktop()
self.move((desktop.width()-self.width())/2,(desktop.height()-self.height())/2)

if __name__ == '__main__':
app = QApplication(sys.argv)
ex= MessageBox()

sys.exit(app.exec_())

布局

支持三种布局方式   绝对布局、盒布局、网格布局

绝对布局尽管非常灵活,可以任意摆放控件的位置,但也有其局限性。

控件的位置固定,不会随着窗口尺寸的变化而变化,例如 当窗口默认尺寸控件在窗口中心时,如果窗口的尺寸改变,那么这个控件将不再处于窗口中心。

无法使用不同平台和 不同分辨率的显示器。

更改字体大小可能会破坏布局。

如果决定对应用进行重构,按摩还需要重新计算每一个控件的位置和大小。

因此绝对布局尽管非常但不适用与所有情况,如要让布局适用性更强,可以适用盒布局盒网格布局。

import sys

from PyQt5.QtWidgets import QWidget,QLabel,QApplication
class AbsoluteLayout(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
lbl1 =QLabel('姓名',self)
lbl1.move(15,10)
lbl2 =QLabel('年龄',self)
lbl2.move(35,40)
lbl3 =QLabel('所在城市',self)
lbl3.move(55,70)
self.setGeometry(300,300,250,150)
self.setWindowTitle('绝对布局')
self.show()

if __name__ == '__main__':
app =QApplication(sys.argv)
ex =AbsoluteLayout()
sys.exit(app.exec_())

盒布局

盒布局分为水平盒布局盒垂直盒布局,分别用QHBoxLayout类 和QVBoxLayout类表示。水平盒布局时将控件沿水平放心摆放,垂直布局是将控件沿垂直放心摆放。 addWidget方法将控件添加到盒布局中。 盒布局对象的addLayout方法将布局对象添加到盒布局中。

先水平盒布局,让两个按钮建立一个垂直盒布局,并且将水平盒布局添加到垂直盒布局中,最后让水平盒布局始终在屏幕的下方。

import sys

from PyQt5.QtWidgets import QWidget,QLabel,QApplication,QHBoxLayout,QVBoxLayout
class AbsoluteLayout(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
lbl1 =QLabel('姓名',self)
# lbl1.move(15,10)
lbl2 =QLabel('年龄',self)
# lbl2.move(35,40)
lbl3 =QLabel('所在城市',self)
# lbl3.move(55,70)
hlbl =QHBoxLayout()
hlbl.addStretch()
hlbl.addWidget(lbl1)
hlbl.addWidget(lbl2)
# 将控件添加到水平盒布局中
hlbl.addWidget(lbl3)
# 创建垂直盒布局对象
vlbl =QVBoxLayout()
# 让控件始终在窗口的下方
vlbl.addStretch()
# 将水平盒布局对象添加到垂直盒布局
vlbl.addLayout(hlbl)
# 将垂直盒布局应用在当前窗口
self.setLayout(vlbl)

self.setGeometry(300,300,250,150)
self.setWindowTitle('绝对布局')
self.show()

if __name__ == '__main__':
app =QApplication(sys.argv)
ex =AbsoluteLayout()
sys.exit(app.exec_())

网格布局

网格布局 相当于一个二维表,将窗口划分未若干个行若干个列。一个控件可以摆放在一个单元格中,也可以横跨多行多列。网格布局用QGridLayout类表示。该类中常用的方法是addWidget,可以将一个控件添加到网格布局中,并指定该控件从第几行第几列开始,以及占用几行几列,还可以适用addSpacing方法指定在水平盒垂直放心单元格之间的距离。

网格布局创建一个提交数据的表单窗口,三个QLabel控件盒三个文本编辑框架QLineEdit 和QTextEdit

import sys
from PyQt5.QtWidgets import (QWidget,QLabel,QLineEdit,QTextEdit,QGridLayout,QApplication)

class FormGridLayort(QWidget):
def __init__(self):
super().__init__()
def initUI(self):
title =QLabel('标题')
author =QLabel('作者')
summary = QLabel('摘要')
titleEdit = QLineEdit()
authorEdit =QLineEdit()
summaryEdit =QLineEdit()
# 创建网格布局对象
grid = QGridLayout()
# 设置单元格之间的距离
grid.setSpacing(10)
# 向网格布局添加title控件,位于第2行第1列
grid.addWidget(title,1,0)
# 向网格布局添加titleEdit控件,位于第2行第2列
grid.addWidget(titleEdit,1,1)
# 向网格布局添加author控件,位于第3行第1列
grid.addWidget(author,2,0)
grid.addWidget(authorEdit,2,1)

grid.addWidget( summary, 3, 0 )
grid.addWidget( summaryEdit, 3, 1,5,1 )
self.setLayout(grid)

self.setGeometry(300,300,350,300)
self.setWindowTitle('网格布局')
self.show()

if __name__ == '__main__':
app = QApplication(sys.argv)
ex = FormGridLayort()
sys.exit(app.exec_())


----------------------------------------------------------------------------------------------------------------------
我们尊重原创,也注重分享,文章来源于微信公众号:单片机软件开发,建议关注公众号查看原文。如若侵权请联系qter@qter.org。
----------------------------------------------------------------------------------------------------------------------

鲜花

握手

雷人

路过

鸡蛋

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了