zhiyiYo / PyQt-Fluent-Widgets

A fluent design widgets library based on C++ Qt/PyQt/PySide. Make Qt Great Again.
https://qfluentwidgets.com
GNU General Public License v3.0
5.61k stars 541 forks source link

InfoBar长消息显示问题 #62

Closed marrylin2019 closed 1 year ago

marrylin2019 commented 1 year ago

image 是我的使用方式不对吗,我看代码中是有调节尺寸的部分的。 这是一个使用了navigation的UI。这个InfoBar出现在一个属于navigation的页面(继承自ScrollArea),这页面类中创建了一个ScrollArea控件和ExpandLayout(综合参考你给出的setting和gallary两个demo),创建的InfoBar传递的parent为self(继承自ScrollArea的页面)

zhiyiYo commented 1 year ago

可以贴一下最小复现代码吗

marrylin2019 commented 1 year ago
from PyQt6.QtWidgets import QWidget
from qfluentwidgets import ScrollArea, ExpandLayout, SettingCardGroup, PrimaryPushSettingCard, FluentIcon, \
    PrimaryPushButton, InfoBar, InfoBarPosition

class TestInterface(ScrollArea):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.scrollWidget = QWidget()
        self.expandLayout = ExpandLayout(self.scrollWidget)
        self.__initUI()

    def __initUI(self):
        self.runGroup = SettingCardGroup(
            '执行', self
        )
        self.runCard = PrimaryPushSettingCard(
            '开始训练',
            FluentIcon.FOLDER,
            '模型训练',
            '请保证输入信息完整',
            self.runGroup
        )
        self._initWidget()

    def _initWidget(self):
        self.resize(1000, 800)
        self.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff)
        self.setViewportMargins(0, 80, 0, 20)
        self.setWidget(self.scrollWidget)
        self.setWidgetResizable(True)
        # initialize style sheet
        self._setQss()

        # initialize layout
        self._initLayout()

    def _initLayout(self):
        self.runGroup.addSettingCard(self.runCard)
        self.btn = PrimaryPushButton('Test')
        self.runCard.clicked.connect(
            lambda: InfoBar.error(
                title='异常信息',
                content=str(
                    '1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111'),
                orient=Qt.Orientation.Horizontal,
                isClosable=True,
                position=InfoBarPosition.BOTTOM_RIGHT,
                duration=2000,
                parent=self
            )
        )
        # add setting card group to layout
        self.expandLayout.setSpacing(28)
        self.expandLayout.setContentsMargins(36, 10, 36, 0)
        self.expandLayout.addWidget(self.runGroup)

    def _setQss(self):
        """ set style sheet """
        self.scrollWidget.setObjectName('scrollWidget')

        self.setStyleSheet("""
            SettingInterface, #scrollWidget {
                background-color: transparent;
            }

            QScrollArea {
                background-color: transparent;
                border: none;
            }

            /* 标签 */
            QLabel#settingLabel {
                font: 33px 'Microsoft YaHei Light';
                background-color: transparent;
            }

            /* 滚动条 */
            QScrollBar {
                background: transparent;
                width: 4px;
                margin-top: 32px;
                margin-bottom: 0;
                padding-right: 2px;
            }

            /*隐藏上箭头*/
            QScrollBar::sub-line {
                background: transparent;
            }

            /*隐藏下箭头*/
            QScrollBar::add-line {
                background: transparent;
            }

            QScrollBar::handle {
                background: rgb(122, 122, 122);
                border: 2px solid rgb(128, 128, 128);
                border-radius: 1px;
                min-height: 32px;
            }

            QScrollBar::add-page:vertical,
            QScrollBar::sub-page:vertical {
                background: none;
            }
    """)

在您的navigation demo中添加TestInterface这个页面即可复现。如果不行,我可以把mainwindow_interface.py文件内容粘贴。

qianye216 commented 1 year ago

可以贴一下最小复现代码吗 image

昨晚我也发现了,忘记提了,我是改成垂直布局显示才正常,当是水平布局如果content内容比较长时,title和content之间的间距就非常大,如果能解决间距的问题应该就可以了

复现代码的话直接用大佬那个infoBar的demo中的第一个信息提示,改成水平的就能复现 image

另外提一个建议,目前title为空字符串的话,infoBar的图标和content的间距好像也也偏大了点,不知道能否优化下,另外这个title是否能够默认缺省,有时候不想显示title,只显示content image image

marrylin2019 commented 1 year ago

可以贴一下最小复现代码吗 image

昨晚我也发现了,忘记提了,我是改成垂直布局显示才正常,当是水平布局如果content内容比较长时,title和content之间的间距就非常大,如果能解决间距的问题应该就可以了

复现代码的话直接用大佬那个infoBar的demo中的第一个信息提示,改成水平的就能复现

image 另外提一个建议,目前title为空字符串的话,infoBar的图标和content的间距好像也也偏大了点,不知道能否优化下,另外这个title是否能够默认缺省,有时候不想显示title,只显示content image image

我的也是,改成垂直就ok了,感谢~

zhiyiYo commented 1 year ago

v0.5.0修复了此问题,同时可以把 title 参数置为空字符串以达到隐藏标题的目的

qianye216 commented 1 year ago

v0.5.0修复了此问题,同时可以把 title 参数置为空字符串以达到隐藏标题的目的

大佬速度,我这就去更新看看

qianye216 commented 1 year ago

v0.5.0修复了此问题,同时可以把 title 参数置为空字符串以达到隐藏标题的目的

最新的0.5.0解决了长内容间距的问题,但是如果父窗口宽度比较小时没办法显示全,不知道能否兼容 image

zhiyiYo commented 1 year ago

消息条还是别放太长的消息吧

zhiyiYo commented 1 year ago

建议换成消息框

qianye216 commented 1 year ago

建议换成消息框

了解了,目前效果够用了,也可以改成垂直布局解决,大佬辛苦了

zhiyiYo commented 1 year ago

@qianye216 话说你那边的 checkbox 在 dpi 缩放大于 1 的时候会模糊吗

qianye216 commented 1 year ago

@qianye216 话说你那边的 checkbox 在 dpi 缩放大于 1 的时候会模糊吗

image 这个是1920*1200分辨率

image 这个是1280*800分辨率


image 这个是默认的1440*900分辨率 看起来还好

zhiyiYo commented 1 year ago

我这边直接运行 check_box 的 demo 也不会模糊,但是切换到 gallery 的 demo,里面的 check_box 就会糊掉🤔

qianye216 commented 1 year ago

我这边直接运行 check_box 的 demo 也不会模糊,但是切换到 gallery 的 demo,里面的 check_box 就会糊掉🤔

Mac下我这运行gallery的demo,屏幕缩放后效果也还好

zhiyiYo commented 1 year ago

好吧,可能是 Windows 的问题