其他分享
首页 > 其他分享> > PyQt5 基本语法(二)

PyQt5 基本语法(二)

作者:互联网

目录

按照继承关系来学习

1、按钮控件

1.1 QAbstractButton

1.1.1 简介

1.1.1.1 描述

1.1.1.2 自定义按钮

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys


class Btn(QAbstractButton):
    # 子类化,使得可以实例化对象,同时要重写paintEvent函数
    def paintEvent(self, evt):
        # 这个可以自定义一个按钮
        # print("绘制按钮")
        # 创建一个画家,self 是纸张
        painter = QPainter(self)
        # 实例化一支笔
        pen = QPen(QColor(0, 0, 0), 6)  # 颜色,和画笔大小
        # 给画家一支笔
        painter.setPen(pen)
        # 画画
        painter.drawText(20, 20, self.text())  # 将字写在按钮上面
        painter.drawEllipse(0, 0, 100, 100)  # 画一个椭圆


app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
btn = Btn(w)
btn.setText("QAbstractButton")
btn.pressed.connect(lambda: print("自定义按钮被按下了"))
w.setVisible(True)  # 设置为可见
sys.exit(app.exec_())

1.1.2 提示文本

案例,创建一个按钮,初始文本为1

要求:

涉及知识点:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys

app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
btn = QPushButton(w)
btn.setText("1")  # 设置初始文本


def btn_():
    count = int(btn.text())
    count += 1  # 加一功能
    btn.setText(str(count))


btn.pressed.connect(btn_)  # 监听事件
w.setVisible(True)  # 设置为可见
sys.exit(app.exec_())

1.1.3 图标相关

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys
"""
setIcon(QIcon)  # 设置图标
setIconSize(ASize)  # 设置图标大小
icon()  # 获取图标
iconSize()  # 获取图标大小 
"""
app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
btn = QPushButton(w)
btn.setText("Button")  # 设置初始文本
icon = QIcon(r"D:\35005\Pictures\Screenshots\微信图片_20220302175157.jpg")  # 设置图片
btn.setIcon(icon)  # 设置图标
size = QSize(20, 20)  # 输入图标大小
btn.setIconSize(size)  # 设置图标大小
w.setVisible(True)  # 设置为可见
sys.exit(app.exec_())

1.1.4 设置快捷键

作用:

方式:

  1. 有提示文本:如果提示文本包含 & 符号,则QAbstractButton会自动创建快捷键
  2. 无提示文本:setShortcut("Alt + G")
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
btn = QPushButton(w)
btn.clicked.connect(lambda: print("按钮被按下"))
# btn.setText("a&bc")  # 有文本创建,快捷键为 Alt + b
btn.setText("点我")
btn.setShortcut("Alt+G")  # 无文本的创建方法
w.show()
sys.exit(app.exec_())

1.1.5 按钮自动重复

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys
"""
# 当一直摁下不松开触发重复
setAutoRepeat(bool)  # 设置自动重复
setAutoRepeatInterval(ms)  # 设置自动重复检测间隔
setAutoRepeatDelay(ms)  # 设置初次检测延迟
autoRepeat()  # 获取是否自动重复
autoRepeatInterval()  # 获取自动重复检测间隔
autoRepeatDelay()  # 获取初次检测延迟时长
"""
app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
btn = QPushButton(w)
btn.setText("点我")
btn.clicked.connect(lambda: print("点击一次"))
btn.setAutoRepeat(True)  # 开启重复
btn.setAutoRepeatInterval(1000)  # 设置 1 秒间隔
btn.setAutoRepeatDelay(2000)  # 摁下两秒后触发重复
# 获取值
print(btn.autoRepeat())
print(btn.autoRepeatInterval())
print(btn.autoRepeatDelay())
w.show()
sys.exit(app.exec_())

