Closed immiProgrammer closed 11 months ago
import sys from typing import Union from PyQt5.QtCore import Qt from PyQt5.QtGui import QIcon from PyQt5.QtWidgets import QApplication, QWidget, QAction, QGridLayout, QToolButton from qfluentwidgets import FluentIconBase, qconfig, ToolButton, RoundMenu, CommandButton from qfluentwidgets import FluentIcon as FIF class CToolButton(ToolButton): _icon = None # it is important to stop update on parent class __icon = None def setIcon(self, icon: Union[QIcon, str, FluentIconBase], disconnect=True): # immi # self._icon = None if isinstance(icon, FluentIconBase): self.__icon = icon icon = icon.icon() qconfig.themeChanged.connect(self._setIcon) elif disconnect: self.__icon = None try: # when it is connected qconfig.themeChanged.disconnect(self._setIcon) except:pass # when it is not Connected if isinstance(icon, str): icon = QIcon(icon) QToolButton.setIcon(self, icon) def _setIcon(self): if self.__icon: self.setIcon(self.__icon.icon(), False) class ToolButtonDemo(QWidget): def __init__(self): super().__init__() # setTheme(Theme.DARK) self.setStyleSheet("ToolButtonDemo{background: white}") self.menu = RoundMenu(parent=self) self.menu.addAction(QAction(FIF.SEND_FILL.icon(), 'Send')) self.menu.addAction(QAction(FIF.SAVE.icon(), 'Save')) # tool button self.toolButton = ToolButton(FIF.SETTING, self) self.toolButton.setText("imran") self.toolButton.setToolButtonStyle(Qt.ToolButtonTextUnderIcon) self.toolButton1 = CommandButton(self) self.toolButton1.setText("imran") self.toolButton1.setToolButtonStyle(Qt.ToolButtonTextUnderIcon) self.toolButton1.setIcon(FIF.SETTING) self.toolButton2 = CToolButton(FIF.SETTING, self) self.toolButton2.setText("imran") self.toolButton2.setToolButtonStyle(Qt.ToolButtonTextUnderIcon) # self.toolButton1.setIcon(FIF.SETTING) self.toolButton3 = QToolButton(self) self.toolButton3.setObjectName('customToolButton') self.toolButton3.setText("imran") self.toolButton3.setIcon(FIF.SETTING.icon()) self.toolButton3.setToolButtonStyle(Qt.ToolButtonTextUnderIcon) stylesheet = self.toolButton.styleSheet().replace('ToolButton', '#customToolButton') self.toolButton3.setStyleSheet(stylesheet) self.toolButton3.setFont(self.toolButton.font()) # self.toolButton.setText("imran") # self.toolButton.setToolButtonStyle(Qt.ToolButtonTextOnly) # change the size of tool button # self.toolButton.resize(50, 50) # self.toolButton.setIconSize(QSize(30, 30)) # add buttons to layout self.gridLayout = QGridLayout(self) self.gridLayout.addWidget(self.toolButton, 0, 0) self.gridLayout.addWidget(self.toolButton1, 0, 1) self.gridLayout.addWidget(self.toolButton2, 0, 2) self.gridLayout.addWidget(self.toolButton3, 1, 1) self.resize(300, 300) if __name__ == '__main__': # enable dpi scale QApplication.setHighDpiScaleFactorRoundingPolicy( Qt.HighDpiScaleFactorRoundingPolicy.PassThrough) QApplication.setAttribute(Qt.AA_EnableHighDpiScaling) QApplication.setAttribute(Qt.AA_UseHighDpiPixmaps) app = QApplication(sys.argv) w1 = ToolButtonDemo() # w1.setWindowFlags(w1.windowFlags()|qt.CoverWindow) w1.show() # w1.move(50, 50) app.exec_()
Next version will add this feature
Thanks