pyqt5基本功能
1.基本设置QWidget
创建基本对象,Qwidget是pyat5界面的基类,调整窗口大小resize,move移动窗口,setWindowtitle设置标题
# 每一pyqt5应用程序必须创建一个应用程序对象。sys.argv参数是一个列表,从命令行输入参数。
app = QApplication(sys.argv)
# QWidget部件是pyqt5所有用户界面对象的基类。他为QWidget提供默认构造函数。默认构造函数没有父类。
w = QWidget()
# resize()方法调整窗口的大小。这离是250px宽150px高
w.resize(250, 150)
# move()方法移动窗口在屏幕上的位置到x = 300,y = 300坐标。
w.move(300, 300)
# 设置窗口的标题
w.setWindowTitle('Simple')
# 显示在屏幕上
w.show()
# 系统exit()方法确保应用程序干净的退出
# 的exec_()方法有下划线。因为执行是一个Python关键词。因此,exec_()代替
sys.exit(app.exec_())
设置应用程序图标
#设置窗口的图标,引用当前目录下的web.png图片
self.setWindowIcon(QIcon('web.png'))
点击后关闭窗口
qbtn = QPushButton('Quit', self)
qbtn.clicked.connect(QCoreApplication.instance().quit)
qbtn.resize(qbtn.sizeHintwbv
创建一个Pushbutton
#创建一个PushButton并为他设置一个tooltip
btn = QPushButton('Button', self)
btn.setToolTip('This is a <b>QPushButton</b> widget')
点击按钮 关闭窗口
qbtn = QPushButton('Quit', self)
qbtn.clicked.connect(QCoreApplication.instance().quit)
关闭窗口触发事件closeEvent
该closeEvent方法会在窗口半闭的时候,自动调用
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()
显示在屏幕中心
# 控制窗口显示在屏幕中心的方法
def center(self):
# 获得窗口
qr = self.frameGeometry()
# 获得屏幕中心点
cp = QDesktopWidget().availableGeometry().center()
# 显示到屏幕中心
qr.moveCenter(cp)
self.move(qr.topLeft())
QGridLayout 表格布局
def initUI(self):
grid = QGridLayout()
self.setLayout(grid)
names = ['Cls', 'Bck', '', 'Close',
'7', '8', '9', '/',
'4', '5', '6', '*',
'1', '2', '3', '-',
'0', '.', '=', '+']
positions = [(i, j) for i in range(5) for j in range(4)]
for position, name in zip(positions, names):
if name == '':
continue
button = QPushButton(name)
grid.addWidget(button, *position)
self.move(300, 150)
self.setWindowTitle('Calculator')
self.show()
Python zip() 函数
把可迭代的对象做为参数,打包成一个个无组(a,b)
python range()函数
创建一个整数列晴,一般用在for循环中。
for i in range(10):
print(i)
for i in range(1,10):
print(i)
python布局2 , label, edit
def initUI(self):
title = QLabel('Title')
author = QLabel('Author')
review = QLabel('Review')
titleEdit = QLineEdit()
authorEdit = QLineEdit()
reviewEdit = QTextEdit()
grid = QGridLayout()
grid.setSpacing(10)
grid.addWidget(title, 1, 0)
grid.addWidget(titleEdit, 1, 1)
grid.addWidget(author, 2, 0)
grid.addWidget(authorEdit, 2, 1)
grid.addWidget(review, 3, 0)
grid.addWidget(reviewEdit, 3, 1, 5, 1)
self.setLayout(grid)
self.setGeometry(300, 300, 350, 300)
self.setWindowTitle('Review')
self.show()
显示结果如下:
显示状态信息
self.statusBar().showMessage('Ready')
菜单
创建菜单栏menubar,添加菜单addMenu,添加事件 addAction
exitAction = QAction(QIcon('exit.png'), '&Exit', self)
exitAction.setShortcut('Ctrl+Q')
exitAction.setStatusTip('Exit application')
exitAction.triggered.connect(qApp.quit)
self.statusBar()
# 创建一个菜单栏
menubar = self.menuBar()
# 添加菜单
fileMenu = menubar.addMenu('&File')
# 添加事件
fileMenu.addAction(exitAction)
事件和信号
lcd = QLCDNumber(self)
sld = QSlider(Qt.Horizontal, self)
vbox = QVBoxLayout()
vbox.addWidget(lcd)
vbox.addWidget(sld)
self.setLayout(vbox)
sld.valueChanged.connect(lcd.display)
sld滚动条的valueChange信号连接到lcd的display插槽
自定义一个信号绑定close事件
class Communicate(QObject):
closeApp = pyqtSignal() //定义一个信号
class Example(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.c = Communicate()
self.c.closeApp.connect(self.close) //信号绑定关闭事件
self.setGeometry(300, 300, 290, 150)
self.setWindowTitle('Emit signal')
self.show()
def mousePressEvent(self, event):
self.c.closeApp.emit() //鼠标按下的时候,触发信号发送
控件QCheckbox
cb = QCheckBox('Show title', self) //创建一个复选框
cb.toggle() //切换状态
cb.stateChanged.connect(self.changeTitle)//状态改变触发自定义函数changeTitle
self.col = QColor(0, 0, 0)//初始黑颜色的值
redb = QPushButton('Red', self) //定义pushbutton关通过Setcheckable设置一个Togglebutton
redb.setCheckable(True)
redb.move(10, 10)
redb.clicked[bool].connect(self.setColor)//clicked信号连接到用户自定义的方法
sld = QSlider(Qt.Horizontal, self) //创建一个水平滑块
sld.valueChanged[int].connect(self.changeValue)//交valueChaned信号 连接到片定义方法
self.pbar = QProgressBar(self)//创建进度条
self.timer = QtCore.QBasicTimer()//使用定时器来激活
self.timer.start(100, self)//启动一个计时器
cal = QCalendarWidget(self)//创建日历控件
cal.clicked[QDate].connect(self.showDate)//选择日期发生信号连接到showdate方法
qle = QLineEdit(self)//创建一个文本框
qle.textChanged[str].connect(self.onChanged)//文本框内容改变。会调用onchange
topleft = QFrame(self) //设置框架
topleft.setFrameShape(QFrame.StyledPanel)
combo = QComboBox(self) //创建下拉列表控件
combo.addItem("Ubuntu")
combo.addItem("Mandriva")
combo.activated[str].connect(self.onActivated) //选中条目,连接到onActivated方法
if e.buttons() != Qt.RightButton: //判断是否是鼠标右击
mimeData = QMimeData()
drag = QDrag(self) //创建拖放对象
drag.setMimeData(mimeData)
drag.setHotSpot(e.pos() - self.rect().topLeft())
def dropEvent(self, e): //释放鼠标右键,移到指定位置
position = e.pos()
self.button.move(position)
e.setDropAction(Qt.MoveAction)
e.accept()
qp = QPainter() //QPainter负责绘制,begin()开始,end()结束,真正的绘制让drawtext来做
qp.begin(self)
self.drawText(event, qp)
qp.end()
qp.setPen(Qt.red)//设置画笔为红色
qp.drawPoint(x, y)//画点
def drawPoints(self, qp)://具体方法
qp.setPen(Qt.red)
size = self.size()
for i in range(1000):
x = random.randint(1, size.width() - 1)
y = random.randint(1, size.height() - 1)
qp.drawPoint(x, y)
qp.setBrush(QColor(200, 0, 0)) //画一个带颜色的矩形
pen = QPen(Qt.black, 2, Qt.SolidLine) //创建一个黑色,2像素,SolidLine的钢笔对象
qp.setPen(pen)
qp.drawLine(20, 40, 250, 40) //画线
还不快抢沙发