python与上位机开发day04

news2024/12/29 9:49:14

模块和包、异常、PyQt5

一、模块和包

1.1 模块

  • Python中模块就是一个.py文件,模块中可以定义函数变量
  • 模块可以被其他模块引用
1.1.1 导入模块
"""
导入格式1:     import 模块名
使用格式:     模块名.函数  模块名.类名  模块名.变量名




"""
import utils

print(utils.name)
print(utils.sum(1, 3))
print(utils.Person("zhangsi", 18))
# 导入格式2:     from 模块名 import 需使用的函数、类、变量
# 使用格式:     函数、类、变量   无需通过模块名引用
from utils import name, sum, Person

print('---' * 30)
print(name)
res = sum(1, 8)
print(res)
print(Person("mike", 20))
# 导入格式3:     from 模块名 import *
# 使用格式:     函数、类、变量   无需通过模块名引用

from utils import *
print(name)
print(sum(1,9))

1.1.2 导入冲突
"""
通过as重命名,可以解决冲突
from 模块名 import 变量 as 别名1, 函数 as 别名2, 类 as 别名3
"""


from utils import name as uname,sum as usum,Person as uPerson
from sum import name as sname,sum as ssum
print(uname)
print(sname)
print(usum(1,9))
print(ssum(8,1))


1.1.3 __name__作用说明
  • 把导入模块不被执行的代码放在if __name__ == '__main__'里面
# 导入模块,会执行1次文件里面的代码

def sum(a,b):
    return a+b

#程序的入口
if __name__ == '__main__':
    res = sum(1,8)
    print(res)

1.2 包

  • 包是一个特殊的文件夹,文件夹里包含一个__init__.py

    • 模块主要用于管理代码
    • 包主要用于管理模块
    • __init__.py主要写一下初始化的代码或导模块的语句,如果没有这部分需求,此文件可以没有
  • 包的创建

    • 在 PyCharm 中支持直接创建包, 工程根目录上鼠标
      右键 -> New -> Python Package
1.2.1 导入包中模块
"""
说明:导入方式有很多,后面使用的时候,先查先用即可
方式1:
导入格式:   import 包名.模块名
            包名就是文件夹名    模块名就是文件里某个文件名字
使用格式:   包名.模块名.工具名   (类名、函数、变量)

方式2:
导入格式:   from 包名.模块名 import 工具名
使用格式:   工具名   (类名、函数、变量)
"""
import pk.calac
print(pk.calac.name)
print(pk.calac.sum(10,9))

print("=========import 包名.模块名==========")

import pkg3.calac
print(pkg3.calac.sum(9,5))


print("========= from 包名.模块名 import 工具名==========")
from pkg3.calac import *
print(name)
print(sum(8,2))

print("========= from")
from pkg3.calac import name,sum,Person

print(name)
print(sum(8,2))
print("=========")

1.3 系统的内置模块

二、异常处理

2.1 异常介绍

  • 什么是异常?
    • 程序在运行过程中,发生了未知的事件,影响到了程序的正常运行
    • 异常是一种事件
    • 异常会影响到程序正常运行

2.2 捕获异常

  • 为了保证程序正常运行
2.2.1 捕获异常try-except
"""
try:
    可能发生异常的代码
except Exception as 异常对象名:
    # Exception : 为系统提供的异常类, 凡是未知错误类型, 都可以尝试使用该异常类进行异常类型匹配
    print(异常对象名) 即可获取异常的信息描述

说明:
1. 如果希望程序无论出现任何错误, 都不会因为Python解释器抛出异常而被终止, 可以捕获 Exception
2. except Exception as e: e表示捕获到的异常对象, 记录异常的错误信息, e为惯用变量名, 可以自定义

需求:
1. 提示用户输入一个整数
    - 用户输入的可能不是一个整数
2. 使用 8 除以用户输入的整数并且输出
    - 0不能做除数
"""
# a = 10
# b = 0
# try:
#     res = a//b
#
# except:
#     print("有异常")

# try  except Exception  as xxx  捕获异常  可以输出异常信息


# a = 10
# b = 0
# try:
#     res = a // b
#
# except Exception as e:
#     print(e)

# Exception 会捕获各类 错误信息  as e  可以输出错误信息  e 是变量名称 可以自定义
# try:
#     # pygame.init()
#     num = int(input(''))
# except Exception as err:
#     print(err)

a = 10
b = 0
lst = [1, 2, 3, 4, 5]

# 所有的错误信息都有一个父类叫做BaseException

try:
    res = lst[6]
# except ZeroDivisionError as z:
except IndexError as z:
    print(z)

print("======")