1.1.6 状态检测

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys
"""
isDown()  # 是否按下按钮
setDown(bool)  # 设置按钮是否被按下
isChecked()  # 是否选中了按钮
setChecked()  # 设置按钮是否被选中
isCheckable()  # 按钮是否可以被选中
setCheckable(bool)  # 设置按钮是否可以被选中
toggle()  # 切换选中与非选中状态
# 继承与QWidget中能使用的状态
isEnabled()  # 判断按钮是否能点击
setEnabled(bool)  # 设置按钮是否能点击
"""
app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
btn = QPushButton(w)
btn.setText("QPushButton")
btn.move(50, 0)
btn2 = QRadioButton(w)
btn2.setText("QRadioButton")
btn2.move(50, 50)
btn3 = QCheckBox(w)
btn3.setText("QCheckBox")
btn3.move(50, 100)
# 把三个按钮全部置为按下状态
btn.setStyleSheet("QPushButton:pressed {background-color: red;}")
btn.setDown(True)
btn2.setChecked(True)
btn3.toggle()
# 打印状态
print(btn.isCheckable())
print(btn2.isChecked())
print(btn3.isDown())
w.show()
sys.exit(app.exec_())

1.1.7 排他性

如果同时存在多个按钮,而此时所有按钮有设置了排他性,则,在同一时刻只能选中一个按钮

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys
"""
autoExclusion()  # 是否有排他性,一般按钮都是 False 只有单选按钮是 True
setAutoExclusion()  # 设置自动排他性
# 使用场景,设定按钮中的按钮,单选特性,范围是同一级别
"""
app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
for i in range(3):
    btn = QPushButton(w)
    btn.setText(f"QPushButton{i}")
    btn.move(i * 50, i * 50)
    btn.setAutoExclusive(True)  # 设置具有自动排他性
    print(btn.autoExclusive())  # 查看是否有自动排他性
    btn.setCheckable(True)  # 使得按钮可以被选中
w.show()
sys.exit(app.exec_())

1.1.8 点击

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys
"""
click() 普通点击
animateClick()  # 动画点击
"""
app = QApplication(sys.argv)
w = QWidget()
btn = QPushButton(w)
btn.setText("按钮")
btn.pressed.connect(lambda: print("点击了按钮"))
btn.click()  # 模拟用户对按钮的点击
btn.animateClick(2000)  # 点击按钮后,持续两秒,再松开
w.show()
sys.exit(app.exec_())

1.1.9 设置点击区域

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys


# 通过方法重写来实现
class MyBtn(QPushButton):
    def hitButton(self, pos):
        # print(pos.x()) 返回相对于按钮左上角的坐标
        # 如果点击有效,就返回 True,才会发送信号;返回False就不会发射信号
        return True if pos.x() < self.width() / 2 else False  # 设置成只有点击左半部分才有效


app = QApplication(sys.argv)
w = QWidget()
btn = MyBtn(w)
btn.setText("按钮")
btn.pressed.connect(lambda: print("点击了按钮"))
w.show()
sys.exit(app.exec_())

1.1.10 信号

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys

"""
pressed()  # 鼠标按下
released()  # 鼠标释放,鼠标在控件内松开;鼠标移出控件范围后
clicked(checked = false)  # 控件按下 + 控件内释放
toggle(bool checked)  # 切换信号(一般在单选框或者复选框中使用)
"""

app = QApplication(sys.argv)
w = QWidget()
btn = QPushButton(w)
btn.setText("按钮")
btn.pressed.connect(lambda: print("鼠标按下了"))  # 鼠标按下
btn.released.connect(lambda: print("鼠标释放了"))  # 鼠标释放
btn.clicked.connect(lambda value: print("鼠标被点击", value))  # 鼠标被点击
w.show()
sys.exit(app.exec_())

1.2 QPushButton

1.2.1 简介

用来给用户点击,来完成某种动作的控件,一般是矩形

1.2.2 创建

QPushButton()  # 创建一个无父控件的按钮控件
QPushButton(parent)  # 创建控件的同时,设置父控件
QPushButton(text, parent)  # 创建控件的同时,设置提示文本的父控件
QPushButton(icon, text, parent)  # 创建控件的同时,设置图标和提示文本  

1.2.3 菜单

当鼠标点击按钮时,会展开一系列的菜单

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys

