在 Pyside6 中,QPushButton 可通过setCheckable(True)方法将按钮设置为可切换模式,使按钮可以在两种状态之间切换,这种按钮也可以叫开关按钮。

Pyside6可切换按钮
可切换按钮

可通过setCheckable(True)方法将按钮设置为可切换模式:

button = QPushButton("Button")
button.setCheckable(True)

toggled 信号

当按钮的选中状态(checked 状态)发生改变时触发toggled信号:

button.toggled.connect(on_toggled)
def on_toggled(checked):
    pass

toggled信号的槽函数接受一个布尔参数,表示按钮的选中状态,为True时表示选中。

toggled信号只会在可切换模式下触发。

相关属性和方法

  • isCheckable():返回布尔值,表示是否为可切换模式
  • setCheckable(bool):设置为可切换模式
  • isChecked():返回布尔值,判断是否为选中状态
  • setChecked(bool):设置选中状态
  • toggled():切换状态

示例代码

import sys
import os
from PySide6.QtWidgets import (QApplication, QWidget, 
    QPushButton,QVBoxLayout)

class MainWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.resize(300, 200)
        self.setWindowTitle("可切换按钮示例")

        self.button = QPushButton("运行")
        self.button.setCheckable(True)
        self.button.setStyleSheet("""
            QPushButton:checked {
                background-color: #4CAF50;
                color: white;
            }
            QPushButton:!checked {
                background-color: #f44336;
                color: white;
            }
        """)
        self.button.toggled.connect(self.on_toggled)
        
        layout = QVBoxLayout()
        layout.addWidget(self.button)
        self.setLayout(layout)
        
    def on_toggled(self,checked):
        self.button.setText("停止" if checked else "运行")

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWidget()
    window.show()
    sys.exit(app.exec())