2.2.2 捕获异常完整语法
"""
应用场景:
1. 成功打开文件的前提下,后面读写文件,不管有没有异常,最终都要关闭文件
2. 成功连接网络的前提下,后面发送或接收网络数据,不管有没有异常,最终都要断开连接

try:
    可能发生异常的代码
except:
    处理异常的代码
else:
    没有发生异常,except不满足执行else
finally:
    不管有没有异常,最终都要执行

需求:
1. 获取用户输入的数字,转换为int
2. 如果输入不是整数,转换会产生异常,提示输入错误
3. 如果是整数, 则进一步判断是奇数还是偶数
4. 最终提示: 程序运行结束
"""

try:
    num = int(input('请输入一个整数'))
except ValueError as V:
    print(V)

else:
    print("你输入的数",num)
finally:
    print("程序运行结束")

2.3 自定义异常

2.3.1 常见的异常类型介绍
2.3.2 自定义异常

在这里插入图片描述

class 自定义异常名(Exception):
    def __init__(self, msg):
        self.msg = msg

    def __str__(self):
        return self.msg

三、PyQt5

3.1 PyQt5简介和环境搭建

  • PyQt是一套Python的GUI开发框架,即图形用户界面开发框架

  • 其中PyQt是Qt(C++语言实现的)为Python专门提供的扩展

  • PySide官网:https://doc.qt.io/qtforpython-6/

  • 插件安装

    pip install 插件名字	# 安装
    pip uninstall 插件名字	# 卸载
    pip install 插件名字 -i 指定下载的镜像网址
    pip show 插件名字		# 查看插件名字
    
    # 安装PyQt5
    pip  install  PyQt5  -i https://pypi.tuna.tsinghua.edu.cn/simple
    # 安装Qt工具软件
    pip install PyQt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple
    # 安装PyQt5语法检测包(可选)
    pip install PyQt5-stubs -i https://pypi.tuna.tsinghua.edu.cn/simple
    # 安装PyQt5帮助文档(可选)
    pip install PyQtdoc -i https://pypi.tuna.tsinghua.edu.cn/simple
    # 查看安装版本
    pip  show  PyQt5
    pip  show  PyQt5-tools
    pip  show  PyQt5-stubs
    
  • 如果安装了帮助文档,帮助文档所在位置

在这里插入图片描述

  • 帮助文档配置教程(点我😊)

3.2 第一个Qt程序

3.2.1 第一个Qt窗口
"""
# 0. 导入模块
# 1.创建应用程序
# 2.创建窗口
# 3.显示窗口
# 4.等待窗口停止
"""
import sys

from PyQt5.QtWidgets import *

# 创建应用程序
app = QApplication(sys.argv)
# 创建窗口  w就是我们创建的窗口对象
w = QWidget()



# 显示窗口
w.show()

# 等待中止
sys.exit(app.exec_())

3.2.2 窗口的相关设置
"""
# 设置窗口标题
# 设置窗口尺寸
# 设置图标
# 鼠标停留在控件上时就会显示ToolTip的信息
"""
import sys

# 导包 模块
from PyQt5.QtWidgets import *

# 创建应用程序
app = QApplication(sys.argv)

# 创建窗口
w = QWidget()

# 设置标题
w.setWindowTitle("QQ开发版")
# 窗口大小
w.resize(800, 600)
# 设置气泡提示

w.setToolTip("这是一个窗口")

# 展示
w.show()

# 等待中止
sys.exit(app.exec_())

3.3 常用控件

3.3.1 标签QLabel
3.3.1.1 显示文字
"""
# 创建QLabel标签对象
# 设置文本内容
# 指定主窗口为父对象,标签放在主窗口上
"""


import sys

from PyQt5.QtWidgets import *

# 创建应用程序
app = QApplication(sys.argv)
# 创建窗口  w就是我们创建的窗口对象
w = QWidget()
#
# #后续的创建按钮 文本 图像 等等 都是放到这里
# 显示文字
# 创建QLabel标签对象
label = QLabel()
# 设置文本内容
label.setText("Hello 你好呀")
label.move(100,100)
print(label.text())
# 指定主窗口为父对象,标签放在主窗口上
label.setParent(w)

# 显示窗口
w.show()

# 等待中止
sys.exit(app.exec_())

3.3.1.2 显示图片
"""
# 创建QLabel标签对象
# 创建QPixmap对象
# 设置标签图片
# 指定主窗口为父对象,标签放在主窗口上
# 根据图片大小设置窗口大小
"""
import sys

from PyQt5.QtGui import QPixmap, QIcon
from PyQt5.QtWidgets import *

# 创建应用程序
app = QApplication(sys.argv)
# 创建窗口  w就是我们创建的窗口对象
w = QWidget()


