pygame,pyqt以及简单机器学习
2.pygame入门
展示窗体
•图形化界面程序都是阻塞式的
•通常阻塞的实现策略就是死循环
窗体关闭
•pygame.event.get()提供事件的清单
•event.type指明了事件的类型
•pygame.locals模块提供了常量
•QUIT就是窗体关闭事件
显示图片
键盘事件
•event.type 为KEYDOWN为按下
•event.type 为KEYUP为抬起
•event.key为操作的按键,对应常量K_按键符号
文字显示
声音播放
FPS
Surface
Surface理解基础
•Pygame渲染的单元surface
•Window
•Image
•Text
•Surfaceblit Surface
Surface常见的API
•fill()
•blit()
•get_width()
•get_height()
•get_rect()
3.PyQt的介绍
1.PyQt是一套Python的GUI开发框架
2.GUI是Graphical User Interface的英文简称,即图形用户界面.
是指采用图形方式显示的计算机操作用户界面.
PyQt5的主要模块
1.QtCore:包含了核心的非GUI的功能.主要和时间,文件,与文件夹,各种数据,流,URLS,mime类文件,进程与线程一起使用
2.QtGui:包含了窗口系统,时间处理,2D图像,基本绘画,字体和文件类.
3.QtWidgets:包含了一系列创建追哦面应用的UI元素.
常见窗口控件的使用场景
1.如果是主窗口,就使用QMainWindow类
2.如果是对话框,就使用QDialog类
3.如果不确定,或者有可能作为顶层窗口,也有可能嵌入到其它窗口中,那么就使用QWidget类
将窗口移动到指定位置
# 获取屏幕尺寸
screen = QDesktopWidget().screenGeometry()
# 获取窗口尺寸
size = widget.geometry()
# 移动到指定位置
# widget.move((screen.width()-size.width())/2,(screen.height()-size.height())/2)
widget.move(20,30)
气泡提示
•设置气泡需要用到下面这个方法:setToolTip(msg)
widget.setToolTip('这是一个QQ窗口')
文本
•文本是通过QLabel实现的.
•QLabel可以显示不可编辑的文本或图片,也可以放置一个GIF动画
•QFont开设置字体样式和字体大小
# 设置窗口标题
widget.setWindowTitle('文本框')
# 创建QLineEdit
edit = QLineEdit()
# 设置提示文字
# edit.setPlaceholderText('请输入QQ')
# 设置文本
edit.setText('12345999')
# 设置提示信息
widget.setToolTip('这是文本框')
# 设置输入框模式
# edit.setEchoMode(QLineEdit.NoEcho)
# edit.setEchoMode(QLineEdit.Password)
edit.setEchoMode(QLineEdit.PasswordEchoOnEdit)
# 设置最大长度
edit.setMaxLength(15)
# 显示设置父窗体
edit.setParent(widget)
图片展示
# 创建label
label = QLabel()
# 创建pixMap
map=QPixmap('电脑图片.png')
# 设置图片
label.setPixmap(map)
# 显示设置父窗体
label.setParent(widget)
文本框控件
•文本框也就是输入框
•QLineEdit是单行文本输入框
•QTextEdit是多行文本输入框
# 创建多行文本框
# edit = QLineEdit()
edit = QTextEdit()
edit.setPlaceholderText('请输入多行文字')
# 输入文字
edit.setPlainText('总冠军')
# 显示
edit.setParent(widget)
# 展示窗口
widget.show()
按钮控件
•常见的按钮实现类包括:QPushButton、QRadioButton和QCheckBox
widget.setWindowTitle('QPushButton案例')
# 创建按钮
button=QPushButton()
# 新建按钮
button.setText('发送')
# 设置气泡
button.setToolTip('这是一个发送的按钮')
# 显示
button.setParent(widget)
信号和槽
•信号和槽机制是QT 的核心机制,它是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性
信号
•当对象的状态发生改变的时候,信号就由该对象发射(emit) 出去
•当一个信号被发射(emit),与其关联的槽函数被立刻执行,发射该信号的对象并不知道是那个对象在接收这个信号。这样保证了对象与对象之间的低耦合。
•如果信号和多个槽函数相关联,当信号被发射时,这些槽的执行顺序将会是随机的、不确定的。
槽
•用于接受信号,而且槽只是普通的成员函数。当和槽连接的信号被发射时,槽会被调用。
•一个槽并不知道是否有任何信号与自己相连接。
信号和槽的绑定
•通过调用QObject 对象的 connect 函数来将对象的信号与另外一个对象的槽函数相关联,当发射者发射信号时,接收者的槽函数将被调用
# 槽函数
def showmsg():
# 获取发送者
sender = widget.sender()
print(sender.text())
print(sender)
print('hello')
# 修改按钮文字为发送邮件
sender.setText('发送邮件')
# 创建应用程序
app = QApplication(sys.argv)
# 设置程序图标
app.setWindowIcon(QIcon('qq.png'))
# 创建窗口控件
widget = QWidget()
# 设置窗口大小
widget.resize(300, 400)
# 设置窗口标题
widget.setWindowTitle('QQ窗口')
# 创建按钮
button = QPushButton()
# 设置按钮
button.setText('按钮')
# 将信号和槽函数连接
button.clicked.connect(showmsg)
# 显示
button.setParent(widget)
点击按钮,关闭窗口
# 定义Qt槽函数
def close():
print('关闭窗口')
app.quit()
布局
•一个pyqt窗口中可以有多个控件
•所谓布局,指的就是多个控件在窗口中的展示方式
•布局方式大致分为:绝对布局、水平布局、竖直布局、网格布局、表单布局
布局方法
•布局中可以添加控件,使用addWidget()方法
•布局中也可以再添加布局,使用addLayout()方法
•水平布局(QHBoxLayout)和竖直布局(QVBoxLayout)都称为框布局
QHBoxLayout
# 创建布局
layout = QHBoxLayout()
for ele in range(1,6):
# 创建按钮
btn = QPushButton()
btn.setText(str(ele))
# 把按钮添加到布局中
if ele ==2 :
layout.addWidget(btn,0,Qt.AlignBottom)
else:
layout.addWidget(btn)
# 把布局放到窗口中
widget.setLayout(layout)
addStretch 伸缩量
•布局时要用到addStretch函数,设置stretch伸缩量后,按比例分配剩余控件
表单布局QFormLayout
•表单布局是label-field式的表单布局,顾名思义,就是实现表单方式的布局
•表单布局添加控件的方法为addRow(label,widget)
# 创建布局
layout = QFormLayout()
# 添加控件
layout.addRow(QLabel('姓名'),QLineEdit())
layout.addRow(QLabel('年纪'),QLineEdit())
layout.addRow(QLabel('电话'),QLineEdit())
# 显示布局
widget.setLayout(layout)
对话框控件
•对话框是为了更好地实现人与程序的交互
•对话框主要是完成特定场景下的功能,比如删除确认等
•QDialog的子类有:QMessageBox、QFileDialog、QFontDialog.QInputDialog等
def deal():
print('点击了按钮')
# 参数1:显示在哪个窗体中
# 参数2:标题
# 参数3:提示内容
# 参数4:按钮个数
# 参数5:默认按钮选中
QMessageBox.information(widget,'提示','你确定要删除吗?',QMessageBox.Ok|QMessageBox.Cancel,QMessageBox.Ok)
# 创建应用程序 需要加上参数 固定写法
app = QApplication(sys.argv)
# 创建窗口
widget = QWidget()
# 修改窗口大小
widget.resize(300,400)
# 设置窗口的标题
widget.setWindowTitle('对话框')
# 创建按钮
btn = QPushButton()
btn.setText('显示对话框')
# 处理按钮点击事件
btn.clicked.connect(deal)
# 显示按钮
btn.setParent(widget)
单选框
•QRadioButton是单选按钮,它提供了一组可供选择的按钮和文本标签,用户可以选择其中一个选项
•标签用于显示对应的文本消息
•单选框选中的信号是:toggled