• PyQt5 控件学习(一个一个学习之QToolButton)


    QToolButton 的继承图:

    QToolButton 之描述:

    一个主窗口,我们一般分为 从上到下,标题栏 ,菜单栏(文字) ,工具栏(一般都是图标,没文字),工作区,状态栏。

    我们这里说的是工具栏

    QToolButton 之继承:

    它继承自QAbstractButton !

    QToolButton 之功能作用:

     1 from PyQt5.Qt import * #刚开始学习可以这样一下导入
     2 import sys
     3 #1,创建app
     4 app  = QApplication(sys.argv)
     5 
     6 
     7 #2,控件的操作:
     8 #创建控件
     9 window = QWidget()
    10 
    11 
    12 #设置控件
    13 window.setWindowTitle("QCommandLinkButton功能作用")
    14 window.resize(500,500)
    15 
    16 bool_btn = QToolButton(window)
    17 bool_btn.setText("工具按钮")
    18 ############################当有图标显示时候,文本就不会显示了###############################
    19 #它和QPushButton 的不同,就是在于它一般只显示图标,不显示文本,而
    20 #QpushButton 既显示文本又显示图标。
    21 
    22 bool_btn.setIcon(QIcon("icon.ico"))
    23 #注:图标大小也可修改!
    24 ############################当有图标显示时候,文本就不会显示了###############################
    25 
    26 
    27 #展示控件
    28 window.show()
    29 
    30 #3,进入消息循环
    31 sys.exit(app.exec_())
    QToolButton 一般是只显示图标,不显示文本,这是它和QPushButton 的最大不同

     1 from PyQt5.Qt import * #刚开始学习可以这样一下导入
     2 import sys
     3 #1,创建app
     4 app  = QApplication(sys.argv)
     5 
     6 
     7 #2,控件的操作:
     8 #创建控件
     9 window = QWidget()
    10 
    11 
    12 #设置控件
    13 window.setWindowTitle("QCommandLinkButton功能作用")
    14 window.resize(500,500)
    15 
    16 bool_btn = QToolButton(window)
    17 
    18 bool_btn.setIcon(QIcon("icon.ico"))
    19 ###########################################################
    20 bool_btn.setToolTip("这是一个新建按钮")
    21 ###########################################################
    22 
    23 
    24 
    25 #展示控件
    26 window.show()
    27 
    28 #3,进入消息循环
    29 sys.exit(app.exec_())
    View Code

    但是,如果我们实在是想在工具按钮上一起显示文字和图标

    如下:

     1 from PyQt5.Qt import * #刚开始学习可以这样一下导入
     2 import sys
     3 #1,创建app
     4 app  = QApplication(sys.argv)
     5 
     6 
     7 #2,控件的操作:
     8 #创建控件
     9 window = QWidget()
    10 
    11 
    12 #设置控件
    13 window.setWindowTitle("QCommandLinkButton功能作用")
    14 window.resize(500,500)
    15 
    16 bool_btn = QToolButton(window)
    17 
    18 bool_btn.setIcon(QIcon("icon.ico"))
    19 bool_btn.setText("工具按钮")
    20 
    21 bool_btn.setToolTip("这是一个新建按钮")
    22 
    23 bool_btn.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)
    24 
    25 
    26 
    27 
    28 #展示控件
    29 window.show()
    30 
    31 #3,进入消息循环
    32 sys.exit(app.exec_())
    View Code

     1 from PyQt5.Qt import * #刚开始学习可以这样一下导入
     2 import sys
     3 #1,创建app
     4 app  = QApplication(sys.argv)
     5 
     6 
     7 #2,控件的操作:
     8 #创建控件
     9 window = QWidget()
    10 
    11 
    12 #设置控件
    13 window.setWindowTitle("QCommandLinkButton功能作用")
    14 window.resize(500,500)
    15 
    16 bool_btn = QToolButton(window)
    17 
    18 bool_btn.setArrowType(Qt.UpArrow)
    19 bool_btn.setArrowType(Qt.RightArrow) 
    20     #注意,如果箭头和图标同时存在的话,箭头的优先级高
    21 
    22 
    23 #展示控件
    24 window.show()
    25 
    26 #3,进入消息循环
    27 sys.exit(app.exec_())
    View Code

     1 from PyQt5.Qt import * #刚开始学习可以这样一下导入
     2 import sys
     3 #1,创建app
     4 app  = QApplication(sys.argv)
     5 
     6 
     7 #2,控件的操作:
     8 #创建控件
     9 window = QWidget()
    10 
    11 
    12 #设置控件
    13 window.setWindowTitle("QCommandLinkButton功能作用")
    14 window.resize(500,500)
    15 
    16 bool_btn = QToolButton(window)
    17 
    18 bool_btn.setIcon(QIcon("icon.ico"))
    19 bool_btn.setIconSize(QSize(50,50))
    20 
    21 ############################自动提升效果###############################
    22 bool_btn.setAutoRaise(True)
    23 #当鼠标放上去的时候,会有自动提升的效果
    24 
    25 ############################自动提升效果###############################
    26 
    27 ############################一般的扁平化效果###############################
    28 
    29 btn = QPushButton(window)
    30 btn.setFlat(True)
    31 btn.move(100,100)
    32 btn.setIcon(QIcon("icon.ico"))
    33 btn.setIconSize(QSize(50,50))  #当鼠标放上去的时候,也不会提升上来。
    34 
    35 ############################一般的扁平化效果###############################
    36 
    37 
    38 
    39 
    40 #展示控件
    41 window.show()
    42 
    43 #3,进入消息循环
    44 sys.exit(app.exec_())
    自动提升

     1 from PyQt5.Qt import * #刚开始学习可以这样一下导入
     2 import sys
     3 #1,创建app
     4 app  = QApplication(sys.argv)
     5 
     6 
     7 #2,控件的操作:
     8 #创建控件
     9 window = QWidget()
    10 
    11 
    12 #设置控件
    13 window.setWindowTitle("QCommandLinkButton功能作用")
    14 window.resize(500,500)
    15 
    16 bool_btn = QToolButton(window)
    17 
    18 bool_btn.setIcon(QIcon("icon.ico"))
    19 bool_btn.setIconSize(QSize(50,50))
    20 
    21 bool_btn.setAutoRaise(True)
    22 #当鼠标放上去的时候,会有自动提升的效果
    23 
    24 
    25 ############################给QPushButton按钮设置菜单###############################
    26 
    27 btn = QPushButton(window)
    28 btn.setFlat(True)
    29 btn.move(100,100)
    30 btn.setText("菜单")
    31 
    32 menu = QMenu(btn)
    33 
    34 sub_menu = QMenu(menu)
    35 sub_menu.setTitle("子菜单")
    36 relative_action  = QAction("最近打开")
    37 sub_menu.addAction(relative_action)
    38 
    39 
    40 new_action = QAction("新建")
    41 menu.addAction(new_action)
    42 
    43 open_action = QAction("打开")
    44 menu.addAction(open_action)
    45 
    46 menu.addSeparator()
    47 menu.addMenu(sub_menu)
    48 
    49 
    50 btn.setMenu(menu)
    51 ############################给QPushButton按钮设置菜单###############################
    52 
    53 
    54 
    55 
    56 #展示控件
    57 window.show()
    58 
    59 #3,进入消息循环
    60 sys.exit(app.exec_())
    给Qpushbutton 按钮设置菜单复习

    我们把上面的代码放到工具按钮上,

    from PyQt5.Qt import * #刚开始学习可以这样一下导入
    import sys
    #1,创建app
    app  = QApplication(sys.argv)
    
    
    #2,控件的操作:
    #创建控件
    window = QWidget()
    
    
    #设置控件
    window.setWindowTitle("QCommandLinkButton功能作用")
    window.resize(500,500)
    
    tool_btn = QToolButton(window)
    
    tool_btn.setIcon(QIcon("icon.ico"))
    tool_btn.setIconSize(QSize(50,50))
    
    tool_btn.setAutoRaise(True)
    #当鼠标放上去的时候,会有自动提升的效果
    
    
    ############################给工具按钮设置菜单###############################
    
    # btn = QPushButton(window)
    # btn.setFlat(True)
    # btn.move(100,100)
    # btn.setText("菜单")
    
    menu = QMenu(tool_btn)
    
    sub_menu = QMenu(menu)
    sub_menu.setTitle("子菜单")
    relative_action  = QAction("最近打开")
    sub_menu.addAction(relative_action)
    
    
    new_action = QAction("新建")
    menu.addAction(new_action)
    
    open_action = QAction("打开")
    menu.addAction(open_action)
    
    menu.addSeparator()
    menu.addMenu(sub_menu)
    
    
    tool_btn.setMenu(menu)
    ############################给工具按钮设置菜单###############################
    
    
    
    #展示控件
    window.show()
    
    #3,进入消息循环
    sys.exit(app.exec_())
    给工具按钮设置菜单

    但是 ,却不能显示菜单效果,这时因为有个东西要设置的。

    这里涉及到菜单的弹出模式:

    它的默认弹出模式是,按住一会才会弹出菜单。

    按住不松的应用场景:

    按住不送的话,会展示历史记录! 这是它的应用场景。

    可以通过setPopupMode来改变菜单弹出方式。

    tool_btn.setPopupMode(QToolButton.MenuButtonPopup)效果如下: 

     1 from PyQt5.Qt import * #刚开始学习可以这样一下导入
     2 import sys
     3 #1,创建app
     4 app  = QApplication(sys.argv)
     5 
     6 
     7 #2,控件的操作:
     8 #创建控件
     9 window = QWidget()
    10 
    11 
    12 #设置控件
    13 window.setWindowTitle("QCommandLinkButton功能作用")
    14 window.resize(500,500)
    15 
    16 tool_btn = QToolButton(window)
    17 
    18 tool_btn.setIcon(QIcon("icon.ico"))
    19 tool_btn.setIconSize(QSize(50,50))
    20 
    21 tool_btn.setAutoRaise(True)
    22 #当鼠标放上去的时候,会有自动提升的效果
    23 
    24 
    25 ############################给工具按钮设置菜单###############################
    26 
    27 # btn = QPushButton(window)
    28 # btn.setFlat(True)
    29 # btn.move(100,100)
    30 # btn.setText("菜单")
    31 
    32 menu = QMenu(tool_btn)
    33 
    34 sub_menu = QMenu(menu)
    35 sub_menu.setTitle("子菜单")
    36 relative_action  = QAction("最近打开")
    37 sub_menu.addAction(relative_action)
    38 
    39 
    40 new_action = QAction("新建")
    41 menu.addAction(new_action)
    42 
    43 open_action = QAction("打开")
    44 menu.addAction(open_action)
    45 
    46 menu.addSeparator()
    47 menu.addMenu(sub_menu)
    48 
    49 
    50 tool_btn.setMenu(menu)
    51 tool_btn.setPopupMode(QToolButton.MenuButtonPopup)
    52 ############################给工具按钮设置菜单###############################
    53 
    54 
    55 
    56 #展示控件
    57 window.show()
    58 
    59 #3,进入消息循环
    60 sys.exit(app.exec_())
    View Code
    tool_btn.setPopupMode(QToolButton.InstantPopup)

    from PyQt5.Qt import * #刚开始学习可以这样一下导入
    import sys
    #1,创建app
    app  = QApplication(sys.argv)
    
    
    #2,控件的操作:
    #创建控件
    window = QWidget()
    
    
    #设置控件
    window.setWindowTitle("QCommandLinkButton功能作用")
    window.resize(500,500)
    
    tool_btn = QToolButton(window)
    
    tool_btn.setIcon(QIcon("icon.ico"))
    tool_btn.setIconSize(QSize(50,50))
    
    tool_btn.setAutoRaise(True)
    #当鼠标放上去的时候,会有自动提升的效果
    
    
    ############################给工具按钮设置菜单###############################
    
    # btn = QPushButton(window)
    # btn.setFlat(True)
    # btn.move(100,100)
    # btn.setText("菜单")
    
    menu = QMenu(tool_btn)
    
    sub_menu = QMenu(menu)
    sub_menu.setTitle("子菜单")
    relative_action  = QAction("最近打开")
    sub_menu.addAction(relative_action)
    
    
    new_action = QAction("新建")
    menu.addAction(new_action)
    
    open_action = QAction("打开")
    menu.addAction(open_action)
    
    menu.addSeparator()
    menu.addMenu(sub_menu)
    
    
    tool_btn.setMenu(menu)
    tool_btn.setPopupMode(QToolButton.InstantPopup)
    ############################给工具按钮设置菜单###############################
    
    
    
    #展示控件
    window.show()
    
    #3,进入消息循环
    sys.exit(app.exec_())
    View Code

    注意:不同的菜单弹出模式是对工具按钮的信号发射是有影响的!

    用的时候自己试下就知道了。

    QToolButton 之信号:

    点击某个action时触发:

    from PyQt5.Qt import * #刚开始学习可以这样一下导入
    import sys
    #1,创建app
    app  = QApplication(sys.argv)
    
    
    #2,控件的操作:
    #创建控件
    window = QWidget()
    
    
    #设置控件
    window.setWindowTitle("QCommandLinkButton功能作用")
    window.resize(500,500)
    
    tool_btn = QToolButton(window)
    
    tool_btn.setIcon(QIcon("icon.ico"))
    tool_btn.setIconSize(QSize(50,50))
    
    tool_btn.setAutoRaise(True)
    #当鼠标放上去的时候,会有自动提升的效果
    
    
    ############################给工具按钮设置菜单###############################
    
    # btn = QPushButton(window)
    # btn.setFlat(True)
    # btn.move(100,100)
    # btn.setText("菜单")
    
    menu = QMenu(tool_btn)
    
    sub_menu = QMenu(menu)
    sub_menu.setTitle("子菜单")
    relative_action  = QAction("最近打开")
    sub_menu.addAction(relative_action)
    
    
    new_action = QAction("新建")
    menu.addAction(new_action)
    
    open_action = QAction("打开")
    menu.addAction(open_action)
    
    menu.addSeparator()
    menu.addMenu(sub_menu)
    
    
    tool_btn.setMenu(menu)
    tool_btn.setPopupMode(QToolButton.InstantPopup)
    ############################给工具按钮设置菜单###############################
    
    
    
    ###########################################################
    tool_btn.triggered.connect(lambda action:print("点击了 菜单下的action",action))
    
    
    ###########################################################
    
    
    
    
    
    #展示控件
    window.show()
    
    #3,进入消息循环
    sys.exit(app.exec_())
    View Code

    如何区分不同的action 呢?

    其实每个action 在添加的时候都都可以绑定一个任意的数据,(使用 setData() 给action添加数据)

    然后,我们可以在triggered信号连接的函数中的action.data()  来进行判断具体是哪个action.

    通过给action 绑定数据来判断具体是哪个行为

     1 from PyQt5.Qt import * #刚开始学习可以这样一下导入
     2 import sys
     3 #1,创建app
     4 app  = QApplication(sys.argv)
     5 
     6 
     7 #2,控件的操作:
     8 #创建控件
     9 window = QWidget()
    10 
    11 
    12 #设置控件
    13 window.setWindowTitle("QCommandLinkButton功能作用")
    14 window.resize(500,500)
    15 
    16 tool_btn = QToolButton(window)
    17 
    18 tool_btn.setIcon(QIcon("icon.ico"))
    19 tool_btn.setIconSize(QSize(50,50))
    20 
    21 tool_btn.setAutoRaise(True)
    22 #当鼠标放上去的时候,会有自动提升的效果
    23 
    24 
    25 ############################给工具按钮设置菜单###############################
    26 
    27 # btn = QPushButton(window)
    28 # btn.setFlat(True)
    29 # btn.move(100,100)
    30 # btn.setText("菜单")
    31 
    32 menu = QMenu(tool_btn)
    33 
    34 sub_menu = QMenu(menu)
    35 sub_menu.setTitle("子菜单")
    36 relative_action  = QAction("最近打开")
    37 sub_menu.addAction(relative_action)
    38 
    39 
    40 new_action = QAction("新建")
    41 new_action.setData("new")
    42 menu.addAction(new_action)
    43 
    44 open_action = QAction("打开")
    45 open_action.setData("open")
    46 menu.addAction(open_action)
    47 
    48 menu.addSeparator()
    49 menu.addMenu(sub_menu)
    50 
    51 
    52 tool_btn.setMenu(menu)
    53 tool_btn.setPopupMode(QToolButton.InstantPopup)
    54 ############################给工具按钮设置菜单###############################
    55 
    56 
    57 
    58 ##########################通过给action 绑定数据来区分不同action#################################
    59 def tool_btn_triggered_slot(action):
    60     if action.data()  == "new":
    61         print("你点击的是新建")
    62     elif action.data() == "open":
    63         print("你点击的是打开")
    64 
    65 
    66 tool_btn.triggered.connect(tool_btn_triggered_slot)
    67 
    68 ##########################通过给action 绑定数据来区分不同action#################################
    69 
    70 
    71 #展示控件
    72 window.show()
    73 
    74 #3,进入消息循环
    75 sys.exit(app.exec_())
    View Code

    这种方式比 针对每个行为绑定具体的槽函数好的多!

    总结:

    QToolButton 讲完了,下面是按钮控件中的   QRadioButton :https://www.cnblogs.com/zach0812/p/11372228.html

  • 相关阅读:
    Python——python读取html实战,作业7(python programming)
    Python——python读取html实战,作业7(python programming)
    Python——python读取xml实战,作业6(python programming)
    Python——python读取xml实战,作业6(python programming)
    二分查找(c & c++)
    大型站点技术架构(八)--站点的安全架构
    Android MTP 文件浏览Demo
    HDU2037 事件排序问题
    折腾开源WRT的AC无线路由之路-3
    启动VIP报CRS-1028/CRS-0223致使VIP状态为UNKNOWN故障分析与解决
  • 原文地址:https://www.cnblogs.com/zach0812/p/11371696.html
Copyright © 2020-2023  润新知