pixmap = QPixmap("img/img.png")

#设置程序的icon
#windows 设置
w.setWindowIcon(QIcon(pixmap))

# 创建QLabel标签对象

label = QLabel()
# 创建QPixmap对象
pixmap = QPixmap("img/img.png")
# 设置标签图片
label.setPixmap(pixmap)
# 指定主窗口为父对象,标签放在主窗口上
label.setParent(w)
# 根据图片大小设置窗口大小
w.resize(pixmap.width(), pixmap.height())

# 显示窗口
w.show()

# 等待中止
sys.exit(app.exec_())
3.3.2 输入框
3.3.2.1 单行输入框QLineEdit
"""
# 创建QLineEdit对象
# 设置默认提示语
# 设置内容为"hello world"
# 设置最大输入的长度
# 获取文本内容
# 设置输入框的回显模式:密码模式
# 指定父对象
"""

import sys

from PyQt5.QtWidgets import *

# 创建应用程序
app = QApplication(sys.argv)
# 创建窗口  w就是我们创建的窗口对象
w = QWidget()

# 创建QLineEdit对象
edit = QLineEdit()
# 设置默认提示语
edit.setPlaceholderText("请输入你的银卡卡账号:")
# 设置内容为"hello world"
edit.setText("9527")
# 设置最大输入的长度
edit.setMaxLength(10)
# 获取文本内容
print(edit.text())
#
# 设置输入框的回显模式:密码模式
edit.setEchoMode(edit.Password)
# 指定父对象
edit.setParent(w)
# 显示窗口
w.show()

# 等待中止
sys.exit(app.exec_())
3.3.2.2 多行输入框QTextEdit
"""
# 创建QTextEdit对象
# 设置提示内容
# 设置默认内容
# 设置内容
# 获取内容
# 清空内容
# 指定父对象
"""

import sys

from PyQt5.QtWidgets import *

# 创建应用程序
app = QApplication(sys.argv)
# 创建窗口  w就是我们创建的窗口对象
w = QWidget()
# 创建QTextEdit对象
txt = QTextEdit()
# 设置提示内容
txt.setPlaceholderText("请输入你的履历")
# 设置默认内容
txt.setText("Hello world")
# 设置内容
txt.setText("Hello")
# 获取内容
print(txt.toPlainText())
# 清空内容
txt.clear()
# 指定父对象
txt.setParent(w)


# 显示窗口
w.show()

# 等待中止
sys.exit(app.exec_())

3.3.3 按钮QPushButton
"""
# 创建QPushButton对象
# 设置按钮的文本内容
# 获取按钮的文本内容
# 指定父对象
"""

import sys

from PyQt5.QtWidgets import *

# 创建应用程序
app = QApplication(sys.argv)
# 创建窗口  w就是我们创建的窗口对象
w = QWidget()
# 创建QPushButton对象
btn = QPushButton()
# 设置按钮的文本内容
btn.setText('点击抽奖')
# 获取按钮的文本内容
print(btn.text())
# 指定父对象
btn.setParent(w)

# 显示窗口
w.show()

# 等待中止
sys.exit(app.exec_())

3.4 信号和槽

3.4.1 按钮的信号与槽
  • 某些控件(部件)按下了,产生一个信号(事件)(理解为硬件的中断,实际上是软件层的中断)
  • 信号来了,处理信号对应的槽函数
  • 步骤
    • 1)要处理什么信号
    • 2)信号绑定的(连接的)对应槽函数
    • 3)定义槽函数(普通函数)
3.4.2 系统的信号和槽函数
# 按钮被点击了,调用关闭窗口的槽函数

import sys

from PyQt5.QtWidgets import *

# 创建应用程序
app = QApplication(sys.argv)
# 创建窗口  w就是我们创建的窗口对象
w = QWidget()
# 创建QPushButton对象
btn = QPushButton()
# 设置按钮的文本内容
btn.setText('点击抽奖')
# 获取按钮的文本内容
print(btn.text())
# 指定父对象
btn.setParent(w)


def func():
    print("中奖五百万!")


# 方式1:自定义槽函数
btn.clicked.connect(func)

# 方式2:槽函数为匿名函数
#关闭窗口
btn.clicked.connect(w.close)

# 显示窗口
w.show()

# 等待中止
sys.exit(app.exec_())

3.5 布局

3.5.1 水平布局QHBoxLayout
"""
# 创建QHBoxLayout对象
# 添加5个QPushButton控件
# 窗口添加布局
"""

import sys

from PyQt5.QtWidgets import *

