QPushButton普通按钮
QPushButton() # 创建一个无父控件的按钮控件
QpushButton(parent) # 创建控件的同时设置父控件
QpushButton(text, parent) # 创建控件的同时, 设置提示文本和父控件
QpushButton(icon, text, parent) # 创建控件的同时, 设置图标, 提示文本和父控件
# 设置英文文本时, 使用&符号
QPushButton("&Sz", window) # 创建对象的同时设置提示文本的时候设置快捷键
setText("&Sz") # 设置提示文本的时候设置快捷键
setShortcut("Alt+G") # 继承QAbstractButton类,设置控件快捷键
setMenu(QMenu) # 按钮设置菜单,添加一个QMenu对象
menu() # 获取菜单对象
showMenu() # 展示菜单(无需鼠标点击按钮,自动展开菜单)
# 关于QMenu控件
addAction(QAction) # 添加行为动作
addMenu(QMenu) # 添加子菜单
addSeparator() # 添加分割线
setTitle(str) # 设置标题
setIcon(QIcon) # 设置图标
# 关于QAction控件(行为动作)
setText(str) # 设置提示文本
setIcon(QIcon) # 设置图标
信号:triggered # 鼠标点击行为动作触发该事件
setFlat(bool) # 设置边框是否保持扁平,默认值为False
isFlat() # 获取当前按钮边框是否扁平
setAutoDefault(bool) # 设置为自动默认按钮(选中状态才会显示一个附加框架)
# 在某些GUI样式中,默认按钮被绘制,其周围有一个额外的框架,最多3个像素或更多
# Qt会自动在自动默认按钮周围保留此空间,即自动默认按钮可能会有稍大的提示
# 对于具有QDialog父级的按钮,此属性的默认值为true ; 否则默认为false
autoDefault() # 获取是否设置为自动默认
setDefault(bool) # 设置按钮的默认状态(默认按钮将一直显示一个附加的框架(取决于gui样式))
isDefault() # 获取是否设置按钮的默认状态
setDefault(True)
和 setAutoDefault(True)
后,按下回车键会响应(选中状态),按下空格键也有响应(选中状态)setDefault(True)
后,按钮会一直保持显示一个附加框架(蓝色框架)setAutoDefault(True)
后,按钮被选中时会显示一个附加框架(蓝色框架)# 继承自QAbstractButton类
pressed() # 鼠标按下信号
released() # 鼠标释放信号(控件内松开鼠标/鼠标移出控件范围后)
clicked(checked = False) # 单击信号(控件内按下+控件内释放),传递按钮是否被选中状态
toffled(bool checked) # 选中状态切换信号(一般在单选框或者复选框中使用),传递按钮是否被选中状态
# 继承自QWidget类
windowTitleChanged(QString) # 窗口标题改变信号,发射新的窗口名称
windowIconChanged(QIcon) # 窗口图标改变信号,发射图标对象
customContextMenuRequested(QPoint) # 自定义上下文菜单请求信号(鼠标右键按下发射信号),发射(传递)鼠标右键点击的坐标
setContextMenuPolicy(Qt.CustomContextMenu) # 设置控件自定义上下文菜单策略
# 参数:
Qt.CustomContextMenu # 发射信号customContextMenuRequested(QPoint)
Qt.DefaultContextMenu # 默认,调用对象方法contextMenuEvent()
示例代码
案例1:创建按钮控件
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
window = QWidget()
window.resize(500, 500)
window.setWindowTitle('QPushButton功能作用')
# 方法一:创建无父控件按钮
btn1 = QPushButton()
btn1.setParent(window)
btn1.setText('按钮1')
btn1.setIcon(QIcon("../ico/logo.ico"))
btn1.move(100, 50)
# 方法二:创建控件的同时设置父控件
btn2 = QPushButton(window)
btn2.setText('按钮2')
btn2.setIcon(QIcon("../ico/logo.ico"))
btn2.move(100, 100)
# 方法三:创建控件的同时, 设置提示文本和父控件
btn3 = QPushButton('按钮3', window)
btn3.setIcon(QIcon("../ico/logo.ico"))
btn3.move(100, 150)
# 方法四:创建控件的同时, 设置图标, 提示文本和父控件
btn4 = QPushButton(QIcon("../ico/logo.ico"), '按钮4', window)
btn4.move(100, 200)
window.show()
sys.exit(app.exec_())
案例2:按钮快捷键设置
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
window = QWidget()
window.resize(500, 500)
window.setWindowTitle('QPushButton快捷键设置')
# 方法一
btn1 = QPushButton('&Fz', window)
btn1.move(200, 100)
# 方法二
btn2 = QPushButton(window)
btn2.setText('A&BC')
btn2.move(300, 100)
# 方法三
btn3 = QPushButton('按钮3', window)
btn3.move(100, 100)
btn3.setShortcut('ALT+H')
btn1.clicked.connect(lambda :print('Fz:Fz Hello'))
btn2.clicked.connect(lambda :print('ABC:Fz Hello'))
btn3.clicked.connect(lambda :print('按钮3:Fz Hello'))
window.show()
sys.exit(app.exec_())
案例3:按钮菜单设置
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
window = QWidget()
window.resize(500, 500)
window.setWindowTitle('QPushButton-菜单')
btn = QPushButton('按钮菜单', window)
btn.move(20, 10)
# 创建菜单对象
menu = QMenu('菜单', btn)
# 创建动作行为对象用于主菜单
act1 = QAction('新建', menu)
act2 = QAction('打开', menu)
act3 = QAction('保存', menu)
act4 = QAction('退出', menu)
# 添加快捷键
act1.setShortcut('Alt+Insert')
act3.setShortcut('Ctrl+S')
# 主菜单行为动作添加信号与槽关联
act1.triggered.connect(lambda : print('新建文件'))
act2.triggered.connect(lambda : print('打开文件'))
act3.triggered.connect(lambda : print('保存文件'))
act4.triggered.connect(lambda : print('退出程序'))
# 给行为动作添加图标
act1.setIcon(QIcon('../images/new.jpg'))
act2.setIcon(QIcon('../images/open.jpg'))
act3.setIcon(QIcon('../images/save.jpg'))
act4.setIcon(QIcon('../images/exit.jpg'))
# 创建子菜单
me = QMenu('最近使用...', menu)
# me.setIcon(QIcon('../images/exit.jpg'))
# 创建动作行为对象用于主菜单
ac1 = QAction('01_QPushButton-功能作用.py', me)
ac2 = QAction('02_QPushButton-快捷键设置.py', me)
ac3 = QAction('03_QPushButton-菜单.py', me)
# 给二级菜单行为动作添加图标
ac3.setIcon(QIcon('../images/edit.jpg'))
# 子菜单行为动作添加信号与槽关联
ac1.triggered.connect(lambda : print('打开文件:' + ac1.text()))
ac2.triggered.connect(lambda : print('打开文件:' + ac2.text()))
ac3.triggered.connect(lambda : print('打开文件:' + ac3.text()))
# 子菜单添加项目:行为动作
me.addAction(ac1)
me.addAction(ac2)
me.addAction(ac3)
# 给菜单添加项目:行为动作
menu.addAction(act1)
menu.addAction(act2)
menu.addAction(act3)
# 给菜单添加项目:分割线
menu.addSeparator()
# 给菜单添加项目:子菜单
menu.addMenu(me)
# 给菜单添加项目:分割线
menu.addSeparator()
menu.addAction(act4)
# 按钮设置菜单
btn.setMenu(menu)
window.show()
sys.exit(app.exec_())
案例4:默认设置
from PyQt5.Qt import *
import sys
import time
class Btn(QPushButton):
def keyPressEvent(self, a0) -> None:
super().keyPressEvent(a0)
if a0.key() == 32:
self.parent().findChild(QLabel, 'labe0').setText('空格键被按下了')
elif a0.key() == 16777220:
self.parent().findChild(QLabel, 'labe0').setText('回车键被按下了')
def keyReleaseEvent(self, e) -> None:
super().keyReleaseEvent(e)
self.parent().findChild(QLabel, 'labe').setText('')
self.parent().findChild(QLabel, 'labe0').setText('')
def cao(self):
labe.setText(self.text() + '被点击了')
app = QApplication(sys.argv)
window = QWidget()
window.resize(500, 500)
window.setWindowTitle('QPushButton-默认设置')
labe = QLabel(window)
labe.resize(300, 50)
labe.setObjectName('labe')
labe.move(100, 410)
labe.setStyleSheet("font-size:40px;color:red;border: 1px solid gray;")
labe0 = QLabel(window)
labe0.setObjectName('labe0')
labe0.resize(300, 50)
labe0.move(100, 350)
labe0.setStyleSheet("font-size:40px;color:green;border: 1px solid gray;")
labe1 = QLabel('默认状态', window)
labe1.move(50, 70)
labe2 = QLabel('setDefault(True)', window)
labe2.move(50, 170)
labe3 = QLabel('setAutoDefault(True)', window)
labe3.move(50, 270)
btn1 = Btn('按钮1', window)
btn2 = Btn('按钮2', window)
btn3 = Btn('按钮3', window)
btn4 = Btn('按钮4', window)
btn5 = Btn('按钮5', window)
btn6 = Btn('按钮6', window)
btn7 = Btn('按钮7', window)
btn8 = Btn('按钮8', window)
btna = Btn('按钮A', window)
btnb = Btn('按钮B', window)
btnc = Btn('按钮C', window)
btnd = Btn('按钮D', window)
btn1.move(50, 100)
btn2.move(150, 100)
btn3.move(250, 100)
btn4.move(350, 100)
btn5.move(50, 200)
btn6.move(150, 200)
btn7.move(250, 200)
btn8.move(350, 200)
btna.move(50, 300)
btnb.move(150, 300)
btnc.move(250, 300)
btnd.move(350, 300)
btn1.pressed.connect(btn1.cao)
btn2.pressed.connect(btn2.cao)
btn3.pressed.connect(btn3.cao)
btn4.pressed.connect(btn4.cao)
btn5.pressed.connect(btn5.cao)
btn6.pressed.connect(btn6.cao)
btn7.pressed.connect(btn7.cao)
btn8.pressed.connect(btn8.cao)
btna.pressed.connect(btna.cao)
btnb.pressed.connect(btnb.cao)
btnc.pressed.connect(btnc.cao)
btnd.pressed.connect(btnd.cao)
# 设置按钮默认响应回车键按下事件,按钮一直保持显示附加框架
btn5.setDefault(True)
btn6.setDefault(True)
btn7.setDefault(True)
btn8.setDefault(True)
# 设置按钮自动默认响应回车键按下事件,按钮选中时显示附加框架
btna.setAutoDefault(True)
btnb.setAutoDefault(True)
btnc.setAutoDefault(True)
btnd.setAutoDefault(True)
window.show()
sys.exit(app.exec_())
案例5:可用信号
from PyQt5.Qt import *
import sys
class Window(QWidget):
def contextMenuEvent(self, a0) -> None:
menu = self.createMenu()
x_y = a0.globalPos()
# menu.move(x_y)
# menu.show()
menu.exec_(QPoint(x_y))
def createMenu(self):
menu = QMenu('主菜单', self)
act1 = QAction('查看', menu)
act2 = QAction('新建', menu)
act3 = QAction('刷新', menu)
act4 = QAction('打印', menu)
me = QMenu('子菜单', menu)
ac1 = QAction('子菜单1', me)
ac2 = QAction('子菜单2', me)
ac3 = QAction('子菜单3', me)
ac4 = QAction('子菜单4', me)
me.addAction(ac1)
me.addAction(ac2)
me.addAction(ac3)
me.addAction(ac4)
menu.addAction(act1)
menu.addAction(act2)
menu.addAction(act3)
menu.addSeparator()
menu.addMenu(me)
menu.addAction(act4)
return menu
app = QApplication(sys.argv)
window = Window()
window.resize(500, 500)
window.setWindowTitle('QPushButton-可用信号')
# ****************这些信号前面都讲了,这里就不写了****************** 开始
# 继承自QAbstractButton类
# pressed() # 鼠标按下信号
# released() # 鼠标释放信号(控件内松开鼠标/鼠标移出控件范围后)
# clicked(checked=False) # 单击信号(控件内按下+控件内释放),传递按钮是否被选中状态
# toffled(bool checked) # 选中状态切换信号(一般在单选框或者复选框中使用),传递按钮是否被选中状态
# 继承自QWidget类
# windowTitleChanged(QString) # 窗口标题改变信号
# windowIconChanged(QIcon) # 窗口图标改变信号
# ****************这些信号前面都讲了,这里就不写了****************** 结束
# ****************自定义上下文菜单请求信号****************** 开始
# customContextMenuRequested(QPoint) # 自定义上下文菜单请求信号
# setContextMenuPolicy(参数) # 设置控件自定义上下文策略
# 参数:
# Qt.DefaultContextMenu # 默认,调用对象方法contextMenuEvent()
# Qt.CustomContextMenu # 发射信号customContextMenuRequested(QPoint)
# ****************自定义上下文菜单请求信号****************** 结束
window.show()
sys.exit(app.exec_())
案例6:可用信号
from PyQt5.Qt import *
import sys
class Window(QWidget):
def contextMenuEvent(self, a0) -> None:
menu = self.createMenu()
x_y = a0.globalPos()
# menu.move(x_y)
# menu.show()
menu.exec_(QPoint(x_y))
def createMenu(self):
menu = QMenu('主菜单', self)
act1 = QAction('查看', menu)
act2 = QAction('新建', menu)
act3 = QAction('刷新', menu)
act4 = QAction('打印', menu)
me = QMenu('子菜单', menu)
ac1 = QAction('子菜单1', me)
ac2 = QAction('子菜单2', me)
ac3 = QAction('子菜单3', me)
ac4 = QAction('子菜单4', me)
me.addAction(ac1)
me.addAction(ac2)
me.addAction(ac3)
me.addAction(ac4)
menu.addAction(act1)
menu.addAction(act2)
menu.addAction(act3)
menu.addSeparator()
menu.addMenu(me)
menu.addAction(act4)
return menu
app = QApplication(sys.argv)
window = QWidget()
window.resize(500, 500)
window.setWindowTitle('QPushButton-可用信号')
# 设置控件上下文请求策略(鼠标右键请求策略)为Qt.CustomContextMenu
# 此时上下文请求会发射信号
window.setContextMenuPolicy(Qt.CustomContextMenu)
def rig_cao(pos):
menu = QMenu('主菜单', window)
act1 = QAction('查看', menu)
act2 = QAction('新建', menu)
act3 = QAction('刷新', menu)
act4 = QAction('打印', menu)
me = QMenu('子菜单', menu)
ac1 = QAction('子菜单1', me)
ac2 = QAction('子菜单2', me)
ac3 = QAction('子菜单3', me)
ac4 = QAction('子菜单4', me)
me.addAction(ac1)
me.addAction(ac2)
me.addAction(ac3)
me.addAction(ac4)
menu.addAction(act1)
menu.addAction(act2)
menu.addAction(act3)
menu.addSeparator()
menu.addMenu(me)
menu.addAction(act4)
# 将控件中的坐标映射成桌面坐标
desk_pos = window.mapToGlobal(pos)
menu.exec_(QPoint(desk_pos))
window.customContextMenuRequested.connect(rig_cao)
window.show()
sys.exit(app.exec_())