QPushButton按钮

 


需要 from PyQt5.QtWidgets import QPushButton
继承 QObject-->QWidget-->QAbstractButton-->QPushButton


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



菜单设置:
需要 from PyQt5.QtWidgets import QMenu
setMenu(QMenu) 设置菜单
menu() 获取菜单
showMenu() 展示菜单

from PyQt5.QtWidgets import QApplication, QWidget,QPushButton,QMenu,QAction
import sys
from PyQt5.QtGui import QIcon

class win(QWidget):
    def __init__(self):
        super().__init__()
        self.resize(300,300)
        self.setWindowTitle('菜单')
        self.num=0
        self.btn=QPushButton('按钮1',self)
        self.btn.move(100,50)
        self.btn.setIcon(QIcon('大象.png'))

        menu=QMenu()   #创建菜单
        #action1=QAction(menu)   #创建行为
        #这个行为要有父对象self或menu,否则不显示
        #action1.setText('新建')   #行为显示的文本
        #action1.setIcon(QIcon('新建.png'))  #给行为添加图标
        action1 = QAction(QIcon('新建.png'),'新建',menu)   #创建行为
        menu.addAction(action1)   #给菜单添加行为
    #每次只能添加一个行为
menu.addSeparator() #添加分割线
action2 = QAction(QIcon('打开.png'), '打开', menu) menu.addAction(action2) self.btn.setMenu(menu) #给按钮设置菜单 action1.triggered.connect(lambda :print('新建文件')) #点击行为时连接的槽函数 menu1=QMenu(menu) #创建子菜单 menu1.setTitle('最近打开') #给子菜单设置标题 menu.addMenu(menu1) #添加子菜单 if __name__=='__main__': app=QApplication(sys.argv) w=win() w.show() #w.btn.showMenu() #自动显示菜单 sys.exit(app.exec_())

 


信号:
  QAbstractButton:
    pressed() 鼠标按下信号
    released() 鼠标释放
    clicked()    控件内按下+控件内释放
    toggled(bool checked) 切换信号(一般在单选框或者复选框中使用)

  QWidget:
    windowTitleChanged(QString) 窗口标题改变信号
    windowIconChanged(QIcon) 窗口图标改变信号
    customContextMenuRequested(QPoint) 自定义上下文菜单请求信号






是否扁平:

setFlat(bool) 是否扁平
    默认值为False 设置了此属性,则除非按下按钮,否则大多数样式都不会绘制按钮背景

isFlat() 获取当前按钮边框是否扁平



默认处理:

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

setDefault(bool) 设置是否默认按钮

autoDefault()   返回是否自动默认
isDefault()    是否默认按钮


右键菜单:

方法一:重写控件方法 contextMenuEvent()

from PyQt5.QtWidgets import QApplication, QWidget,QPushButton,QMenu,QAction
import sys

class win(QWidget):
    def contextMenuEvent(self, evt) :   #在控件内右击事件
        menu=QMenu(self)
        action1 = QAction(menu)  # 创建行为
        action1.setText('右击菜单')
        action2 = QAction(menu)  # 创建行为
        action2.setText('右击菜单1')
        menu.addAction(action1)  # 给菜单添加行为
        menu.addAction(action2)
        menu.exec_(evt.globalPos())  #展示菜单
        #参数 坐标-相对于屏幕

    def __init__(self):
        super().__init__()
        self.resize(300,300)
        self.setWindowTitle('右击菜单')

if __name__=='__main__':
    app=QApplication(sys.argv)
    w=win()
    w.show()
    sys.exit(app.exec_())

 

方法二:

from PyQt5.QtWidgets import QApplication, QWidget,QPushButton,QMenu,QAction
import sys
from PyQt5.QtCore import Qt

class win(QWidget):
    def __init__(self):
        super().__init__()
        self.resize(300,300)
        self.setWindowTitle('右击菜单')
        self.menu=QMenu()
        action1=QAction(self.menu)
        action1.setText('菜单1')
        self.menu.addAction(action1)
        action2 = QAction(self.menu)
        action2.setText('菜单2')
        self.menu.addAction(action2)
        self.setContextMenuPolicy(Qt.CustomContextMenu)
        # setContextMenuPolicy  设置菜单
        # 参数Qt.CustomContextMenu  自定义菜单-此时右击控件不会产生contextMenuEvent事件
        # Qt.DefaultContextMenu  默认菜单;也就是右击时发生contextMenuEvent事件(方法一)
        self.customContextMenuRequested.connect(self.menushow)  #右击时发出菜单请求信号
        #会向槽函数传递鼠标点击点的坐标-相对于控件

    def menushow(self,point):
        point1=self.mapToGlobal(point)  #将窗口坐标转换成屏幕坐标
        self.menu.exec_(point1)

if __name__=='__main__':
    app=QApplication(sys.argv)
    w=win()
    w.show()
    sys.exit(app.exec_())

 


 


posted @ 2019-02-07 05:23  天子骄龙  阅读(10010)  评论(0编辑  收藏  举报