"""
setMenu(QMenu)  # 设置菜单
menu()  # 获取菜单
showMenu()  # 显示菜单
# QMenu:
addMenu(QMenu)  # 添加子菜单
addSeparator()  # 添加分隔线
addAction(QAction)  # 添加行为动作
# QMenu 控件设置
setTitle(str)  # 设置标题
setIcon(QIcon)  # 设置图标
# QAction 设置
setText(str)  # 设置文本内容
setIcon(QIcon)  #
triggered  # 监听行为信号
"""

app = QApplication(sys.argv)
w = QWidget()
btn = QPushButton("File", w)
menu = QMenu(btn)
# 创建子菜单
open_recent = QMenu(menu)
open_recent.setTitle("最近打开")  # 添加标题
# open_recent.setIcon()

act_n = QAction(QIcon(r"D:\35005\Pictures\Screenshots\微信图片_20220302175157.jpg"), "新建", menu)
"""
相当于:
act_n = QAction()
act_n.setText("新建")
act_n.setIcon(QIcon("D:\35005\Pictures\Screenshots\微信图片_20220302175157.jpg"))
act_n.setParent(menu)
"""
act_n.triggered.connect(lambda: print("正在新建文件"))
act_o = QAction(QIcon(r"D:\35005\Pictures\Screenshots\微信图片_20220302175157.jpg"), "打开", menu)
act_o.triggered.connect(lambda: print("正在打开文件"))
act_e = QAction("退出", menu)
act_e.triggered.connect(lambda: print("正在退出应用"))
act_r = QAction("Python编程", menu)
act_r.triggered.connect(lambda: print("正在打开文件"))

# 子菜单设置
open_recent.addAction(act_r)

# 菜单设置
menu.addAction(act_n)  # 添加动作
menu.addAction(act_o)
menu.addMenu(open_recent)
menu.addSeparator()  # 添加分隔线
menu.addAction(act_e)

btn.setMenu(menu)

w.show()
btn.showMenu()  # 展示菜单,可以独立展示
sys.exit(app.exec_())

1.2.4 边框

边框是否扁平

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys

app = QApplication(sys.argv)
w = QWidget()

btn = QPushButton("File", w)
print(btn.isFlat())  # 查看边框是否为扁平化
btn.setFlat(True)  # 设置扁平化

w.show()
sys.exit(app.exec_())

1.2.5 默认处理

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys

app = QApplication(sys.argv)
w = QWidget()

btn1 = QPushButton("File1", w)
btn2 = QPushButton("File2", w)
btn2.move(100, 0)
btn1.setAutoDefault(True)  # 设置为自动默认按钮
print(btn1.autoDefault())  # 打印是否设置自动打印
btn2.setDefault(True)  # 一开始就设置为默认
w.show()
sys.exit(app.exec_())

在某些GUI样式中,默认按钮被绘制,其周围有一个额外的框架,最多三个像素或更多Qt会自动在自动默认按钮周围保留此空间。即自动默认按钮可能会有稍微大点的提示对于具有QDialog父级的按钮,此属性的默认值为True;否则默认为False

1.2.5 信号

其信号大部分是继承下来的,用法与父类类似

菜单请求信号:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys


class Window(QWidget):
    def contextMenuEvent(self, evt):
        # 如果为 Qt.DefaultContextMenu,就会运行这个函数
        print("展示菜单")  # 右击窗口,会调用这个方法,只要在里面创建菜单就可以了
        # 创建对象
        menu = QMenu(self)
        menu_s = QMenu("最近打开", menu)

        # 创建动作
        act_n = QAction(QIcon(r"D:\35005\Pictures\Screenshots\微信图片_20220302175157.jpg"), "新建", menu)
        act_n.triggered.connect(lambda: print("正在新建文件"))
        act_o = QAction(QIcon(r"D:\35005\Pictures\Screenshots\微信图片_20220302175157.jpg"), "打开", menu)
        act_o.triggered.connect(lambda: print("正在打开文件"))
        act_e = QAction("退出", menu)
        act_e.triggered.connect(lambda: print("正在退出应用"))
        act_r = QAction("Python编程", menu)
        act_r.triggered.connect(lambda: print("正在打开文件"))

        # 添加动作
        menu.addAction(act_n)
        menu.addAction(act_o)
        menu.addAction(act_e)
        menu.addAction(act_r)
        menu.addMenu(menu_s)

        # 展示菜单
        menu.exec_(evt.globalPos())  # 在鼠标右键的位置打开菜单,参数是窗口坐标