# 创建应用程序
app = QApplication(sys.argv)
# 创建窗口  w就是我们创建的窗口对象
w = QWidget()
# 创建QHBoxLayout对象
layout = QHBoxLayout()
# 添加5个QPushButton控件
btn1 = QPushButton("按钮1")
btn2 = QPushButton("按钮2")
btn3 = QPushButton("按钮3")
btn4 = QPushButton("按钮4")
btn5 = QPushButton("按钮5")
text = QLineEdit()

#按钮添加到布局中
layout.addWidget(btn1)
layout.addWidget(btn2)
layout.addWidget(btn3)
layout.addWidget(btn4)
layout.addWidget(btn5)
layout.addWidget(text)

# 窗口添加布局  setLayout
w.setLayout(layout)
# btn1.move(50,50)
# btn2.move(80,80)
# btn3.move(100,100)
# btn4.move(150,150)
# btn1.setParent(w)
# btn2.setParent(w)
# btn3.setParent(w)
# btn4.setParent(w)
# btn5.setParent(w)
w.resize(800,600)

# 显示窗口
w.show()

# 等待中止
sys.exit(app.exec_())


3.5.2 竖直布局QVBoxLayout
"""
# 创建QVBoxLayout对象
# 添加5个QPushButton控件
# 窗口添加布局
"""


import sys

from PyQt5.QtWidgets import *

# 创建应用程序
app = QApplication(sys.argv)
# 创建窗口  w就是我们创建的窗口对象
w = QWidget()
# 创建QHBoxLayout对象
layout = QVBoxLayout()
# 添加5个QPushButton控件
btn1 = QPushButton("按钮1")
btn2 = QPushButton("按钮2")
btn3 = QPushButton("按钮3")
btn4 = QPushButton("按钮4")
btn5 = QPushButton("按钮5")
text = QLineEdit()

#按钮添加到布局中
layout.addWidget(btn1)
layout.addWidget(btn2)
layout.addWidget(btn3)
layout.addWidget(btn4)
layout.addWidget(btn5)
layout.addWidget(text)

# 窗口添加布局  setLayout
w.setLayout(layout)

w.resize(800,600)

# 显示窗口
w.show()

# 等待中止
sys.exit(app.exec_())


3.5.3 表单布局QFormLayout
"""
# 创建QFormLayout对象
form = QFormLayout()
# 创建用户名QLineEdit对象
user = QLineEdit()
# 创建密码QLineEdit对象
pwd = QLineEdit()
# 密码QLineEdit对象设置密码属性
pwd.setEchoMode(pwd.Password)
# 创建手机号QLineEdit对象
tel = QLineEdit()
# QFormLayout对象添加addRow用户名、密码、手机号控件
form.addRow("user",user)
form.addRow("pwd",pwd)
form.addRow("tel",tel)
# 创建QPushButton对象
btn = QPushButton("注册")
form.addRow("",btn)
# QPushButton对象信号clicked绑定自定义槽函数on_submit
deg function():
    pass
btn.clicked.connect(function)
# 槽函数on_submit实现功能:分别获取用户名、密码、手机号文本内容
# QFormLayout对象添加addRow按钮
# 窗口设置布局
w.setLayout(form)
"""


import sys

from PyQt5.QtWidgets import *

# 创建应用程序
app = QApplication(sys.argv)
# 创建窗口  w就是我们创建的窗口对象
w = QWidget()
# 设置 form layout
form = QFormLayout()

# 创建用户名QLineEdit对象  单行文本
user = QLineEdit()
# 创建密码QLineEdit对象
pwd = QLineEdit()
# 密码QLineEdit对象设置密码属性
pwd.setEchoMode(pwd.Password)
# 创建手机号QLineEdit对象
tel = QLineEdit()

# 创建QPushButton对象
btn = QPushButton("注册信息")
# QFormLayout对象添加addRow用户名、密码、手机号控件
# QFormLayout对象添加addRow按钮
form.addRow("用户名:", user)
form.addRow("密 码:",pwd)
form.addRow("手机号:",tel)
# form.addRow("注册",btn)
form.addRow("",btn)

#将layout设置到窗口
w.setLayout(form)
# 槽函数on_submit实现功能:分别获取用户名、密码、手机号文本内容
def on_submit():
    print(user.text(),pwd.text(),tel.text())


# QPushButton对象信号clicked绑定自定义槽函数on_submit

btn.clicked.connect(on_submit)

# w.resize(640,480)
# 显示窗口
w.show()

# 等待中止
sys.exit(app.exec_())





3.5.4 嵌套布局

在这里插入图片描述

