最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PyQt5實(shí)現(xiàn)滑動(dòng)開關(guān)的示例詳解

 更新時(shí)間:2024年12月12日 11:20:47   作者:小蠻幺_kongkong  
這篇文章主要為大家詳細(xì)介紹了如何使用PyQt5實(shí)現(xiàn)滑動(dòng)開關(guān)的效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

效果圖

1、初始化按鈕類

class SwitchButton(QPushButton):
    def __init__(self):
        super().__init__()

SwitchButton 是一個(gè)繼承自 QPushButton 的自定義按鈕類。

在初始化函數(shù)中,調(diào)用了 super().__init__(),確保父類 QPushButton 的初始化功能被執(zhí)行。

2、設(shè)置按鈕的基礎(chǔ)樣式

self.setCheckable(True)  # 使按鈕可以選中和取消選中
self.setStyleSheet("""
    SwitchButton {
        border: 2px solid #ccc;
        border-radius: 15px;
        background-color: #ccc;
        width: 80px;  /* 增加寬度 */
        height: 30px;
        position: relative;
    }
    SwitchButton:checked {
        background-color: #4CAF50;
    }
""")
self.setFixedSize(80, 30)

設(shè)置按鈕為 可選中狀態(tài) (checkable),即可以切換選中和未選中狀態(tài)。