app = QApplication(sys.argv)
w = Window()
w.resize(500, 500)

# Qt.CustomContextMenu,就会发送信号调用此函数
def show_menu(point):
    print("展示菜单", point)
    # 创建对象
    menu = QMenu(w)
    menu_s = QMenu("最近打开", menu)

    # 创建动作
    act_n = QAction(QIcon(r"D:\35005\Pictures\Screenshots\微信图片_20220302175157.jpg"), "新建", menu)
    act_n.triggered.connect(lambda: print("正在新建文件"))
    act_o = QAction(QIcon(r"D:\35005\Pictures\Screenshots\微信图片_20220302175157.jpg"), "打开", menu)
    act_o.triggered.connect(lambda: print("正在打开文件"))
    act_e = QAction("退出", menu)
    act_e.triggered.connect(lambda: print("正在退出应用"))
    act_r = QAction("Python编程", menu)
    act_r.triggered.connect(lambda: print("正在打开文件"))

    # 添加动作
    menu.addAction(act_n)
    menu.addAction(act_o)
    menu.addAction(act_e)
    menu.addAction(act_r)
    menu.addMenu(menu_s)

    # 展示菜单
    dest_point = w.mapToGlobal(point)  # 将坐标转换为全局的坐标
    menu.exec_(dest_point)  # 在鼠标右键的位置打开菜单,参数是窗口坐标


# w.setContextMenuPolicy(Qt.DefaultContextMenu)  # 这个会运行重写的方法
w.setContextMenuPolicy(Qt.CustomContextMenu)  # 其不会运行重写的方法,但是会有信号传输
w.customContextMenuRequested.connect(show_menu)  # 监测信号
w.show()
sys.exit(app.exec_())

1.3 QCommandLinkButton

1.3.1 描述

命令链接是 window vista 引入的新控件

它的用途类似于单选按钮的用途,因为它用于在一组互斥选项之间的选择

命令链接按钮不应单独使用,而应作为向导和对话框中单选按钮的替代选项

外观通常类似于平面按钮的外观,但除了普通按钮文本之外,它还允许描述性文字

继承自QPushButton

1.3.2 语法

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys

app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
btn = QCommandLinkButton("标题", "描述", w)
btn.setText("标题文本内容")    # 设置标题
print(btn.text())  # 获得标题
btn.setDescription("设置描述内容")  # 设置描述
print(btn.description())  # 获得描述
btn.setIcon(QIcon(r"D:\35005\Pictures\Screenshots\微信图片_20220302175157.jpg"))  # 设置图标
w.show()
sys.exit(app.exec_())

1.4 RadioButton

1.4.1 描述

一般用于给用户提供若干个选项中的单选操作,当选中一个时,会自动取消上一个

当按钮选中时,会有一个圆圈图标,用于标识用户的选中状态

继承自QAbstractButton

1.4.2 功能作用

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys

app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
# 创建,在同一个组或同一个父对象内,值能选择一个,但是如果有r_btn1.setAutoExclusive(False)其可以选择多个(没有排他性)
r_btn1 = QRadioButton("男&male", w)  # 使用 & 设置快捷键 Alt + m
r_btn1.move(100, 0)
r_btn1.setChecked(True)  # 自动选中

r_btn2 = QRadioButton("女female", w)
r_btn2.setShortcut("Alt+F")  # 无文本创建快捷键

w.show()
sys.exit(app.exec_())

几乎父类的所有方法,子类都可以调用

1.4.3 信号

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys

app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
r_btn1 = QRadioButton("男", w)
r_btn1.move(100, 0)
r_btn1.setChecked(True)

r_btn2 = QRadioButton("女", w)
r_btn2.toggled.connect(lambda isChecked: print(isChecked))  # 返回bool,可以得到按钮是否被选中
w.show()
sys.exit(app.exec_())

父类的所有信号,子类都可以使用

1.4.4 多组排斥

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys

app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
r_btn1 = QRadioButton("男", w)
r_btn1.move(100, 0)
r_btn2 = QRadioButton("女", w)

