├── .gitignore ├── 1.psd-png ├── 4.shuoGG_small - 副本.psd ├── 4.shuoGG_small.psd ├── checkBox.psd ├── checkbox_down.png ├── checkbox_hoverCheck.png ├── checkbox_hoverUncheck.png ├── checkbox_normal.png ├── close.png ├── closehover.png ├── closepress.png ├── down_arrow.png ├── maxsize.png ├── maxsizehover.png ├── maxsizepress.png ├── minsize.png ├── minsizehover.png ├── minsizepress.png ├── radioBtn.psd ├── radio_down.png ├── radio_hoverCheck.png ├── radio_hoverUncheck.png ├── radio_normal.png ├── resize.png ├── resizehover.png ├── resizepress.png └── titleBtn.psd ├── LICENSE ├── README.md └── python-version ├── MANIFEST.in ├── QCandyUi ├── CandyWindow.py ├── Titlebar.py ├── WindowWithTitleBar.py ├── __init__.py ├── candyUi │ ├── blue │ │ ├── checkbox_down.png │ │ ├── checkbox_hoverCheck.png │ │ ├── checkbox_hoverUncheck.png │ │ ├── checkbox_normal.png │ │ ├── close.png │ │ ├── closehover.png │ │ ├── closepress.png │ │ ├── down_arrow.png │ │ ├── maxsize.png │ │ ├── maxsizehover.png │ │ ├── maxsizepress.png │ │ ├── minsize.png │ │ ├── minsizehover.png │ │ ├── minsizepress.png │ │ ├── radio_down.png │ │ ├── radio_hoverCheck.png │ │ ├── radio_hoverUncheck.png │ │ ├── radio_normal.png │ │ ├── resize.png │ │ ├── resizehover.png │ │ └── resizepress.png │ ├── blueDeep │ │ ├── checkbox_down.png │ │ ├── checkbox_hoverCheck.png │ │ ├── checkbox_hoverUncheck.png │ │ ├── checkbox_normal.png │ │ ├── close.png │ │ ├── closehover.png │ │ ├── closepress.png │ │ ├── down_arrow.png │ │ ├── maxsize.png │ │ ├── maxsizehover.png │ │ ├── maxsizepress.png │ │ ├── minsize.png │ │ ├── minsizehover.png │ │ ├── minsizepress.png │ │ ├── radio_down.png │ │ ├── radio_hoverCheck.png │ │ ├── radio_hoverUncheck.png │ │ ├── radio_normal.png │ │ ├── resize.png │ │ ├── resizehover.png │ │ └── resizepress.png │ ├── blueGreen │ │ ├── checkbox_down.png │ │ ├── checkbox_hoverCheck.png │ │ ├── checkbox_hoverUncheck.png │ │ ├── checkbox_normal.png │ │ ├── close.png │ │ ├── closehover.png │ │ ├── closepress.png │ │ ├── down_arrow.png │ │ ├── maxsize.png │ │ ├── maxsizehover.png │ │ ├── maxsizepress.png │ │ ├── minsize.png │ │ ├── minsizehover.png │ │ ├── minsizepress.png │ │ ├── radio_down.png │ │ ├── radio_hoverCheck.png │ │ ├── radio_hoverUncheck.png │ │ ├── radio_normal.png │ │ ├── resize.png │ │ ├── resizehover.png │ │ └── resizepress.png │ ├── default │ │ ├── checkbox_down.png │ │ ├── checkbox_hoverCheck.png │ │ ├── checkbox_hoverUncheck.png │ │ ├── checkbox_normal.png │ │ ├── close.png │ │ ├── closehover.png │ │ ├── closepress.png │ │ ├── down_arrow.png │ │ ├── maxsize.png │ │ ├── maxsizehover.png │ │ ├── maxsizepress.png │ │ ├── minsize.png │ │ ├── minsizehover.png │ │ ├── minsizepress.png │ │ ├── radio_down.png │ │ ├── radio_hoverCheck.png │ │ ├── radio_hoverUncheck.png │ │ ├── radio_normal.png │ │ ├── resize.png │ │ ├── resizehover.png │ │ └── resizepress.png │ ├── pink │ │ ├── checkbox_down.png │ │ ├── checkbox_hoverCheck.png │ │ ├── checkbox_hoverUncheck.png │ │ ├── checkbox_normal.png │ │ ├── close.png │ │ ├── closehover.png │ │ ├── closepress.png │ │ ├── down_arrow.png │ │ ├── maxsize.png │ │ ├── maxsizehover.png │ │ ├── maxsizepress.png │ │ ├── minsize.png │ │ ├── minsizehover.png │ │ ├── minsizepress.png │ │ ├── radio_down.png │ │ ├── radio_hoverCheck.png │ │ ├── radio_hoverUncheck.png │ │ ├── radio_normal.png │ │ ├── resize.png │ │ ├── resizehover.png │ │ └── resizepress.png │ └── theme.json ├── qss_getter.py ├── resourse_cfg.py └── simple_qss.py ├── deployPyPi.bat ├── dist ├── QCandyUi-0.14-py3-none-any.whl ├── QCandyUi-0.14.tar.gz ├── QCandyUi-0.15-py3-none-any.whl └── QCandyUi-0.15.tar.gz ├── install_whl.bat └── setup.py /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | __pycache__ 3 | -------------------------------------------------------------------------------- /1.psd-png/4.shuoGG_small - 副本.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/1.psd-png/4.shuoGG_small - 副本.psd -------------------------------------------------------------------------------- /1.psd-png/4.shuoGG_small.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/1.psd-png/4.shuoGG_small.psd -------------------------------------------------------------------------------- /1.psd-png/checkBox.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/1.psd-png/checkBox.psd -------------------------------------------------------------------------------- /1.psd-png/checkbox_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/1.psd-png/checkbox_down.png -------------------------------------------------------------------------------- /1.psd-png/checkbox_hoverCheck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/1.psd-png/checkbox_hoverCheck.png -------------------------------------------------------------------------------- /1.psd-png/checkbox_hoverUncheck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/1.psd-png/checkbox_hoverUncheck.png -------------------------------------------------------------------------------- /1.psd-png/checkbox_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/1.psd-png/checkbox_normal.png -------------------------------------------------------------------------------- /1.psd-png/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/1.psd-png/close.png -------------------------------------------------------------------------------- /1.psd-png/closehover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/1.psd-png/closehover.png -------------------------------------------------------------------------------- /1.psd-png/closepress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/1.psd-png/closepress.png -------------------------------------------------------------------------------- /1.psd-png/down_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/1.psd-png/down_arrow.png -------------------------------------------------------------------------------- /1.psd-png/maxsize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/1.psd-png/maxsize.png -------------------------------------------------------------------------------- /1.psd-png/maxsizehover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/1.psd-png/maxsizehover.png -------------------------------------------------------------------------------- /1.psd-png/maxsizepress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/1.psd-png/maxsizepress.png -------------------------------------------------------------------------------- /1.psd-png/minsize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/1.psd-png/minsize.png -------------------------------------------------------------------------------- /1.psd-png/minsizehover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/1.psd-png/minsizehover.png -------------------------------------------------------------------------------- /1.psd-png/minsizepress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/1.psd-png/minsizepress.png -------------------------------------------------------------------------------- /1.psd-png/radioBtn.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/1.psd-png/radioBtn.psd -------------------------------------------------------------------------------- /1.psd-png/radio_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/1.psd-png/radio_down.png -------------------------------------------------------------------------------- /1.psd-png/radio_hoverCheck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/1.psd-png/radio_hoverCheck.png -------------------------------------------------------------------------------- /1.psd-png/radio_hoverUncheck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/1.psd-png/radio_hoverUncheck.png -------------------------------------------------------------------------------- /1.psd-png/radio_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/1.psd-png/radio_normal.png -------------------------------------------------------------------------------- /1.psd-png/resize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/1.psd-png/resize.png -------------------------------------------------------------------------------- /1.psd-png/resizehover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/1.psd-png/resizehover.png -------------------------------------------------------------------------------- /1.psd-png/resizepress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/1.psd-png/resizepress.png -------------------------------------------------------------------------------- /1.psd-png/titleBtn.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/1.psd-png/titleBtn.psd -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 shuoGG 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # QCandy-UI 2 | 方便快速地美化Qt应用, 糖果色扁平化UI 3 | 4 | # 安装 5 | * pip install QCandyUi 6 | 7 | # 使用方法 8 | * 仅需在需要美化的窗口类上加上@colorful装饰器即可 9 | * 也可以调用CandyWindow.creatWindow()返回经美化的QWidget (推荐用这种) 10 | 11 | # 实例 12 | * 原味窗口 13 | ```python 14 | # 窗口类为TcpUdpSerialPortTool 15 | # TcpUdpSerialPortTool.py 16 | class TcpUdpSerialPortTool(QWidget): 17 | ... ... 18 | 19 | # main.py 20 | app = QApplication(sys.argv) 21 | mainWindow = TcpUdpSerialportTool.TcpUdpSerialPortTool() 22 | mainWindow.show() 23 | sys.exit(app.exec_()) 24 | ``` 25 | ![norm](https://i.loli.net/2018/07/04/5b3c404bde41f.png) 26 | 27 | 28 | * 加了蓝绿色主题的窗口(使用@colorful) 29 | ```python 30 | # 窗口类为TcpUdpSerialPortTool 31 | # TcpUdpSerialPortTool.py 32 | from QCandyUi.CandyWindow import colorful 33 | 34 | @colorful('blueGreen') 35 | class TcpUdpSerialPortTool(QWidget): 36 | ... ... 37 | 38 | # main.py 39 | app = QApplication(sys.argv) 40 | mainWindow = TcpUdpSerialportTool.TcpUdpSerialPortTool() 41 | mainWindow.show() 42 | sys.exit(app.exec_()) 43 | ``` 44 | ![blueGreen](https://i.loli.net/2018/07/04/5b3c412bc2977.png) 45 | 46 | 47 | * 加了蓝色主题的窗口(使用@colorful) 48 | ```python 49 | # 窗口类为TcpUdpSerialPortTool 50 | # TcpUdpSerialPortTool.py 51 | from QCandyUi.CandyWindow import colorful 52 | 53 | @colorful('blue') 54 | class TcpUdpSerialPortTool(QWidget): 55 | ... ... 56 | 57 | # main.py 58 | app = QApplication(sys.argv) 59 | mainWindow = TcpUdpSerialportTool.TcpUdpSerialPortTool() 60 | mainWindow.show() 61 | sys.exit(app.exec_()) 62 | ``` 63 | ![blue](https://i.loli.net/2018/07/10/5b44991103a87.png) 64 | * 加了蓝色主题的窗口(使用CandyWindow.createWindow) 65 | ```python 66 | from QCandyUi import CandyWindow 67 | 68 | mainWindow = TcpUdpSerialportTool.TcpUdpSerialPortTool() 69 | mainWindow = CandyWindow.createWindow(mainWindow, 'blue') 70 | mainWindow.show() 71 | ``` 72 |
73 | 74 | # Ps: 75 | * 想自己新增颜色主题可以在theme.json里面配, 按照theme.json里的格式配即可 76 | * py模块的安装包在/python-version/dist中 77 | -------------------------------------------------------------------------------- /python-version/MANIFEST.in: -------------------------------------------------------------------------------- 1 | include *.png 2 | include *.json 3 | include QCandyUi/candyUi *.png 4 | recursive-include QCandyUi *.png *.json -------------------------------------------------------------------------------- /python-version/QCandyUi/CandyWindow.py: -------------------------------------------------------------------------------- 1 | import json 2 | import os 3 | 4 | from PyQt5.QtGui import QIcon 5 | from PyQt5.QtWidgets import qApp 6 | 7 | from . import WindowWithTitleBar 8 | from . import simple_qss 9 | 10 | """ 11 | # 示例1和2最终效果一样, 不过推荐用1的方法 12 | - 使用示例1: 13 | app = QApplication(sys.argv) 14 | w = CandyWindow.createWindow(LogViewer(), 'Log Viewer', 'myicon.ico', 'blueGreen') 15 | w.show() 16 | sys.exit(app.exec_()) 17 | 18 | 19 | - 使用示例2: 20 | eg: 21 | @colorful('blueGreen') 22 | class LogViewer(QWidget): 23 | ... ... 24 | """ 25 | RESOURCE_DIR = 'candyUi' 26 | 27 | 28 | def colorful(theme): 29 | """ 30 | 彩色主题装饰, 可以装饰所有的QWidget类使其直接拥有彩色主题 (带Titlebar) 31 | :param theme: 主题名, 与theme.json里面的主题名对应 32 | :return: 33 | """ 34 | 35 | def new_func(aClass): 36 | def on_call(*args, **kargs): 37 | src_widget = aClass(*args, **kargs) 38 | dst_widget = createWindow(src_widget, theme) 39 | return dst_widget 40 | 41 | return on_call 42 | 43 | return new_func 44 | 45 | 46 | def createWindow(mainWidget, theme=None, title='CandySweet', ico_path=''): 47 | """ 48 | 快速创建彩色窗 (带TitleBar) 49 | :param mainWidget: 50 | :param theme: 51 | :param title: 52 | :param ico_path: 53 | :return: 54 | """ 55 | coolWindow = WindowWithTitleBar.WindowWithTitleBar(mainWidget) 56 | coolWindow.setWindowTitle(title) 57 | coolWindow.setWindowIcon(QIcon(ico_path)) 58 | setTheme(theme) 59 | return coolWindow 60 | 61 | 62 | def setTheme(theme): 63 | """ 64 | 根据theme.json设置主题的qss (只改样式不加Titlebar) 65 | :param theme: 66 | :return: 67 | """ 68 | THEME_FILE = RESOURCE_DIR + '/theme.json' 69 | if os.path.isfile(THEME_FILE): 70 | path = THEME_FILE 71 | else: 72 | path = (os.path.split(__file__)[0] + '\\' + THEME_FILE).replace('\\', '/') 73 | tDict = json.load(open(path)) 74 | # theme.json的theme的优先级比setTheme中的theme的优先级高 75 | configTheme = tDict.get('theme') 76 | if configTheme is None or configTheme == '' or tDict.get(configTheme) is None: 77 | colorDict = tDict.get(theme) 78 | else: 79 | colorDict = tDict.get(configTheme) 80 | if colorDict is None: 81 | qss = simple_qss.getDefaultQss() 82 | else: 83 | qss = simple_qss.getQss(colorDict['fontLight'], colorDict['fontDark'], colorDict['normal'], colorDict['light'], 84 | colorDict['deep'], colorDict['disLight'], colorDict['disDark'], theme) 85 | qApp.setStyleSheet(qss) 86 | -------------------------------------------------------------------------------- /python-version/QCandyUi/Titlebar.py: -------------------------------------------------------------------------------- 1 | import win32gui 2 | 3 | import win32con 4 | from PyQt5.Qt import QSizePolicy 5 | from PyQt5.QtCore import QEvent, QSize, pyqtSlot 6 | from PyQt5.QtWidgets import QLabel, QPushButton, QHBoxLayout, QApplication, QWidget 7 | 8 | from .resourse_cfg import * 9 | 10 | 11 | class Titlebar(QWidget): 12 | # 默认基础样式参数 13 | TITLE_TEXT_COLOR = "white" 14 | BGD_COLOR = "#28AAAA" 15 | TITLEBAR_HEIGHT = 30 16 | ICON_SIZE = QSize(20, 20) 17 | MIN_BUTT_SIZE = QSize(27, 22) 18 | MAX_BUTT_SIZE = QSize(27, 22) 19 | CLOSE_BUTT_SIZE = QSize(27, 22) 20 | TITLE_LABEL_NAME = "Titlebar_titleLabel" 21 | BACKGROUND_LABEL_NAME = "Titlebar_backgroundLabel" 22 | MIN_BUTT_NAME = "Titlebar_minimizeButton" 23 | MAX_BUTT_NAME = "Titlebar_maximizeButton" 24 | CLOSE_BUTT_NAME = "Titlebar_closeButton" 25 | THEME_IMG_DIR = 'default' 26 | 27 | def __init__(self, parent): 28 | super(Titlebar, self).__init__(parent) 29 | self.parentwidget = parent 30 | self.setFixedHeight(Titlebar.TITLEBAR_HEIGHT) 31 | self.m_pBackgroundLabel = QLabel(self) 32 | self.m_pIconLabel = QLabel(self) 33 | self.m_pTitleLabel = QLabel(self) 34 | self.m_pMinimizeButton = QPushButton(self) 35 | self.m_pMaximizeButton = QPushButton(self) 36 | self.m_pCloseButton = QPushButton(self) 37 | self.m_pIconLabel.setFixedSize(Titlebar.ICON_SIZE) 38 | self.m_pIconLabel.setScaledContents(True) 39 | self.m_pTitleLabel.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) 40 | self.m_pBackgroundLabel.setObjectName(Titlebar.BACKGROUND_LABEL_NAME) 41 | # 三大金刚按钮大小 42 | self.m_pMinimizeButton.setFixedSize(Titlebar.MIN_BUTT_SIZE) 43 | self.m_pMaximizeButton.setFixedSize(Titlebar.MAX_BUTT_SIZE) 44 | self.m_pCloseButton.setFixedSize(Titlebar.CLOSE_BUTT_SIZE) 45 | # 统一设置ObjName 46 | self.m_pTitleLabel.setObjectName(Titlebar.TITLE_LABEL_NAME) 47 | self.m_pBackgroundLabel.resize(self.parentwidget.width(), Titlebar.TITLEBAR_HEIGHT) 48 | self.m_pMinimizeButton.setObjectName(Titlebar.MIN_BUTT_NAME) 49 | self.m_pMaximizeButton.setObjectName(Titlebar.MAX_BUTT_NAME) 50 | self.m_pCloseButton.setObjectName(Titlebar.CLOSE_BUTT_NAME) 51 | # 三大金刚按钮图片设置 52 | self.setButtonImages() 53 | # 布局 54 | pLayout = QHBoxLayout(self) 55 | pLayout.addWidget(self.m_pIconLabel) 56 | pLayout.addSpacing(5) 57 | pLayout.addWidget(self.m_pTitleLabel) 58 | pLayout.addWidget(self.m_pMinimizeButton) 59 | pLayout.addWidget(self.m_pMaximizeButton) 60 | pLayout.addWidget(self.m_pCloseButton) 61 | pLayout.setSpacing(0) 62 | pLayout.setContentsMargins(5, 0, 5, 0) 63 | self.setLayout(pLayout) 64 | # 信号连接 65 | self.m_pMinimizeButton.clicked.connect(self.__slot_onclicked) 66 | self.m_pMaximizeButton.clicked.connect(self.__slot_onclicked) 67 | self.m_pCloseButton.clicked.connect(self.__slot_onclicked) 68 | # 设置默认样式(bar的字颜色和背景颜色) 69 | # self.setTitleBarStyle(Titlebar.BGD_COLOR, Titlebar.TITLE_TEXT_COLOR) 70 | 71 | def setMaximumEnable(self, isenable): 72 | self.m_pMaximizeButton.setEnabled(isenable) 73 | 74 | def setTitleBarStyle(self, backgroundColor, textColor): 75 | # 标题字体颜色 76 | self.m_pTitleLabel.setStyleSheet("font-size:13px;margin-bottom:0px;color:%s" % (textColor)) 77 | # 标题栏背景颜色 78 | self.m_pBackgroundLabel.setStyleSheet("background:%s" % (backgroundColor)) 79 | 80 | def setButtonImages(self): 81 | # 三大金刚按钮Ui设置 82 | self.m_pCloseButton.setStyleSheet( 83 | self.__getButtonImgQss(IMAGE_ROOT + Titlebar.THEME_IMG_DIR + "/", IMG_CLOSE_NORM, IMG_CLOSE_HOVER, IMG_CLOSE_PRESS, IMG_CLOSE_PRESS)) 84 | self.m_pMinimizeButton.setStyleSheet( 85 | self.__getButtonImgQss(IMAGE_ROOT + Titlebar.THEME_IMG_DIR + "/", IMG_MIN_NORM, IMG_MIN_HOVER, IMG_MIN_PRESS, IMG_MIN_PRESS)) 86 | self.m_pMaximizeButton.setStyleSheet( 87 | self.__getButtonImgQss(IMAGE_ROOT + Titlebar.THEME_IMG_DIR + "/", IMG_MAX_NORM, IMG_MAX_HOVER, IMG_MAX_PRESS, IMG_MAX_PRESS)) 88 | 89 | def __getButtonImgQss(self, root, norm, hover, press, disable): 90 | qss = str() 91 | qss += "QPushButton{background:transparent; background-image:url(%s); border:none}" % ( 92 | root + norm) 93 | qss += "QPushButton:hover{background:transparent; background-image:url(%s)}" % ( 94 | root + hover) 95 | qss += "QPushButton:pressed{background:transparent; background-image:url(%s)}" % ( 96 | root + press) 97 | qss += "QPushButton:disabled{background:transparent; background-image:url(%s)}" % ( 98 | root + disable) 99 | return qss 100 | 101 | def mouseDoubleClickEvent(self, e): 102 | if self.m_pMaximizeButton.isEnabled(): 103 | self.m_pMaximizeButton.clicked.emit() # 双击全屏 104 | 105 | def mousePressEvent(self, e): 106 | """ 107 | 使窗口能被拖动 108 | :param e: 109 | :return: 110 | """ 111 | win32gui.ReleaseCapture() 112 | pWindow = self.window() 113 | if pWindow.isWindow(): 114 | win32gui.SendMessage(pWindow.winId(), win32con.WM_SYSCOMMAND, win32con.SC_MOVE + win32con.HTCAPTION, 0) 115 | e.ignore() 116 | 117 | def eventFilter(self, object, e): 118 | if e.type() == QEvent.WindowTitleChange: 119 | if object != None: 120 | self.m_pTitleLabel.setText(object.windowTitle()) 121 | return True 122 | if e.type() == QEvent.WindowIconChange: 123 | if object != None: 124 | icon = object.windowIcon() 125 | self.m_pIconLabel.setPixmap(icon.pixmap(self.m_pIconLabel.size())) 126 | return True 127 | if e.type() == QEvent.Resize: 128 | self.__updateMaxmize() 129 | self.__setTitleBarSize(self.parentwidget.width()) 130 | return True 131 | # 注意!这里self要加上!!!!!!!!! 132 | return QWidget.eventFilter(self, object, e) 133 | 134 | @pyqtSlot() 135 | def __slot_onclicked(self): 136 | pButton = self.sender() 137 | pWindow = self.window() 138 | if pWindow.isWindow(): 139 | if pButton.objectName() == Titlebar.MIN_BUTT_NAME: 140 | pWindow.showMinimized() 141 | elif pButton.objectName() == Titlebar.MAX_BUTT_NAME: 142 | if pWindow.isMaximized(): 143 | pWindow.showNormal() 144 | self.m_pMaximizeButton.setStyleSheet(self.__getButtonImgQss(IMAGE_ROOT + Titlebar.THEME_IMG_DIR + "/", IMG_MAX_NORM, IMG_MAX_HOVER, IMG_MAX_PRESS, IMG_MAX_PRESS)) 145 | else: 146 | pWindow.showMaximized() 147 | self.m_pMaximizeButton.setStyleSheet(self.__getButtonImgQss(IMAGE_ROOT + Titlebar.THEME_IMG_DIR + "/", IMG_RESIZE_NORM, IMG_RESIZE_HOVER, IMG_RESIZE_PRESS, IMG_RESIZE_PRESS)) 148 | elif pButton.objectName() == Titlebar.CLOSE_BUTT_NAME: 149 | pWindow.close() 150 | os._exit(0) 151 | 152 | def __updateMaxmize(self): 153 | pWindow = self.window() 154 | if pWindow.isWindow() == True: 155 | bMaximize = pWindow.isMaximized() 156 | if bMaximize == 0: 157 | self.m_pMaximizeButton.setProperty("maximizeProperty", "restore") 158 | else: 159 | self.m_pMaximizeButton.setProperty("maximizeProperty", "maximize") 160 | self.m_pMaximizeButton.setStyle(QApplication.style()) 161 | 162 | def __setTitleBarSize(self, width): 163 | self.m_pBackgroundLabel.resize(width, Titlebar.TITLEBAR_HEIGHT) 164 | -------------------------------------------------------------------------------- /python-version/QCandyUi/WindowWithTitleBar.py: -------------------------------------------------------------------------------- 1 | """ 2 | 3 | 本类使用的例子在下面, WindowWithTitleBar那里 4 | 5 | """ 6 | 7 | from PyQt5.QtCore import Qt, QRect, QPropertyAnimation, QEasingCurve 8 | from PyQt5.QtGui import QPainter, QBitmap, QColor 9 | from PyQt5.QtWidgets import QVBoxLayout, QWidget, QFrame, QLabel, QGraphicsOpacityEffect 10 | 11 | from .Titlebar import Titlebar 12 | 13 | # Stretch State 14 | NO_SELECT = 0, # 鼠标未进入下方矩形区域 15 | LEFT_TOP_RECT = 1 # 鼠标在左上角区域 16 | TOP_BORDER = 2 # 鼠标在上边框区域 17 | RIGHT_TOP_RECT = 3 # 鼠标在右上角区域 18 | RIGHT_BORDER = 4 # 鼠标在右边框区域 19 | RIGHT_BOTTOM_RECT = 5 # 鼠标在右下角区域 20 | BOTTOM_BORDER = 6 # 鼠标在下边框区域 21 | LEFT_BOTTOM_RECT = 7 # 鼠标在左下角区域 22 | LEFT_BORDER = 8 # 鼠标在左边框区域 23 | # 感知拉伸区域 24 | STRETCH_RECT_WIDTH = 4 25 | STRETCH_RECT_HEIGHT = 4 26 | 27 | 28 | class WindowWithTitleBar(QFrame): 29 | def __init__(self, mainwidget, parent=0): 30 | super(WindowWithTitleBar, self).__init__() 31 | self.setObjectName('WindowWithTitleBar') 32 | self.m_titlebar = Titlebar(self) 33 | self.initWidgetsAndPack(mainwidget, self.m_titlebar) 34 | self.initStretch() 35 | self.initTipLabel(mainwidget) 36 | 37 | def initTipLabel(self, parent): 38 | """ 39 | 消息提示标签 40 | :param parent: 41 | :return: 42 | """ 43 | self.tipLabel = QLabel(parent) 44 | self.tipLabel.setFixedSize(200, 40) 45 | self.tipLabel.setAlignment(Qt.AlignCenter) 46 | self.tipLabel.setWordWrap(True) 47 | self.tipLabel.setGeometry(QRect(int(self.width() / 2 - self.tipLabel.width() / 2), self.tipLabel.y(), 48 | self.tipLabel.width(), self.tipLabel.height())) 49 | self.tipLabel.hide() 50 | 51 | def showTip(self, text, color='#20c3ff'): 52 | if self.tipLabel is not None: 53 | self.tipLabel.show() 54 | self.tipLabel.setStyleSheet( 55 | "QLabel{background: %s;border:3px; color: #FFFFFF; border-radius: 5px}" % color) 56 | self.tipLabel.setText(text) 57 | eff = QGraphicsOpacityEffect(self) 58 | self.tipLabel.setGraphicsEffect(eff) 59 | self.animate = QPropertyAnimation(eff, "opacity") 60 | self.animate.setDuration(2000) 61 | self.animate.setStartValue(0.8) 62 | self.animate.setEndValue(0) 63 | self.animate.setEasingCurve(QEasingCurve.InCubic) 64 | self.animate.finished.connect(lambda: self.tipLabel.hide()) 65 | self.animate.start() 66 | 67 | def initWidgetsAndPack(self, mainwidget, titlebar): 68 | """ 69 | 将主体Widget和titleBar拼装起来 70 | :param mainwidget: 71 | :param titlebar: 72 | :return: 73 | """ 74 | self.mainwidget = mainwidget 75 | self.resize(mainwidget.width(), mainwidget.height() + Titlebar.TITLEBAR_HEIGHT) 76 | self.setWindowFlags(Qt.FramelessWindowHint | self.windowFlags()) 77 | self.installEventFilter(titlebar) 78 | # 布局: titlbar在上主窗体在下 79 | pLayout = QVBoxLayout(self) 80 | pLayout.addWidget(titlebar) 81 | pLayout.addWidget(mainwidget) 82 | pLayout.setSpacing(0) # 排列的几个widget为0间隔 83 | pLayout.setContentsMargins(0, 0, 0, 0) 84 | self.setLayout(pLayout) 85 | 86 | def initStretch(self): 87 | """ 88 | 初始化拉伸功能 89 | :return: 90 | """ 91 | self.setSupportStretch(True) 92 | self.m_isWindowMax = False 93 | self.m_stretchRectState = NO_SELECT 94 | self.m_isMousePressed = False 95 | self.setMinimumSize(self.mainwidget.minimumWidth(), self.mainwidget.minimumHeight() + Titlebar.TITLEBAR_HEIGHT) 96 | 97 | def getTitbar(self): 98 | return self.m_titlebar 99 | 100 | def setMinimumSize(self, width, height): 101 | """ 102 | 设置拉伸的最小Size 103 | :param width: 104 | :param height: 105 | :return: 106 | """ 107 | self.m_windowMinWidth = width 108 | self.m_windowMinHeight = height 109 | super(WindowWithTitleBar, self).setMinimumSize(width, height) 110 | 111 | def setWindowRadius(self, n_px): 112 | """ 113 | 圆边 114 | :param n_px: 弧度 115 | :return: 116 | """ 117 | objBitmap = QBitmap(self.size()) 118 | painter = QPainter(objBitmap) 119 | painter.setBrush(QColor(0, 0, 0)) 120 | painter.drawRoundedRect(self.rect(), n_px, n_px) 121 | self.setMask(objBitmap) 122 | 123 | def setBackgroundBorderColor(self, bgdcolor, bordercolor): 124 | self.setStyleSheet("WindowWithTitleBar{background:%s;border:3px solid %s}" % (bgdcolor, bordercolor)) 125 | 126 | def closeEvent(self, *args, **kwargs): 127 | self.mainwidget.close() 128 | 129 | def showEvent(self, event): 130 | self.calculateCurrentStrechRect() 131 | return super().showEvent(event) 132 | 133 | def calculateCurrentStrechRect(self): 134 | # 四个角Rect 135 | self.m_leftTopRect = QRect(0, 0, STRETCH_RECT_WIDTH, STRETCH_RECT_HEIGHT) 136 | self.m_leftBottomRect = QRect(0, self.height() - STRETCH_RECT_HEIGHT, STRETCH_RECT_WIDTH, STRETCH_RECT_WIDTH) 137 | self.m_rightTopRect = QRect(self.width() - STRETCH_RECT_WIDTH, 0, STRETCH_RECT_WIDTH, STRETCH_RECT_HEIGHT) 138 | self.m_rightBottomRect = QRect(self.width() - STRETCH_RECT_WIDTH, self.height() - STRETCH_RECT_HEIGHT, 139 | STRETCH_RECT_WIDTH, STRETCH_RECT_HEIGHT) 140 | # 四条边Rect 141 | self.m_topBorderRect = QRect(STRETCH_RECT_WIDTH, 0, self.width() - STRETCH_RECT_WIDTH * 2, STRETCH_RECT_HEIGHT) 142 | self.m_rightBorderRect = QRect(self.width() - STRETCH_RECT_WIDTH, STRETCH_RECT_HEIGHT, STRETCH_RECT_WIDTH, 143 | self.height() - STRETCH_RECT_HEIGHT * 2) 144 | self.m_bottomBorderRect = QRect(STRETCH_RECT_WIDTH, self.height() - STRETCH_RECT_HEIGHT, 145 | self.width() - STRETCH_RECT_WIDTH * 2, STRETCH_RECT_HEIGHT) 146 | self.m_leftBorderRect = QRect(0, STRETCH_RECT_HEIGHT, STRETCH_RECT_WIDTH, 147 | self.height() - STRETCH_RECT_HEIGHT * 2) 148 | 149 | def getCurrentStretchState(self, cursorPos): 150 | """ 151 | 根据鼠标的位置获取StretchState 152 | :param cursorPos: 153 | :return: 154 | """ 155 | if self.m_leftTopRect.contains(cursorPos): 156 | stretchState = LEFT_TOP_RECT 157 | elif self.m_rightTopRect.contains(cursorPos): 158 | stretchState = RIGHT_TOP_RECT 159 | elif self.m_rightBottomRect.contains(cursorPos): 160 | stretchState = RIGHT_BOTTOM_RECT 161 | elif self.m_leftBottomRect.contains(cursorPos): 162 | stretchState = LEFT_BOTTOM_RECT 163 | elif self.m_topBorderRect.contains(cursorPos): 164 | stretchState = TOP_BORDER 165 | elif self.m_rightBorderRect.contains(cursorPos): 166 | stretchState = RIGHT_BORDER 167 | elif self.m_bottomBorderRect.contains(cursorPos): 168 | stretchState = BOTTOM_BORDER 169 | elif self.m_leftBorderRect.contains(cursorPos): 170 | stretchState = LEFT_BORDER 171 | else: 172 | stretchState = NO_SELECT 173 | return stretchState 174 | 175 | def updateMouseStyle(self, stretchState): 176 | """ 177 | 根据stretchState刷新鼠标的样式 178 | :param stretchState: 179 | :return: 180 | """ 181 | if stretchState == NO_SELECT: 182 | self.setCursor(Qt.ArrowCursor) 183 | elif stretchState == LEFT_TOP_RECT: 184 | self.setCursor(Qt.SizeFDiagCursor) 185 | elif stretchState == RIGHT_BOTTOM_RECT: 186 | self.setCursor(Qt.SizeFDiagCursor) 187 | elif stretchState == TOP_BORDER: 188 | self.setCursor(Qt.SizeVerCursor) 189 | elif stretchState == BOTTOM_BORDER: 190 | self.setCursor(Qt.SizeVerCursor) 191 | elif stretchState == RIGHT_TOP_RECT: 192 | self.setCursor(Qt.SizeBDiagCursor) 193 | elif stretchState == LEFT_BOTTOM_RECT: 194 | self.setCursor(Qt.SizeBDiagCursor) 195 | elif stretchState == LEFT_BORDER: 196 | self.setCursor(Qt.SizeHorCursor) 197 | elif stretchState == RIGHT_BORDER: 198 | self.setCursor(Qt.SizeHorCursor) 199 | else: 200 | self.setCursor(Qt.ArrowCursor) 201 | 202 | def mouseMoveEvent(self, event): 203 | """ 204 | 重写mouseMoveEvent事件,用于获取当前鼠标的位置,将位置传递给getCurrentStretchState方法, 205 | 得到当前鼠标的状态,然后调用updateMouseStyle对鼠标的样式进行更新 206 | :param event: 207 | :return: 208 | """ 209 | # 如果窗口最大化是不能拉伸的 210 | # 也不用更新鼠标样式 211 | if (self.m_isWindowMax): 212 | return super().mouseMoveEvent(event) 213 | # 如果当前鼠标未按下,则根据当前鼠标的位置更新鼠标的状态及样式 214 | if not self.m_isMousePressed: 215 | cursorPos = event.pos() 216 | # 根据当前鼠标的位置显示不同的样式 217 | self.m_stretchRectState = self.getCurrentStretchState(cursorPos) 218 | self.updateMouseStyle(self.m_stretchRectState) 219 | # 如果当前鼠标左键已经按下,则记录下第二个点的位置,并更新窗口的大小 220 | else: 221 | self.m_endPoint = self.mapToGlobal(event.pos()) 222 | self.updateWindowSize() 223 | return super().mouseMoveEvent(event) 224 | 225 | def mousePressEvent(self, event): 226 | # 当前鼠标进入了以上指定的8个区域,并且是左键按下时才开始进行窗口拉伸 227 | if (self.m_stretchRectState != NO_SELECT and event.button() == Qt.LeftButton): 228 | self.m_isMousePressed = True 229 | # 记录下当前鼠标位置,为后面计算拉伸位置 230 | self.m_startPoint = self.mapToGlobal(event.pos()) 231 | # 保存下拉伸前的窗口位置及大小 232 | self.m_windowRectBeforeStretch = QRect(self.geometry().x(), self.geometry().y(), self.geometry().width(), 233 | self.geometry().height()) 234 | return super().mousePressEvent(event) 235 | 236 | def mouseReleaseEvent(self, event): 237 | """ 238 | 鼠标松开后意味之窗口拉伸结束,置标志位,并且重新计算用于拉伸的8个区域Rect 239 | :param event: 240 | :return: 241 | """ 242 | self.m_isMousePressed = False 243 | self.calculateCurrentStrechRect() 244 | return super().mouseReleaseEvent(event) 245 | 246 | def updateWindowSize(self): 247 | """ 248 | 拉伸窗口过程中,根据记录的坐标更新窗口大小 249 | :return: 250 | """ 251 | windowRect = QRect(self.m_windowRectBeforeStretch.x(), self.m_windowRectBeforeStretch.y(), 252 | self.m_windowRectBeforeStretch.width(), self.m_windowRectBeforeStretch.height()) 253 | delValue_X = self.m_startPoint.x() - self.m_endPoint.x() 254 | delValue_Y = self.m_startPoint.y() - self.m_endPoint.y() 255 | if self.m_stretchRectState == LEFT_BORDER: 256 | topLeftPoint = windowRect.topLeft() 257 | topLeftPoint.setX(topLeftPoint.x() - delValue_X) 258 | windowRect.setTopLeft(topLeftPoint) 259 | elif self.m_stretchRectState == RIGHT_BORDER: 260 | bottomRightPoint = windowRect.bottomRight() 261 | bottomRightPoint.setX(bottomRightPoint.x() - delValue_X) 262 | windowRect.setBottomRight(bottomRightPoint) 263 | elif self.m_stretchRectState == TOP_BORDER: 264 | topLeftPoint = windowRect.topLeft() 265 | topLeftPoint.setY(topLeftPoint.y() - delValue_Y) 266 | windowRect.setTopLeft(topLeftPoint) 267 | elif self.m_stretchRectState == BOTTOM_BORDER: 268 | bottomRightPoint = windowRect.bottomRight() 269 | bottomRightPoint.setY(bottomRightPoint.y() - delValue_Y) 270 | windowRect.setBottomRight(bottomRightPoint) 271 | elif self.m_stretchRectState == LEFT_TOP_RECT: 272 | topLeftPoint = windowRect.topLeft() 273 | topLeftPoint.setX(topLeftPoint.x() - delValue_X) 274 | topLeftPoint.setY(topLeftPoint.y() - delValue_Y) 275 | windowRect.setTopLeft(topLeftPoint) 276 | elif self.m_stretchRectState == RIGHT_TOP_RECT: 277 | topRightPoint = windowRect.topRight() 278 | topRightPoint.setX(topRightPoint.x() - delValue_X) 279 | topRightPoint.setY(topRightPoint.y() - delValue_Y) 280 | windowRect.setTopRight(topRightPoint) 281 | elif self.m_stretchRectState == RIGHT_BOTTOM_RECT: 282 | bottomRightPoint = windowRect.bottomRight() 283 | bottomRightPoint.setX(bottomRightPoint.x() - delValue_X) 284 | bottomRightPoint.setY(bottomRightPoint.y() - delValue_Y) 285 | windowRect.setBottomRight(bottomRightPoint) 286 | elif self.m_stretchRectState == LEFT_BOTTOM_RECT: 287 | bottomLeftPoint = windowRect.bottomLeft() 288 | bottomLeftPoint.setX(bottomLeftPoint.x() - delValue_X) 289 | bottomLeftPoint.setY(bottomLeftPoint.y() - delValue_Y) 290 | windowRect.setBottomLeft(bottomLeftPoint) 291 | # 避免宽或高为零窗口显示有误,这里给窗口设置最小拉伸高度、宽度 292 | if windowRect.width() < self.m_windowMinWidth: 293 | windowRect.setLeft(self.geometry().left()) 294 | windowRect.setWidth(self.m_windowMinWidth) 295 | if windowRect.height() < self.m_windowMinHeight: 296 | windowRect.setTop(self.geometry().top()) 297 | windowRect.setHeight(self.m_windowMinHeight) 298 | self.setGeometry(windowRect) 299 | 300 | def setSupportStretch(self, isSupportStretch): 301 | """ 302 | 设置当前窗口是否支持拉伸 303 | :param isSupportStretch: 304 | :return: 305 | """ 306 | # 因为需要在鼠标未按下的情况下通过mouseMoveEvent事件捕捉鼠标位置,所以需要设置setMouseTracking为True(如果窗口支持拉伸) 307 | self.m_isSupportStretch = isSupportStretch 308 | self.setMouseTracking(isSupportStretch) 309 | # 这里对子控件也进行了设置,是因为如果不对子控件设置,当鼠标移动到子控件上时,不会发送mouseMoveEvent事件,也就获取不到当前鼠标位置,无法判断鼠标状态及显示样式了。 310 | widgetList = self.findChildren(QWidget) 311 | for widget in widgetList: 312 | widget.setMouseTracking(isSupportStretch) 313 | if (self.m_titlebar is not None): 314 | # titleBar同理,也需要对自己及子控件进行调用setMouseTracking进行设置,见上方注释 315 | # self.titleBar.setSupportStretch(isSupportStretch) 316 | pass 317 | 318 | def getSupportStretch(self): 319 | """ 320 | 返回当前窗口是否支持拉伸 321 | :return: 322 | """ 323 | return self.m_isSupportStretch 324 | 325 | def setMaxEnable(self, isEnable): 326 | """ 327 | 最大化开闭 328 | :param isEnable 329 | """ 330 | self.m_titlebar.setMaximumEnable(isEnable) 331 | -------------------------------------------------------------------------------- /python-version/QCandyUi/__init__.py: -------------------------------------------------------------------------------- 1 | from . import simple_qss 2 | from . import qss_getter 3 | from . import WindowWithTitleBar 4 | from . import Titlebar 5 | from . import resourse_cfg 6 | from . import CandyWindow -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blue/checkbox_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blue/checkbox_down.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blue/checkbox_hoverCheck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blue/checkbox_hoverCheck.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blue/checkbox_hoverUncheck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blue/checkbox_hoverUncheck.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blue/checkbox_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blue/checkbox_normal.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blue/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blue/close.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blue/closehover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blue/closehover.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blue/closepress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blue/closepress.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blue/down_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blue/down_arrow.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blue/maxsize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blue/maxsize.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blue/maxsizehover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blue/maxsizehover.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blue/maxsizepress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blue/maxsizepress.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blue/minsize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blue/minsize.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blue/minsizehover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blue/minsizehover.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blue/minsizepress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blue/minsizepress.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blue/radio_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blue/radio_down.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blue/radio_hoverCheck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blue/radio_hoverCheck.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blue/radio_hoverUncheck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blue/radio_hoverUncheck.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blue/radio_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blue/radio_normal.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blue/resize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blue/resize.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blue/resizehover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blue/resizehover.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blue/resizepress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blue/resizepress.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueDeep/checkbox_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueDeep/checkbox_down.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueDeep/checkbox_hoverCheck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueDeep/checkbox_hoverCheck.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueDeep/checkbox_hoverUncheck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueDeep/checkbox_hoverUncheck.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueDeep/checkbox_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueDeep/checkbox_normal.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueDeep/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueDeep/close.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueDeep/closehover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueDeep/closehover.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueDeep/closepress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueDeep/closepress.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueDeep/down_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueDeep/down_arrow.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueDeep/maxsize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueDeep/maxsize.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueDeep/maxsizehover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueDeep/maxsizehover.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueDeep/maxsizepress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueDeep/maxsizepress.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueDeep/minsize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueDeep/minsize.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueDeep/minsizehover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueDeep/minsizehover.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueDeep/minsizepress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueDeep/minsizepress.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueDeep/radio_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueDeep/radio_down.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueDeep/radio_hoverCheck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueDeep/radio_hoverCheck.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueDeep/radio_hoverUncheck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueDeep/radio_hoverUncheck.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueDeep/radio_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueDeep/radio_normal.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueDeep/resize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueDeep/resize.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueDeep/resizehover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueDeep/resizehover.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueDeep/resizepress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueDeep/resizepress.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueGreen/checkbox_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueGreen/checkbox_down.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueGreen/checkbox_hoverCheck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueGreen/checkbox_hoverCheck.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueGreen/checkbox_hoverUncheck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueGreen/checkbox_hoverUncheck.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueGreen/checkbox_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueGreen/checkbox_normal.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueGreen/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueGreen/close.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueGreen/closehover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueGreen/closehover.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueGreen/closepress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueGreen/closepress.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueGreen/down_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueGreen/down_arrow.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueGreen/maxsize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueGreen/maxsize.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueGreen/maxsizehover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueGreen/maxsizehover.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueGreen/maxsizepress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueGreen/maxsizepress.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueGreen/minsize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueGreen/minsize.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueGreen/minsizehover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueGreen/minsizehover.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueGreen/minsizepress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueGreen/minsizepress.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueGreen/radio_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueGreen/radio_down.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueGreen/radio_hoverCheck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueGreen/radio_hoverCheck.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueGreen/radio_hoverUncheck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueGreen/radio_hoverUncheck.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueGreen/radio_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueGreen/radio_normal.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueGreen/resize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueGreen/resize.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueGreen/resizehover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueGreen/resizehover.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/blueGreen/resizepress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/blueGreen/resizepress.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/default/checkbox_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/default/checkbox_down.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/default/checkbox_hoverCheck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/default/checkbox_hoverCheck.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/default/checkbox_hoverUncheck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/default/checkbox_hoverUncheck.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/default/checkbox_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/default/checkbox_normal.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/default/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/default/close.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/default/closehover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/default/closehover.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/default/closepress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/default/closepress.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/default/down_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/default/down_arrow.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/default/maxsize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/default/maxsize.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/default/maxsizehover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/default/maxsizehover.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/default/maxsizepress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/default/maxsizepress.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/default/minsize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/default/minsize.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/default/minsizehover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/default/minsizehover.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/default/minsizepress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/default/minsizepress.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/default/radio_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/default/radio_down.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/default/radio_hoverCheck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/default/radio_hoverCheck.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/default/radio_hoverUncheck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/default/radio_hoverUncheck.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/default/radio_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/default/radio_normal.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/default/resize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/default/resize.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/default/resizehover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/default/resizehover.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/default/resizepress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/default/resizepress.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/pink/checkbox_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/pink/checkbox_down.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/pink/checkbox_hoverCheck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/pink/checkbox_hoverCheck.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/pink/checkbox_hoverUncheck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/pink/checkbox_hoverUncheck.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/pink/checkbox_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/pink/checkbox_normal.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/pink/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/pink/close.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/pink/closehover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/pink/closehover.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/pink/closepress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/pink/closepress.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/pink/down_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/pink/down_arrow.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/pink/maxsize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/pink/maxsize.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/pink/maxsizehover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/pink/maxsizehover.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/pink/maxsizepress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/pink/maxsizepress.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/pink/minsize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/pink/minsize.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/pink/minsizehover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/pink/minsizehover.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/pink/minsizepress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/pink/minsizepress.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/pink/radio_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/pink/radio_down.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/pink/radio_hoverCheck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/pink/radio_hoverCheck.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/pink/radio_hoverUncheck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/pink/radio_hoverUncheck.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/pink/radio_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/pink/radio_normal.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/pink/resize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/pink/resize.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/pink/resizehover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/pink/resizehover.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/pink/resizepress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/QCandyUi/candyUi/pink/resizepress.png -------------------------------------------------------------------------------- /python-version/QCandyUi/candyUi/theme.json: -------------------------------------------------------------------------------- 1 | { 2 | "theme":"", 3 | "blueGreen": { 4 | "fontLight": "#FFFFFF", 5 | "fontDark": "#015F5F", 6 | "normal": "#33CCCC", 7 | "light": "#ECFEFE", 8 | "deep": "#28AAAA", 9 | "disLight": "#CCCCCC", 10 | "disDark": "#999999" 11 | }, 12 | "blueDeep": { 13 | "fontLight": "#FFFFFF", 14 | "fontDark": "#192e4b", 15 | "normal": "#4c73a8", 16 | "light": "#88b5f1", 17 | "deep": "#2e486c", 18 | "disLight": "#CCCCCC", 19 | "disDark": "#999999" 20 | }, 21 | "pink": { 22 | "fontLight": "#FFFFFF", 23 | "fontDark": "#bd158c", 24 | "normal": "#f7a5f0", 25 | "light": "#fbc2f6", 26 | "deep": "#fbaaf4", 27 | "disLight": "#CCCCCC", 28 | "disDark": "#999999" 29 | }, 30 | "blue": { 31 | "fontLight": "#FFFFFF", 32 | "fontDark": "#006a91", 33 | "normal": "#00aeed", 34 | "light": "#80ddfe", 35 | "deep": "#00aeed", 36 | "disLight": "#CCCCCC", 37 | "disDark": "#999999" 38 | } 39 | } -------------------------------------------------------------------------------- /python-version/QCandyUi/qss_getter.py: -------------------------------------------------------------------------------- 1 | # const color string 2 | WHITE = "#FFFFFF" 3 | BLACK = "#000000" 4 | RED = "#FF0000" 5 | GREEN = "#00FF00" 6 | BLUE = "#0000FF" 7 | PURPLE = "#B23AEE" 8 | WATCHET = "#1C86EE" 9 | LIGHTGREEN = "#ECFEFE" 10 | BLUEGREEN = "#33CCCC" 11 | DEEPBLUEGREEN = "#015F5F" 12 | DARKBLUEGREEN = "#28AAAA" 13 | GRAY = "#999999" 14 | LIGHTGRAY = "#CCCCCC" 15 | 16 | 17 | def getFontQss(fontname, fontcolor): 18 | return "QObject{font-family:%s;color:%s}" % (fontname, fontcolor) 19 | 20 | 21 | def getPushButtonQss(normalColor, normalTextColor, hoverColor, hoverTextColor, pressedColor, pressedTextColor, 22 | disableColor, disableTextColor): 23 | str1 = "QPushButton{padding:0px;border-radius:5px;color:%s;background:%s;border:2px solid %s;}" % ( 24 | normalTextColor, normalColor, normalColor) 25 | str2 = "QPushButton:hover{color:%s;background:%s;}" % (hoverTextColor, hoverColor) 26 | str3 = "QPushButton:pressed{color:%s;background:%s;}" % (pressedTextColor, pressedColor) 27 | str4 = "QPushButton:disabled{color:%s;background:%s;}" % (disableTextColor, disableColor) 28 | return str1 + str2 + str3 + str4 29 | 30 | 31 | def getLineeditQss(normalColor, focusColor): 32 | str1 = "QLineEdit{border-style:none;padding:2px;border-radius:5px;border:2px solid %s;selection-color:%s;selection-background-color:%s;}" % ( 33 | normalColor, WHITE, focusColor) 34 | str2 = "QLineEdit:focus{border:2px solid %s;}" % (focusColor) 35 | str3 = "QLineEdit:disabled{color:%s;}" % (LIGHTGRAY) 36 | return str1 + str2 + str3 37 | 38 | 39 | def getPlaineditQss(normalColor, focusColor): 40 | str1 = "QPlainTextEdit{border-style:none;padding:2px;border-radius:5px;border:2px solid %s;font-family:宋体;selection-color:%s;selection-background-color:%s}" % ( 41 | normalColor, WHITE, focusColor) 42 | str2 = "QPlainTextEdit:focus{border:2px solid %s;}" % (focusColor) 43 | return str1 + str2 44 | 45 | 46 | def getTextBrowerQss(normalColor, focusColor): 47 | str1 = "QTextBrowser{border-style:none;padding:2px;border-radius:5px;border:2px solid %s;font-family:宋体;selection-color:%s;selection-background-color:%s}" % ( 48 | normalColor, WHITE, focusColor) 49 | str2 = "QTextBrowser:focus{border:2px solid %s;}" % (focusColor) 50 | return str1 + str2 51 | 52 | 53 | def getComboxQss(backgroundColor, normalColor, focusColor, arrowimageurl): 54 | str1 = "QComboBox{background:%s;padding:2px;border-radius:5px;border:2px solid %s;}" % ( 55 | backgroundColor, normalColor) 56 | str2 = "QComboBox:focus{border:2px solid %s;}" % (focusColor) 57 | str3 = "QComboBox:on{border:2px solid %s;}" % (focusColor) 58 | str4 = "QComboBox:disabled{color:%s;}" % (LIGHTGRAY) 59 | str5 = "QComboBox::drop-down{border-style:solid;}" 60 | str6 = "QComboBox QAbstractItemView{border:2px solid %s;border-radius:5px;background:transparent;selection-background-color:%s;}" % ( 61 | focusColor, focusColor) 62 | str7 = "QComboBox::down-arrow{image:url(%s)}" % (arrowimageurl) 63 | return str1 + str2 + str3 + str4 + str5 + str6 + str7 64 | 65 | 66 | def getProgressBarQss(normalColor, chunkColor): 67 | barHeight = str(8) 68 | barRadius = str(8) 69 | str1 = "QProgressBar{font:9pt;height:%spx;background:%s;border-radius:%spx;text-align:center;border:1px solid %s;}" % ( 70 | barHeight, normalColor, barRadius, normalColor) 71 | str2 = "QProgressBar:chunk{border-radius:%spx;background-color:%s;margin:2px}" % (barRadius, chunkColor) 72 | return str1 + str2 73 | 74 | 75 | def getSliderQss(normalColor, grooveColor, handleColor): 76 | sliderHeight = str(8) 77 | sliderRadius = str(4) 78 | handleWidth = str(13) 79 | handleRadius = str(6) 80 | handleOffset = str(3) 81 | str1 = "QSlider::groove:horizontal,QSlider::add-page:horizontal{height:%spx;border-radius:%spx;background:%s;}" % ( 82 | sliderHeight, sliderRadius, normalColor) 83 | str2 = "QSlider::sub-page:horizontal{height:%spx;border-radius:%spx;background:%s;}" % ( 84 | sliderHeight, sliderRadius, grooveColor) 85 | str3 = "QSlider::handle:horizontal{width:%spx;margin-top:-%spx;margin-bottom:-%spx;border-radius:%spx;background:qradialgradient(spread:pad,cx:0.5,cy:0.5,radius:0.5,fx:0.5,fy:0.5,stop:0.6 #FFFFFF,stop:0.8 %s);}" % ( 86 | handleWidth, handleOffset, handleOffset, handleRadius, handleColor) 87 | return str1 + str2 + str3 88 | 89 | 90 | def getRadioButtonQss(normimageurl, downimageurl, normimageurlhover, downimageurlhover): 91 | str1 = "QRadioButton::indicator{width:15px;height:15px;}" 92 | str2 = "QRadioButton::indicator:unchecked{image: url(%s);}" % (normimageurl) 93 | str3 = "QRadioButton::indicator:checked{image: url(%s);}" % (downimageurl) 94 | str4 = "QRadioButton::indicator:checked:hover{image: url(%s);}" % (downimageurlhover) 95 | return str1 + str2 + str3 + str4 96 | 97 | 98 | def getCheckBoxQss(normimageurl, checkimageurl, normimageurlhover, checkimageurlhover): 99 | str1 = "QCheckBox::indicator{width:15px;height:15px;}" 100 | str2 = "QCheckBox::indicator:unchecked{image: url(%s);}" % (normimageurl) 101 | str3 = "QCheckBox::indicator:checked{image: url(%s);}" % (checkimageurl) 102 | str4 = "QCheckBox::indicator:unchecked:hover{image: url(%s);}" % (normimageurlhover) 103 | str5 = "QCheckBox::indicator:checked:hover{image: url(%s);}" % (checkimageurlhover) 104 | return str1 + str2 + str3 + str4 + str5 105 | 106 | 107 | def getTabWidgetQss(normalTabColor, normalTabTextColor, tabBorderColor): 108 | str1 = "QTabWidget{color:%s; background:%s;}" % (normalTabTextColor, normalTabColor) 109 | str2 = "QTabWidget::tab-bar{left:5px}" 110 | str3 = "QTabBar::tab{color:%s; background:%s;width:100px;height:25px;border:2px solid %s;border-radius:2px}" % ( 111 | normalTabTextColor, normalTabColor, tabBorderColor) 112 | str4 = "QTabBar::tab:hover{color:%s; background:%s;}" % (normalTabColor, normalTabTextColor) 113 | str5 = "QTabBar::tab:selected{color:%s; background:%s;}" % (normalTabColor, normalTabTextColor) 114 | return str1 + str3 + str4 + str5 115 | 116 | 117 | def getScrollbarQss(handlebarcolor): 118 | str1 = "QScrollBar{background:transparent;width:10px;padding-top:11px;padding-bottom:11px}" 119 | str2 = "QScrollBar::handle{background:%s;border-radius:5px;min-height:10px}" % (handlebarcolor) 120 | str3 = "QScrollBar::handle:pressed{background:%s}" % (GRAY) 121 | return str1 + str2 + str3 122 | -------------------------------------------------------------------------------- /python-version/QCandyUi/resourse_cfg.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | # 这些图片路径是相对main.py的, 而不是相对本py文件的 4 | # 下面这些图片资源是TitleBar的 5 | IMG_MIN_NORM = "minsize.png" 6 | IMG_MIN_HOVER = "minsizehover.png" 7 | IMG_MIN_PRESS = "minsizepress.png" 8 | IMG_MAX_NORM = "maxsize.png" 9 | IMG_MAX_HOVER = "maxsizehover.png" 10 | IMG_MAX_PRESS = "maxsizepress.png" 11 | IMG_RESIZE_NORM = "resize.png" 12 | IMG_RESIZE_HOVER = "resizehover.png" 13 | IMG_RESIZE_PRESS = "resizepress.png" 14 | IMG_CLOSE_NORM = "close.png" 15 | IMG_CLOSE_HOVER = "closehover.png" 16 | IMG_CLOSE_PRESS = "closepress.png" 17 | 18 | # 资源路径: 相对路径没找到就去安装路径下找 19 | IMAGE_ROOT = './candyUi/' 20 | if not os.path.exists(IMAGE_ROOT): 21 | IMAGE_ROOT = (os.path.split(__file__)[0] + "\\candyUi\\").replace('\\', '/') 22 | -------------------------------------------------------------------------------- /python-version/QCandyUi/simple_qss.py: -------------------------------------------------------------------------------- 1 | from . import qss_getter as Qss 2 | from .Titlebar import Titlebar 3 | from .resourse_cfg import * 4 | 5 | 6 | def getDefaultQss(): 7 | """ 8 | 默认主题 9 | :return: 10 | """ 11 | # fontLight, fontDark, normal, light, deep, disLight, disDark 12 | return getQss(Qss.WHITE, Qss.DEEPBLUEGREEN, Qss.BLUEGREEN, Qss.LIGHTGREEN, Qss.DARKBLUEGREEN, Qss.LIGHTGRAY, Qss.GRAY, "default") 13 | 14 | 15 | def getQss(fontLight, fontDark, normal, light, deep, disLight, disDark, themeImgDir): 16 | """ 17 | 通用组件的Qss + CandyBar的Qss 18 | :param fontLight: 19 | :param fontDark: 20 | :param normal: 21 | :param light: 22 | :param deep: 23 | :param disLight: 24 | :param disDark: 25 | :param themeImgDir: 26 | :return: 27 | """ 28 | themeImgDir = themeImgDir if os.path.isdir(IMAGE_ROOT + themeImgDir) else 'default' 29 | qss = str() 30 | qss += __getWidgetsQss(fontLight, fontDark, normal, light, deep, disLight, disDark, themeImgDir) 31 | qss += __getCandyQss(fontLight, deep, fontLight, themeImgDir) 32 | return qss 33 | 34 | 35 | def __getWidgetsQss(fontLight, fontDark, normal, light, deep, disLight, disDark, themeImgDir): 36 | """ 37 | 通用组件(Widgets)的Qss 38 | :param fontLight: 39 | :param fontDark: 40 | :param normal: 41 | :param light: 42 | :param deep: 43 | :param disLight: 44 | :param disDark: 45 | :param themeImgDir: 46 | :return: 47 | """ 48 | qss = str() 49 | qss += Qss.getFontQss("微软雅黑", fontDark) 50 | qss += Qss.getPushButtonQss(normal, fontLight, light, normal, disLight, fontLight, disDark, disLight) 51 | qss += Qss.getPlaineditQss(disLight, normal) 52 | qss += Qss.getTextBrowerQss(disLight, normal) 53 | qss += Qss.getLineeditQss(disLight, normal) 54 | qss += Qss.getComboxQss(fontLight, disLight, normal, IMAGE_ROOT + themeImgDir + "/" + "down_arrow.png") 55 | img_norm = IMAGE_ROOT + themeImgDir + "/" + "radio_normal.png" 56 | img_down = IMAGE_ROOT + themeImgDir + "/" + "radio_down.png" 57 | img_hover = IMAGE_ROOT + themeImgDir + "/" + "radio_hoverUncheck.png" 58 | img_downhover = IMAGE_ROOT + themeImgDir + "/" + "radio_hoverCheck.png" 59 | qss += Qss.getRadioButtonQss(img_norm, img_down, img_hover, img_downhover) 60 | img_norm = IMAGE_ROOT + themeImgDir + "/" + "checkbox_normal.png" 61 | img_down = IMAGE_ROOT + themeImgDir + "/" + "checkbox_down.png" 62 | img_hover = IMAGE_ROOT + themeImgDir + "/" + "checkbox_hoverUncheck.png" 63 | img_downhover = IMAGE_ROOT + themeImgDir + "/" + "checkbox_hoverCheck.png" 64 | qss += Qss.getCheckBoxQss(img_norm, img_down, img_hover, img_downhover) 65 | qss += Qss.getTabWidgetQss(normal, fontLight, normal) 66 | qss += Qss.getSliderQss(normal, fontLight, normal) 67 | qss += Qss.getScrollbarQss(normal) 68 | return qss 69 | 70 | 71 | def __getCandyQss(barTextColor, barColor, winBgdColor, themeImgDir): 72 | """ 73 | TitleBar+CandyWindow的Qss 74 | :param barTextColor: 文字颜色 75 | :param barColor: bar主体颜色 76 | :param winBgdColor: 主体窗口背景颜色 77 | :param themeImgDir: 主题名(作用主要是为了找按钮图片) 78 | :return: qss 79 | """ 80 | Titlebar.THEME_IMG_DIR = themeImgDir 81 | qss = str() 82 | qss += "Titlebar QLabel#%s{font-size:13px;margin-bottom:0px;color:%s;}" % (Titlebar.TITLE_LABEL_NAME, barTextColor) 83 | qss += "Titlebar QLabel#%s{background:%s;}" % (Titlebar.BACKGROUND_LABEL_NAME, barColor) 84 | # 三大金刚键的图片设置 (最大化恢复正常大小的图片设置只能在Title的onclick中设置) 85 | qss += "Titlebar QPushButton#%s{background:transparent; background-image:url(%s); border:none}" % \ 86 | (Titlebar.MIN_BUTT_NAME, IMAGE_ROOT + themeImgDir + "/" + IMG_MIN_NORM) 87 | qss += "Titlebar QPushButton#%s:hover{background:transparent; background-image:url(%s)}" % \ 88 | (Titlebar.MIN_BUTT_NAME, IMAGE_ROOT + themeImgDir + "/" + IMG_MIN_HOVER) 89 | qss += "Titlebar QPushButton#%s:pressed{background:transparent; background-image:url(%s)}" % \ 90 | (Titlebar.MIN_BUTT_NAME, IMAGE_ROOT + themeImgDir + "/" + IMG_MIN_PRESS) 91 | qss += "Titlebar QPushButton#%s:disabled{background:transparent; background-image:url(%s)}" % \ 92 | (Titlebar.MIN_BUTT_NAME, IMAGE_ROOT + themeImgDir + "/" + IMG_MIN_PRESS) 93 | qss += "Titlebar QPushButton#%s{background:transparent; background-image:url(%s); border:none}" % \ 94 | (Titlebar.MAX_BUTT_NAME, IMAGE_ROOT + themeImgDir + "/" + IMG_MAX_NORM) 95 | qss += "Titlebar QPushButton#%s:hover{background:transparent; background-image:url(%s)}" % \ 96 | (Titlebar.MAX_BUTT_NAME, IMAGE_ROOT + themeImgDir + "/" + IMG_MAX_HOVER) 97 | qss += "Titlebar QPushButton#%s:pressed{background:transparent; background-image:url(%s)}" % \ 98 | (Titlebar.MAX_BUTT_NAME, IMAGE_ROOT + themeImgDir + "/" + IMG_MAX_PRESS) 99 | qss += "Titlebar QPushButton#%s:disabled{background:transparent; background-image:url(%s)}" % \ 100 | (Titlebar.MAX_BUTT_NAME, IMAGE_ROOT + themeImgDir + "/" + IMG_MAX_PRESS) 101 | qss += "Titlebar QPushButton#%s{background:transparent; background-image:url(%s); border:none}" % \ 102 | (Titlebar.CLOSE_BUTT_NAME, IMAGE_ROOT + themeImgDir + "/" + IMG_CLOSE_NORM) 103 | qss += "Titlebar QPushButton#%s:hover{background:transparent; background-image:url(%s)}" % \ 104 | (Titlebar.CLOSE_BUTT_NAME, IMAGE_ROOT + themeImgDir + "/" + IMG_CLOSE_HOVER) 105 | qss += "Titlebar QPushButton#%s:pressed{background:transparent; background-image:url(%s)}" % \ 106 | (Titlebar.CLOSE_BUTT_NAME, IMAGE_ROOT + themeImgDir + "/" + IMG_CLOSE_PRESS) 107 | qss += "Titlebar QPushButton#%s:disabled{background:transparent; background-image:url(%s)}" % \ 108 | (Titlebar.CLOSE_BUTT_NAME, IMAGE_ROOT + themeImgDir + "/" + IMG_CLOSE_PRESS) 109 | # CandyWindow窗口内底色+外围描边 110 | qss += "WindowWithTitleBar{background:%s;border:3px solid %s}" % (winBgdColor, barColor) 111 | return qss 112 | -------------------------------------------------------------------------------- /python-version/deployPyPi.bat: -------------------------------------------------------------------------------- 1 | twine upload dist/* -------------------------------------------------------------------------------- /python-version/dist/QCandyUi-0.14-py3-none-any.whl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/dist/QCandyUi-0.14-py3-none-any.whl -------------------------------------------------------------------------------- /python-version/dist/QCandyUi-0.14.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/dist/QCandyUi-0.14.tar.gz -------------------------------------------------------------------------------- /python-version/dist/QCandyUi-0.15-py3-none-any.whl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/dist/QCandyUi-0.15-py3-none-any.whl -------------------------------------------------------------------------------- /python-version/dist/QCandyUi-0.15.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuoGG1239/QCandyUi/32945abc613c91a70926f4fd7e90430a4f543e97/python-version/dist/QCandyUi-0.15.tar.gz -------------------------------------------------------------------------------- /python-version/install_whl.bat: -------------------------------------------------------------------------------- 1 | python setup.py bdist_wheel 2 | python setup.py sdist -------------------------------------------------------------------------------- /python-version/setup.py: -------------------------------------------------------------------------------- 1 | from setuptools import setup 2 | 3 | setup( 4 | name="QCandyUi", 5 | version="0.15", 6 | description="quick beautify your pyQt5 app", 7 | keywords='python pyQt ui', 8 | author='shuoGG', 9 | author_email='328893769@qq.com', 10 | url='https://github.com/shuoGG1239/QCandyUi', 11 | packages=['QCandyUi'], 12 | include_package_data=True, 13 | zip_safe=False, 14 | install_requires= [ 15 | 'pywin32' 16 | ] 17 | ) 18 | --------------------------------------------------------------------------------