使用 setStyleSheet 設(shè)置按鈕的樣式:

  • 默認(rèn)情況下背景色為灰色(#ccc)。
  • 選中狀態(tài)(SwitchButton:checked)時(shí)背景色為綠色(#4CAF50)。
  • 按鈕有圓角邊框(border-radius: 15px),形狀為橢圓。

固定按鈕的大小為 80x30 像素。

3、添加滑塊

self._slider = QPushButton(self)  # 用于滑動(dòng)的按鈕
self._slider.setFixedSize(28, 28)
self._slider.setStyleSheet("""
    QPushButton {
        border-radius: 14px;
        background-color: white;
    }
""")
self._slider.move(2, 2)  # 初始位置

self._slider 是一個(gè)內(nèi)部的小按鈕,用于表示開關(guān)滑塊。

設(shè)置滑塊的大小為 28x28,并使用 border-radius: 14px 將其形狀設(shè)置為圓形。

初始位置通過 move(2, 2) 放置在按鈕左側(cè)。

4、添加狀態(tài)文本

self._label = QLabel("OFF", self)
self._label.setStyleSheet("""
    QLabel {
        color: white;
        font-weight: bold;
    }
""")
self._label.setFixedSize(40, 30)
self._label.move(20, 0)  # 初始位置為中間位置

self._label 是用于顯示當(dāng)前按鈕狀態(tài)的文本。

設(shè)置了 OFF 為初始文本,并通過樣式設(shè)置文本為白色,字體加粗。

使用 move(20, 0) 將文本放置在按鈕的中間位置。

5、設(shè)置動(dòng)畫效果

self.animation = QPropertyAnimation(self._slider, b"pos")
self.animation.setDuration(200)  # 動(dòng)畫持續(xù)時(shí)間

self.animation 是一個(gè)屬性動(dòng)畫,用于在滑塊滑動(dòng)時(shí)產(chǎn)生平滑的過渡效果。

將滑塊的 pos 屬性綁定到動(dòng)畫中,動(dòng)畫的持續(xù)時(shí)間設(shè)置為 200 毫秒。

6、切換按鈕的狀態(tài)

self.clicked.connect(self.toggle)

通過 clicked.connect 將按鈕的點(diǎn)擊事件與自定義的 toggle 方法綁定。

7、實(shí)現(xiàn)狀態(tài)切換邏輯

def toggle(self):
    if self.isChecked():
        self.animation.setEndValue(QPoint(50, 2))  # 開關(guān)打開時(shí)滑塊的位置
        self._label.setText("ON")  # 更新文本為 ON
        self._label.move(20, 0)  # 保持文本在中間位置
    else:
        self.animation.setEndValue(QPoint(2, 2))  # 開關(guān)關(guān)閉時(shí)滑塊的位置
        self._label.setText("OFF")  # 更新文本為 OFF
        self._label.move(20, 0)  # 保持文本在中間位置
    self.animation.start()

判斷按鈕狀態(tài):

  • 使用 isChecked() 檢查按鈕是否處于選中狀態(tài)。
  • 如果選中(ON 狀態(tài)),將滑塊的目標(biāo)位置設(shè)置為按鈕右側(cè)(QPoint(50, 2))。
  • 如果未選中(OFF 狀態(tài)),將滑塊的目標(biāo)位置設(shè)置為按鈕左側(cè)(QPoint(2, 2))。

更新狀態(tài)文本:

  • 在 ON 狀態(tài)下,文本更新為 ON。
  • 在 OFF 狀態(tài)下,文本更新為 OFF。
  • 文本始終放在按鈕的中間位置。

啟動(dòng)動(dòng)畫:

調(diào)用 self.animation.start() 啟動(dòng)滑塊動(dòng)畫。

import sys
from PyQt5.QtCore import QPropertyAnimation, QPoint
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QLabel


class SwitchButton(QPushButton):
    def __init__(self):
        super().__init__()

        self.setCheckable(True)  # 使按鈕可以選中和取消選中
        self.setStyleSheet("""
            SwitchButton {
                border: 2px solid #ccc;
                border-radius: 15px;
                background-color: #ccc;
                 width: 80px;  /* 增加寬度 */
                height: 30px;
                position: relative;
            }
            SwitchButton:checked {
                background-color: #4CAF50;
            }
        """)
        self.setFixedSize(80, 30)

        self._slider = QPushButton(self)  # 用于滑動(dòng)的按鈕
        self._slider.setFixedSize(28, 28)
        self._slider.setStyleSheet("""
            QPushButton {
                border-radius: 14px;
                background-color: white;
            }
        """)
        self._slider.move(2, 2)  # 初始位置

        # 添加狀態(tài)文本標(biāo)簽
        self._label = QLabel("OFF", self)
        self._label.setStyleSheet("""
                    QLabel {
                        color: white;
                        font-weight: bold;
                    }
                """)
        self._label.setFixedSize(40, 30)
        self._label.move(40, 0)  # 初始位置為中間位置

        # 動(dòng)畫效果
        self.animation = QPropertyAnimation(self._slider, b"pos")
        self.animation.setDuration(200)  # 動(dòng)畫持續(xù)時(shí)間

        # 點(diǎn)擊事件切換開關(guān)
        self.clicked.connect(self.toggle)

    def toggle(self):
        if self.isChecked():
            self.animation.setEndValue(QPoint(50, 2))  # 開關(guān)打開時(shí)滑塊的位置
            self._label.setText("ON")  # 更新文本為 ON
            self._label.move(20, 0)  # 保持文本在中間位置
        else:
            self.animation.setEndValue(QPoint(2, 2))  # 開關(guān)關(guān)閉時(shí)滑塊的位置
            self._label.setText("OFF")  # 更新文本為 OFF
            self._label.move(40, 0)  # 保持文本在中間位置
        self.animation.start()


class App(QWidget):
    def __init__(self):
        super().__init__()

        self.setWindowTitle('PyQt5 Switch Button Example')
        self.setGeometry(300, 300, 200, 100)

        layout = QVBoxLayout()
        self.switch_button = SwitchButton()
        layout.addWidget(self.switch_button)
        self.setLayout(layout)
        self.switch_button.clicked.connect(self.on_state_changed)

    def on_state_changed(self):
        if self.switch_button.isChecked():
            print("Switch is ON")
        else:
            print("Switch is OFF")


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = App()
    window.show()
    sys.exit(app.exec_())

到此這篇關(guān)于PyQt5實(shí)現(xiàn)滑動(dòng)開關(guān)的示例詳解的文章就介紹到這了,更多相關(guān)PyQt5滑動(dòng)開關(guān)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++如何計(jì)算二進(jìn)制數(shù)中1的個(gè)數(shù)

    C++如何計(jì)算二進(jìn)制數(shù)中1的個(gè)數(shù)

    這篇文章主要介紹了C++如何計(jì)算二進(jìn)制數(shù)中1的個(gè)數(shù),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • c語言實(shí)現(xiàn)足球比賽積分統(tǒng)計(jì)系統(tǒng)

    c語言實(shí)現(xiàn)足球比賽積分統(tǒng)計(jì)系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了c語言實(shí)現(xiàn)足球比賽積分統(tǒng)計(jì)系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • c/c++那些你一定會(huì)出錯(cuò)的數(shù)組筆試題匯總

    c/c++那些你一定會(huì)出錯(cuò)的數(shù)組筆試題匯總

    這篇文章主要給大家匯總介紹了關(guān)于c/c++那些你一定會(huì)出錯(cuò)的數(shù)組筆試題,除了基本數(shù)據(jù)類型之外,其余的都作為類對象,包括數(shù)組,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • C++11委托構(gòu)造函數(shù)和繼承構(gòu)造函數(shù)的實(shí)現(xiàn)

    C++11委托構(gòu)造函數(shù)和繼承構(gòu)造函數(shù)的實(shí)現(xiàn)

    C++引入了委托構(gòu)造函數(shù)和繼承構(gòu)造函數(shù)這兩個(gè)重要的特性,本文主要介紹了C++11委托構(gòu)造函數(shù)和繼承構(gòu)造函數(shù)的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-06-06
  • C語言數(shù)據(jù)的存儲(chǔ)超詳細(xì)講解中篇練習(xí)

    C語言數(shù)據(jù)的存儲(chǔ)超詳細(xì)講解中篇練習(xí)

    使用編程語言進(jìn)行編程時(shí),需要用到各種變量來存儲(chǔ)各種信息。變量保留的是它所存儲(chǔ)的值的內(nèi)存位置。這意味著,當(dāng)您創(chuàng)建一個(gè)變量時(shí),就會(huì)在內(nèi)存中保留一些空間。您可能需要存儲(chǔ)各種數(shù)據(jù)類型的信息,操作系統(tǒng)會(huì)根據(jù)變量的數(shù)據(jù)類型,來分配內(nèi)存和決定在保留內(nèi)存中存儲(chǔ)什么
    2022-04-04
  • C語言從基礎(chǔ)到進(jìn)階全面講解數(shù)組

    C語言從基礎(chǔ)到進(jìn)階全面講解數(shù)組

    數(shù)組是一組有序的數(shù)據(jù)的集合,數(shù)組中元素類型相同,由數(shù)組名和下標(biāo)唯一地確定,數(shù)組中數(shù)據(jù)不僅數(shù)據(jù)類型相同,而且在計(jì)算機(jī)內(nèi)存里連續(xù)存放,地址編號(hào)最低的存儲(chǔ)單元存放數(shù)組的起始元素,地址編號(hào)最高的存儲(chǔ)單元存放數(shù)組的最后一個(gè)元素
    2022-05-05
  • C語言使用openSSL庫DES模塊實(shí)現(xiàn)加密功能詳解

    C語言使用openSSL庫DES模塊實(shí)現(xiàn)加密功能詳解

    這篇文章主要介紹了C語言使用openSSL庫DES模塊實(shí)現(xiàn)加密功能,簡單講解了DES加密的相關(guān)概念,并結(jié)合實(shí)例形式分析了DES加密的具體實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-05-05
  • C++編譯期字符串處理方法

    C++編譯期字符串處理方法

    這篇文章給大家介紹了C++編譯期字符串處理方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2026-03-03
  • C++實(shí)現(xiàn)高并發(fā)異步定時(shí)器

    C++實(shí)現(xiàn)高并發(fā)異步定時(shí)器

    這篇文章主要為大家詳細(xì)介紹了如何利用C++實(shí)現(xiàn)高并發(fā)異步定時(shí)器,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • C/C++?活動(dòng)預(yù)處理器詳解

    C/C++?活動(dòng)預(yù)處理器詳解

    預(yù)處理器是一些指令,指示編譯器在實(shí)際編譯之前所需完成的預(yù)處理,預(yù)處理的作用就是在代碼被編譯前對代碼做某些替換,這篇文章主要介紹了C/C++?活動(dòng)預(yù)處理器,需要的朋友可以參考下
    2022-11-11

最新評(píng)論

叶城县| 庄河市| 怀宁县| 雷州市| 鄂伦春自治旗| 邻水| 莱州市| 永昌县| 辽中县| 静安区| 汝南县| 康乐县| 新建县| 宁海县| 水富县| 乌鲁木齐县| 尉氏县| 渝中区| 海南省| 金堂县| 云和县| 溆浦县| 高淳县| 宁夏| 招远市| 曲靖市| 延吉市| 三江| 阿尔山市| 庆城县| 永春县| 连云港市| 高邮市| 和硕县| 定远县| 淅川县| 安龙县| 白沙| 朝阳县| 通化县| 恩平市|