"""
# 创建QHBoxLayout对象h_layout
# 创建QVBoxLayout对象v_layout1,添加一个QPushButton对象1
# h_layout添加v_layout1对象
# 创建QVBoxLayout对象v_layout2,添加QPushButton对象2, QPushButton对象3
# h_layout添加v_layout2对象
# 创建QVBoxLayout对象v_layout3,添加QPushButton对象4, QPushButton对象5, QPushButton对象6
# h_layout添加v_layout3对象
# 创建QVBoxLayout对象v_layout4,添加QPushButton对象7, QPushButton对象8, QPushButton对象9, QPushButton对象10
# h_layout添加v_layout4对象
# 窗口添加布局h_layout
"""
import sys

from PyQt5.QtWidgets import *

# 创建应用程序
app = QApplication(sys.argv)
# 创建窗口  w就是我们创建的窗口对象
w = QWidget()
# 创建QHBoxLayout对象h_layout (整个水平布局)
h_layout = QHBoxLayout()

# 创建QHBoxLayout对象v_layout1,添加一个QPushButton对象1  整个水平布局中的第一个水平布局layout1
v_layout1 = QHBoxLayout()
btn1 = QPushButton("btn1")
btn2 = QPushButton("按钮1")
v_layout1.addWidget(btn1)
v_layout1.addWidget(btn2)
# h_layout添加v_layout1对象
h_layout.addLayout(v_layout1)
# 创建QVBoxLayout对象v_layout2,添加QPushButton对象2, QPushButton对象3
v_layout2 = QVBoxLayout()
v_layout2.addWidget(QPushButton("btn2"))
v_layout2.addWidget(QPushButton("btn3"))
# h_layout添加v_layout2对象
h_layout.addLayout(v_layout2)
# 创建QVBoxLayout对象v_layout3,添加QPushButton对象4, QPushButton对象5, QPushButton对象6
v_layout3 = QVBoxLayout()
v_layout3.addWidget(QPushButton("btn4"))
v_layout3.addWidget(QPushButton("btn5"))
v_layout3.addWidget(QPushButton("btn6"))
# h_layout添加v_layout3对象
h_layout.addLayout(v_layout3)
# 创建QVBoxLayout对象v_layout4,添加QPushButton对象7, QPushButton对象8, QPushButton对象9, QPushButton对象10
v_layout4 = QVBoxLayout()
v_layout4.addWidget(QPushButton("按钮7"))
v_layout4.addWidget(QPushButton("按钮8"))
v_layout4.addWidget(QPushButton("按钮9"))
v_layout4.addWidget(QPushButton("按钮10"))
# h_layout添加v_layout4对象
h_layout.addLayout(v_layout4)
# 窗口添加布局h_layout
w.setLayout(h_layout)

# 显示窗口
w.show()
w.resize(800,600)
# 等待中止
sys.exit(app.exec_())

3.6 对话框

3.6.1 消息对话框QMessageBox
"""
# 创建QPushButton对象btn
# btn信号clicked绑定槽函数
# 槽函数中弹出消息QMessageBox对话框,并设置消息对话框的标题、内容、按钮,选择对话框后做出响应判断
# btn指定父对象
"""

import sys

from PyQt5.QtWidgets import *

# 创建应用程序
app = QApplication(sys.argv)
# 创建窗口  w就是我们创建的窗口对象
w = QWidget()
# 创建QPushButton对象
btn = QPushButton()
# 设置按钮的文本内容
btn.setText('点击抽奖')
# 获取按钮的文本内容
print(btn.text())
# 指定父对象
btn.setParent(w)

# 创建QPushButton对象btn
# btn信号clicked绑定槽函数

def btn_click():
  res =   QMessageBox.information(w, '中奖信息',"请确认协议内容",QMessageBox.Yes|QMessageBox.No)
  if res == QMessageBox.Yes:
      print("ok")
# 槽函数中弹出消息QMessageBox对话框,并设置消息对话框的标题、内容、按钮,选择对话框后做出响应判断
# btn指定父对象
btn.clicked.connect(btn_click)

# 显示窗口
w.show()

# 等待中止
sys.exit(app.exec_())

3.6.2 输入对话框QInputDialog
"""
# 创建QVboxLayout对象layout
# 创建QLabel对象label
# label设置内容"匿名"
# layout添加label
# 创建QPushButton对象btn
# btn设置内容"创建角色"
# layout添加btn
# btn的信号clicked连接槽函数show_dialog
# 槽函数中创建QInputDialog对象,获取用户输入的内容,给label设置内容
# 窗口添加布局
"""

import sys

from PyQt5.QtWidgets import *

# 创建应用程序
app = QApplication(sys.argv)
# 创建窗口  w就是我们创建的窗口对象
w = QWidget()

