ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

PyQt5 基本语法(二)

2022-03-30 00:36:22  阅读:274  来源: 互联网

标签:基本 sys menu act PyQt5 语法 按钮 print btn


目录

按照继承关系来学习

1、按钮控件

1.1 QAbstractButton

1.1.1 简介

1.1.1.1 描述

  • 所有按钮控件的基类
  • 提供按钮的通用功能
  • 其继承自 QWidget
  • 其为 C++ 中的虚继承类,无法实例化对象,只有子类化,才能实例化对象

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

要求:

  • 每点击一次,则让文本数字加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 信号

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

菜单请求信号:

  • customContextMenuRequested(QPoint):自定义上下文菜单请求信号
    • setContextMenuPolicy(Qt.CustomContextMenu):设置信号
      • Qt.DefaultContextMenu:调用对象方法 contextMenuEvent()
      • Qt.CustomContextMenu:发射信号
#!/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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有