iT邦幫忙

2022 iThome 鐵人賽

DAY 14
0

就像昨天所說的, 我們今天要來直接從 Pyside 裡有的 class 來看 List of Classes 那我們就按照字母順序從 QAbstractButton 來看

在 QAbstractButton 下又分了 QToolButton, QRadioButton, QPushButton, QCommandLinkButton, QCheckBox
QPushButton 我們之前使用過了, 今天試試我也沒用過的 QToolButton 吧!
一個完全只是顯示看看的程式如下

import sys
from PySide6.QtWidgets import *

class MyWidget(QWidget):
    def __init__(self):
        super().__init__()
        tb = QToolButton(self)
        tb.setText("ToolButton")

if __name__ == "__main__":
    app = QApplication([])

    widget = MyWidget()
    widget.resize(300, 300)
    widget.show()

    sys.exit(app.exec())

https://ithelp.ithome.com.tw/upload/images/20220916/20151144Y1Siry7JSs.png

看官方文件 QToolButton 常用在 QToolBar 裡, 可惜我們還沒用到這個 toolbar, 先略過在 toolbar 的使用
我們來玩玩 QToolButton 裡的函式們
把有 set 這個單字的 function 全都使用一次

import sys
from PySide6.QtWidgets import *
from PySide6.QtCore import *
from PySide6.QtGui import *

class MyWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.num = 0
        layout = QVBoxLayout(self)
        self.setLayout(layout)
        self.label = QLabel("0", alignment = Qt.AlignCenter)
        layout.addWidget(self.label)

        tb = QToolButton(self)
        tb.setText("+")
        tb.setArrowType(Qt.ArrowType.LeftArrow)
        tb.setAutoRaise(True)
        menu = QMenu("Menu", self)
        add = QAction("+", self)
        minus = QAction("-", self)
        menu.addAction(add)
        menu.addAction(minus)
        tb.setDefaultAction(add)

        add.triggered.connect(self.addOne)
        minus.triggered.connect(self.minusOne)
        tb.setMenu(menu)
        tb.setPopupMode(QToolButton.MenuButtonPopup)

    def addOne(self):
        self.num  = self.num + 1
        self.label.setText(str(self.num))
    def minusOne(self):
        self.num  = self.num - 1
        self.label.setText(str(self.num))

if __name__ == "__main__":
    app = QApplication([])

    widget = MyWidget()
    widget.resize(300, 300)
    widget.show()

    sys.exit(app.exec())

在這裡因為 QToolButton 裡有提到, 所以算是多學 QMenu 和 QAction, 總之先來看我們上面這個全部摻在一起做成撒尿牛丸的程式被我搞得怎麼樣吧~
toolbtn

在這裡我主要是想看看使用了 QToolButton 畫面會長得如何, 我們一個一個功能慢慢看吧

tb.setText("+")

不知道為甚麼沒有出現在畫面上, 刪刪移移後發現是後面一句

tb.setArrowType(Qt.ArrowType.LeftArrow)

蓋住了加號, 把上方這句刪掉的話, 畫面會如下
https://ithelp.ithome.com.tw/upload/images/20220916/201511442VvC10D20m.png
加號回來了, 而上方這行從名稱就可以看出來, 這是在設定三角形的方向
改成

tb.setArrowType(Qt.ArrowType.UpArrow)

的話
https://ithelp.ithome.com.tw/upload/images/20220916/20151144BD5UgeX0t7.png
箭頭方向就會向上了

tb.setAutoRaise(True)

這句有點看不懂, 但沒關係, 改成 False 看看
https://ithelp.ithome.com.tw/upload/images/20220916/20151144gsrWgxDQUF.png
原來就是有沒有顯示可按範圍的設定啊

tb.setMenu(menu)
tb.setPopupMode(QToolButton.MenuButtonPopup)

QMenu 的話就比較多需要解釋了, 簡單來說就是應用程式左上方常常看到的菜單, 我們讓 QToolButton 有個下拉選單, 然後這裡要注意, 有 setMenu 的話就要設 setPopupMode, 我們把 setPopupMode 刪掉後畫面會變成
https://ithelp.ithome.com.tw/upload/images/20220916/20151144NtFPyi9PUq.png
然後就只能永遠案 QToolButton 了
然後我們試著改

tb.setPopupMode(QToolButton.InstantPopup)

畫面顯示如下
https://ithelp.ithome.com.tw/upload/images/20220916/20151144L4Q3RJG653.png
跟一開始的按鈕長相有先不同了

tb.setDefaultAction(add)

這句直譯就是這個按鈕不用下拉選單, 直接按按鈕的話會做哪個動作, 在這裡我是設定加一

QAction 這個就之後再講吧, 最常看到的用法大概就是下拉式選單跟右鍵選單, 大家明天見!


上一篇
【Day13】QTreeWidget 續續
下一篇
【Day15】QToolButton 續 + 15 天心得
系列文
[Python QT] 玩玩 Pyside 的各種功能31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言