# 创建QVboxLayout对象layout
layout = QVBoxLayout()
# 创建QLabel对象label
label = QLabel()
# label设置内容"匿名"
label.setText("匿名")
# layout添加label
layout.addWidget(label)
# 创建QPushButton对象btn
btn = QPushButton()
# btn设置内容"创建角色"
btn.setText("创建角色")
# layout添加btn
layout.addWidget(btn)


# btn的信号clicked连接槽函数show_dialog
def show_dialog():
    res, flag = QInputDialog.getText(w, "标题", "请创建角色")
    if flag:
        print("创建角色成功:", res)


btn.clicked.connect(show_dialog)
# 槽函数中创建QInputDialog对象,获取用户输入的内容,给label设置内容
# 窗口添加布局
w.setLayout(layout)

# 显示窗口
w.show()

# 等待中止
sys.exit(app.exec_())

3.7 单、复选框

3.7.1 单选框QRadioButton
"""
# 创建QRadioButton对象btn1,设置内容"男"
# 创建QRadioButton对象btn2,设置内容"女"
# 设置btn2为选中状态
# 创建QButtonGroup对象group,将btn1和btn2添加到group
# group的信号buttonToggled连接槽函数on_group_toggled
# 槽函数参数为QRadioButton对象,里面打印被按下按钮的文本,打印选中状态
# 创建VBoxLayout对象layout,将btn1和btn2添加到layout
# 窗口添加布局
"""
import sys

from PyQt5.QtWidgets import *

# 创建应用程序
app = QApplication(sys.argv)
# 创建窗口  w就是我们创建的窗口对象
w = QWidget()


# 创建VBoxLayout对象layout,将btn1和btn2添加到layout
layout = QHBoxLayout()
# 创建QRadioButton对象btn1,设置内容"男"
radio = QRadioButton("男")
# 创建QRadioButton对象btn2,设置内容"女"
radio2 = QRadioButton("女")
# 设置btn2为选中状态
radio2.setChecked(True)

# group的信号buttonToggled连接槽函数on_group_toggled
# 槽函数参数为QRadioButton对象,里面打印被按下按钮的文本,打印选中状态
# 创建VBoxLayout对象layout,将btn1和btn2添加到layout
layout.addWidget(radio)
layout.addWidget(radio2)
# 窗口添加布局
w.setLayout(layout)

#定义槽函数
def on_toggled():
    if radio.isChecked():
        print("男被选中")
    if radio2.isChecked():
        print("女被选中")

#信号绑定
radio.toggled.connect(on_toggled)
radio2.toggled.connect(on_toggled)

# 显示窗口
w.show()

# 等待中止
sys.exit(app.exec_())

3.7.2 复选框QCheckBox
"""
# 创建QCheckBox对象box1,并设置文本为“学习”
# 创建QCheckBox对象box2,并设置文本为“睡觉”
# 创建QCheckBox对象box3,并设置文本为“工作”
# box1、box2、box3的信号statusChanged和槽函数box_slot绑定
# 槽函数判断是否被选中
# 创建QHBoxLayout对象layout,并添加box1、box2、box3
# 窗口添加布局
"""

import sys

from PyQt5.QtWidgets import *

# 创建应用程序
app = QApplication(sys.argv)
# 创建窗口  w就是我们创建的窗口对象
w = QWidget()
# 创建VBoxLayout对象layout,将btn1和btn2添加到layout
layout = QHBoxLayout()
#创建复选框

box1 = QCheckBox("语文")
box2 = QCheckBox("数学")
box3 = QCheckBox("英语")

layout.addWidget(box1)
layout.addWidget(box2)
layout.addWidget(box3)


# 槽函数判断是否被选中
def box_slot():
    if box1.isChecked():
        print("今天上语文课")
    if box2.isChecked():
        print("下节课上数学")
    if box3.isChecked():
        print("下节课上英语")


# box1、box2、box3的信号statusChanged和槽函数box_slot绑定
box1.stateChanged.connect(box_slot)
box2.stateChanged.connect(box_slot)
box3.clicked.connect(box_slot)



# 窗口添加布局
w.setLayout(layout)

#定义槽函数




# 显示窗口
w.show()

# 等待中止
sys.exit(app.exec_())

3.8 PyQt面向对象开发

"""
类名:MyWidget继承QWidget
实例方法:
    __init__(self, parent=None): 调用父类的__init__(parent)方法,调用初始化窗口
    init_ui(): 窗口控件的添加、布局、信号和槽处理

程序入口:
    # 1.创建应用程序
    # 2.创建窗口
    # 3.显示窗口
    # 4.等待窗口停止
"""
import sys

from PyQt5.QtWidgets import *