# 两组
r_btn3 = QRadioButton("yes", w)
r_btn3.move(100, 40)
r_btn4 = QRadioButton("no", w)
r_btn4.move(0, 40)

# 解决方法1:继承不一样的父对象
# 解决方法2:使用按钮组 QButtonGroup
g1 = QButtonGroup(w)  # 创建
g1.addButton(r_btn1)  # 添加按钮
g1.addButton(r_btn2)  # 添加按钮
g1.addButton(r_btn3)  # 添加按钮
g1.removeButton(r_btn3)  # 移除按钮
g2 = QButtonGroup(w)  # 创建
g2.addButton(r_btn3)  # 添加按钮
g2.addButton(r_btn4)  # 添加按钮
w.show()
sys.exit(app.exec_())

QButtonGroup:

  1. 描述:

    • 提供一个抽象的按钮容器,可以将多个按钮划分为一组
    • 不具备可视化效果
    • 一般放的都是可检查的按钮
    • 继承于QObject
  2. 功能:

    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    # @author: kun
    from PyQt5.Qt import *
    import sys
    
    app = QApplication(sys.argv)
    w = QWidget()
    w.resize(500, 500)
    r_btn1 = QRadioButton("男", w)
    r_btn1.move(100, 0)
    r_btn2 = QRadioButton("女", w)
    r_btn2.setChecked(True)
    
    # id以及创建
    g1 = QButtonGroup(w)  # 创建
    g1.addButton(r_btn1, 1)  # 添加按钮,同时设置id为1,系统自动分配的id为负值
    g1.addButton(r_btn2, 2)  # 添加按钮,同时设置id为2
    print(g1.button(1))  # 查看 id 为 1 的按钮
    # 手动绑定id
    g1.setId(r_btn1, 2)
    g1.setId(r_btn2, 1)
    print(g1.id(r_btn1))  # 查看指定按钮的id
    print(g1.checkedId())  # 获取选中的按钮的id,如果都没选中,则为-1
    
    # 按钮操作
    # g1.removeButton(r_btn2)  # 移除按钮
    print(g1.buttons())  # 查看组内有哪些按钮
    print(g1.button(1))  # 查看 id 为 1 的按钮
    print(g1.checkedButton().text())  # 查看选中的按钮
    
    # 独占设置
    g1.setExclusive(False)  # 取消组内的互斥关系
    print(g1.exclusive())  # 获取组内是否有互斥关系
    
    w.show()
    sys.exit(app.exec_())
    
  3. 信号使用

    buttonClicked(int / QAbstractButton)  # 当组内的按钮点击时,发射此信号
    buttonPressed(int / QAbstractButton)  # 当组内的按钮按下时,发射此信号
    buttonReleased(int / QAbstractButton)  # 当组内的按钮松开时,发射此信号
    buttonToggled(int / QAbstractButton)  # 当组内的按钮切换状态时,发射此信号
    # 比如
    g1.buttonToggled[int].connect(lambda val: print(val))
    

    注意:

    • 通过buttonToggle[int].connect(fn) :来获取指定响应返回类型的信号,int 为按钮的 id 值
    • 如果一个对象向外界提供的信号名称一样,但参数不一样;外界在使用信号时,可以使用如下格式进行选择signal_name[type]

1.5 QCheckButton

1.5.1 描述

一般用于给用户提供若干个选项中的多选操作,可以都选;也可以都不选

左侧会有一个方框图标,标识用户的选中状态

继承自QAbstractButton

1.5.2 功能作用

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys

app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)

bc = QCheckBox("python", w)  # 创建复选框对象
bc.setIcon(QIcon(r"D:\35005\Pictures\Screenshots\微信图片_20220302175157.jpg"))  # 设置图标
# 其可以继承父类的操作

# 设置是否三态
bc.setTristate(True)  # 开启三态
print(bc.isTristate())  # 查看是否开启三态

# 设复选框状态
bc.setCheckState(Qt.PartiallyChecked)  # 部分选中
print(bc.checkState())  # 查看选中状态

w.show()
sys.exit(app.exec_())

复选框的状态:

  • Qt.Unchecked:该项目未选中 0
  • Qt.PartiallyChecked:部分选中 1
  • Qt.Checked:全部选中 2

