就像昨天所說的, 我們今天要來直接從 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())
看官方文件 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, 總之先來看我們上面這個全部摻在一起做成撒尿牛丸的程式被我搞得怎麼樣吧~
在這裡我主要是想看看使用了 QToolButton 畫面會長得如何, 我們一個一個功能慢慢看吧
tb.setText("+")
不知道為甚麼沒有出現在畫面上, 刪刪移移後發現是後面一句
tb.setArrowType(Qt.ArrowType.LeftArrow)
蓋住了加號, 把上方這句刪掉的話, 畫面會如下
加號回來了, 而上方這行從名稱就可以看出來, 這是在設定三角形的方向
改成
tb.setArrowType(Qt.ArrowType.UpArrow)
的話
箭頭方向就會向上了
tb.setAutoRaise(True)
這句有點看不懂, 但沒關係, 改成 False 看看
原來就是有沒有顯示可按範圍的設定啊
tb.setMenu(menu)
tb.setPopupMode(QToolButton.MenuButtonPopup)
QMenu 的話就比較多需要解釋了, 簡單來說就是應用程式左上方常常看到的菜單, 我們讓 QToolButton 有個下拉選單, 然後這裡要注意, 有 setMenu 的話就要設 setPopupMode, 我們把 setPopupMode 刪掉後畫面會變成
然後就只能永遠案 QToolButton 了
然後我們試著改
tb.setPopupMode(QToolButton.InstantPopup)
畫面顯示如下
跟一開始的按鈕長相有先不同了
tb.setDefaultAction(add)
這句直譯就是這個按鈕不用下拉選單, 直接按按鈕的話會做哪個動作, 在這裡我是設定加一
QAction 這個就之後再講吧, 最常看到的用法大概就是下拉式選單跟右鍵選單, 大家明天見!