# 定义我们的widget类
class myWidget(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
    #     调用init_UI
        self.init_ui()

    def init_ui(self):
        '''
        初始化ui
        :return:
        '''
        # self.setWindowTitle("设置标题")


if __name__ == '__main__':
    # 创建程序app
    app = QApplication(sys.argv)
    w = myWidget()
    w.show()
    sys.exit(app.exec_())

3.9 Qt Designer

3.9.1 配置PyCharm的PyQt工具
  • 教程:https://www.yuque.com/icheima/python/qt_designer#aiIoe

在这里插入图片描述

在这里插入图片描述

3.9.2 通过Designer设计界面

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 新建ui包

    在这里插入图片描述

  • 打开designer界面

在这里插入图片描述

  • 新建Widget窗口

    在这里插入图片描述

  • 根据需要拖拽控件,然后保存

在这里插入图片描述

在这里插入图片描述

  • ui文件转换为python代码

    • 注意:每次修改了ui文件,记得保存,然后就得重新把ui文件转换为python代码

    在这里插入图片描述

  • 加载ui文件模板代码

    • 导包中模块 from ui.ui模块文件名 import Ui_对象名

    在这里插入图片描述

    • 实例化ui模块对象,调用setupUi()方法
3.9.3 如何使用ui上面的控件

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1634065.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【算法基础实验】图论-最小生成树Prim的延迟实现

最小生成树-Prim的延迟实现 理论基础 树的基本性质 用一条边连接树中的任意两个顶点都会产生一个新的环; 从树中删去一条边将会得到两棵独立的树。 切分定理的定义 定义。图的一种切分是将图的所有顶点分为两个非空且不重叠的两个集合。横切边 是一条连接两个属…

认识认识DHCP

文章目录 认识认识DHCP一、什么是DHCP?1.1、为什么要使用DHCP?1.2、DHCP是怎么工作的?1.2.1、客户端首次接入网络的工作原理1.2.2、客户端重用曾经使用过的地址的工作原理1.2.3、客户端更新租期的工作原理 二、配置DHCP Server,为…

嵌入式开发二:搭建开发环境

工欲善其事必先利其器,本节我们从嵌入式开发的搭建环境开始学习,掌握最基本的搭建环境技能,了解每一部分的作用,以及如何使用是关键所在! 目录 一、常用开发工具简介 二、如何安装KEIL5(MDK) 2.1认识MDK-ARM 2.2 …

Spring基于AspectJ实现验签切点

文章目录 引言I AspectJ 依赖II 验签切点2.1 匹配方法执行的连接点2.2 设置带有CustomAnnotation注解的方法为切点III 案例:验签2.1 用法2.2 定义注解2.3 定义切面和切点引言 需求:验签 实现:基于AspectJ实现验签切点 I AspectJ 依赖 AspectJ 是一个基于 Java 语言的 AOP …

windos蓝屏分析工具

BlueScreenView中文版 - Windows蓝屏分析工具 BlueScreenView中文版是一款非常方便的蓝屏诊断工具。它可以帮助您快速定位蓝屏问题,并提供详细的故障转储信息。该软件可以自动扫描您机器上的minidump文件夹,同时还支持根据路径查找蓝屏文件。 windos发…

Coursera: An Introduction to American Law 学习笔记 Week 06: Civil Procedure (完结)

An Introduction to American Law Course Certificate Course Introduction 本文是 https://www.coursera.org/programs/career-training-for-nevadans-k7yhc/learn/american-law 这门课的学习笔记。 文章目录 An Introduction to American LawInstructors Week 06: Civil Pro…

Flink checkpoint 源码分析

序言 最近因为工作需要在阅读flink checkpoint处理机制,学习的过程中记录下来,并分享给大家。也算是学习并记录。 目前公司使用的flink版本为1.11。因此以下的分析都是基于1.11版本来的。 在分享前可以简单对flink checkpoint机制做一个大致的了解。 …

docker学习笔记3:VmWare CentOS7安装与静态ip配置

文章目录 一、安装CentOS71、下载centos镜像2、安装二、设置静态ip三、xshell连接centos本专栏的docker环境是在centos7里安装,因此首先需要会安装centos虚拟机。 本篇博客介绍如何在vm虚拟机里安装centos7。 一、安装CentOS7 1、下载centos镜像 推荐清华源,下载如下版本 …

【C++】学习笔记——string_1

文章目录 四、模板初阶2. 类模板 五、STL简介1. 什么是STL2. STL的六大组件3. 如何学习STL 六、string类1. string类对象的容量操作 未完待续 四、模板初阶 2. 类模板 函数模板就是:模板 函数;类模板就是:模板 类。和函数模板用法基本相同…

Kafka客户端工具:Offset Explorer 使用指南

Kafka作为一个分布式流处理平台,在大数据处理和实时数据流应用中扮演着至关重要的角色。管理Kafka的topics及其offsets对于维护系统稳定性和数据一致性至关重要。Offset Explorer是一个强大的桌面应用程序,它使得管理和监控Kafka集群变得简单直观。本文将…

数组 Leetcode 704 二分查找/Leetcode 59 螺旋矩阵/Leetcode 203移除链表元素

数组 Leetcode 704 二分查找 Leetcode 704 学习记录自代码随想录 二分法模板记忆&#xff0c;数值分析中牛顿迭代法 class Solution { public:int search(vector<int>& nums, int target) {int left 0, right nums.size()-1;// 是否需要等于号&#xff0c;假设…

verilog分析task的接口设计,证明这种写法:assign {a,b,c,d} = links;

verilog分析task的接口设计&#xff0c;证明这种写法&#xff1a;assign {a,b,c,d} links; 1&#xff0c;task在状态机中的使用好处&#xff1a;2&#xff0c;RTL设计3&#xff0c;测试testbench4&#xff0c;波形分析&#xff0c;正确&#xff01; 参考文献&#xff1a; 1&am…

C++初阶学习第四弹——类与对象(中)——刨析类与对象的核心点

类与对象&#xff08;上&#xff09;&#xff1a;C初阶学习第三弹——类与对象&#xff08;上&#xff09;——初始类与对象-CSDN博客 前言&#xff1a; 在前面文章中&#xff0c;我们已经讲了类与对象的思想和类与对象的一些基本操作&#xff0c;接下来这篇文章我们将讲解以下…

NLP(10)--TFIDF优劣势及其应用Demo

前言 仅记录学习过程&#xff0c;有问题欢迎讨论 TF*IDF&#xff1a; 优势&#xff1a; 可解释性好 可以清晰地看到关键词 即使预测结果出错&#xff0c;也很容易找到原因 计算速度快 分词本身占耗时最多&#xff0c;其余为简单统计计算 对标注数据依赖小 可以使用无标注语…

超级数据查看器 app v2.0发布 欢迎下载使用

超级数据查看器 app v2.0发布 欢迎下载使用 感谢大家的支持 &#xff1a;&#xff09; 点击访问APP下载界面 跳转 腾讯应用宝 简介 超级数据查看器软件&#xff08;简称超级数据查看器&#xff09;是一个提供数据查询和数据管理的手机APP&#xff0c;能导入文本数据&…

ubuntu neo4j 下载与配置(一)

neo4j 官方下载页面 https://neo4j.com/deployment-center/#community 进入页面之后&#xff0c;往下滑 咱们在下载neo4j时&#xff0c;官方可能要咱们填写一下个人信息&#xff0c;比如&#xff1a;姓名组织结构邮箱等&#xff1a; 咱们可以观察一下&#xff0c;ne4j的下载链…

大数据学习笔记14-Hive基础2

一、数据字段类型 数据类型 &#xff1a;LanguageManual Types - Apache Hive - Apache Software Foundation 基本数据类型 数值相关类型 整数 tinyint smallint int bigint 小数 float double decimal 精度最高 日期类型 date 日期 timestamps 日期时间 字符串类型 s…

OpenAI 新推出 AI 问答搜索引擎——SearchGPT 震撼登场

您的浏览器不支持 video 标签。 OpenAI-SearchGPT 近日&#xff0c;OpenAI 曝光了自己的一款令人瞩目的 AI 问答搜索引擎——SearchGPT。这款搜索引擎带来了全新的搜索体验&#xff0c;给整个行业带来了巨大的压力。 SearchGPT 支持多种强大的功能。首先&#xff0c;它能够通过…

STM32CubeMX+MDK通过I2S接口进行音频输入输出(全双工读写一个DMA回调)续-音质问题解决总结

一、前言 之前进行了STM32CubeMXMDK通过I2S接口进行音频输入输出&#xff08;全双工读写一个DMA回调&#xff09;的研究总结&#xff1a; https://juejin.cn/post/7339016190612881408#heading-34 后续音质问题解决了&#xff0c;目前测试下来48khz的双声道使用效果很好&…

mySQL商城项目实战 (终)(全部表)(1-88张)

本章无sql语句&#xff0c;直接放转出的sql文件。 88张表结果如图! 资源在已经与文章绑定&#xff0c; 在navicat工具中&#xff0c;执行以下步骤 在新建的数据库中右键,点击【运行sql文件】&#xff0c;运行绑定的资源&#xff0c;之后您就可以在您的navicat中看到我建好的8…