1.5.3 信号

stateChanged(int state)  # 选中或清除选中时,发射此信号

其他的信号都是通过继承而来

1.6 QToolButton

1.6.1 描述

提供了一个快速访问按钮

通常是在工具栏内部使用

工具按钮通常不显示文本标签,而是显示图标,如保存文件的图标

继承自QAbstractButton

1.6.2 功能作用

1.6.2.1 创建

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys

app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
btn = QToolButton(w)  # 创建一个按钮
btn.setIcon(QIcon(r"D:\35005\Pictures\Screenshots\微信图片_20220302175157.jpg"))  # 添加图标
btn.setIconSize(QSize(100, 100))  # 设置图标大小
btn.setText("xxx")  # 设置文本,如果有图标又有文本,那么默认显示图标
btn.setToolTip("这是一个工具栏按钮")  # 设置提示
btn.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)  # 改变按钮风格,文本显示在图标下方,其他类型的风格可以在官方文档或者源码中查看
print(btn.toolButtonStyle())  # 获得按钮风格取值
w.show()
sys.exit(app.exec_())

1.6.2.2 自动提升

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys

app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
btn = QToolButton(w)
btn.setArrowType(Qt.UpArrow)  # 设置向上的箭头,其他的请到官方文档或源码中查找,在设置箭头后,以前设置的图标将被覆盖
print(btn.arrowType())  # 获取箭头类型
btn.setAutoRaise(True)  # 设置自动提升,类似于setFlat()
print(btn.autoRaise())  # 获取是否开启自动提升效果
w.show()
sys.exit(app.exec_())

1.6.2.3 菜单按钮

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys

app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
btn = QToolButton(w)
btn.setArrowType(Qt.DownArrow)  # 创建一个向下的箭头
btn.setText("工具栏")
btn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
menu = QMenu(btn)
sub_menu = QMenu("子菜单", menu)
# 创建动作
act = QAction(QIcon(r"D:\35005\Pictures\Screenshots\微信图片_20220302175157.jpg"), "行为", menu)
act.triggered.connect(lambda: print("正在执行行为"))
# 设置子菜单
sub_menu.setIcon(QIcon(r"D:\35005\Pictures\Screenshots\微信图片_20220302175157.jpg"))
# 设置主菜单
menu.addAction(act)
menu.addMenu(sub_menu)
btn.setMenu(menu)

# 注意,默认的菜单弹出方式为,按住按钮一会儿才会弹出菜单  QToolButton.DelayedPopup
btn.setPopupMode(QToolButton.MenuButtonPopup)  # 有一个专门的指示箭头,点击箭头展示
# btn.setPopupMode(QToolButton.InstantPopup)  # 点了按钮就弹出,其会影响信号的发射
print(btn.popupMode())  # 获得菜单弹出方式
w.show()
sys.exit(app.exec_())

1.6.3 信号

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys

app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
btn = QToolButton(w)
btn.setArrowType(Qt.LeftArrow)
btn.setText("工具栏")
btn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
menu = QMenu(btn)
sub_menu = QMenu("子菜单", menu)
# 创建动作
act = QAction(QIcon(r"D:\35005\Pictures\Screenshots\微信图片_20220302175157.jpg"), "行为", menu)
act.triggered.connect(lambda: print("正在执行行为"))

act.setData([1, 2, 3])  # 行为可以传递数据

# 设置子菜单
sub_menu.setIcon(QIcon(r"D:\35005\Pictures\Screenshots\微信图片_20220302175157.jpg"))
# 设置主菜单
menu.addAction(act)
menu.addMenu(sub_menu)

btn.triggered.connect(lambda act: print("按钮发送信号", act.data()))  # 单点击菜单时,也会触发这个槽,同时可以获取到哪个行为触发了这个槽,act.data() 可以接收行为设置的数据,可以对不同额行为,绑定不同的数据,在出口对数据进行操作
btn.setMenu(menu)
btn.setPopupMode(QToolButton.MenuButtonPopup)
w.show()
sys.exit(app.exec_())

标签:基本,sys,menu,act,PyQt5,语法,按钮,print,btn
来源: https://www.cnblogs.com/liuzhongkun/p/16074588.html