Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tooltip控件的一些问题 #3

Closed
oraant opened this issue Jan 15, 2023 · 8 comments
Closed

Tooltip控件的一些问题 #3

oraant opened this issue Jan 15, 2023 · 8 comments

Comments

@oraant
Copy link

oraant commented Jan 15, 2023

提示内容稍多点就可以发现问题:
修改了下demo的代码,加了两个按钮,并且增加了提示内容的长度。
按钮1,无法很好的躲避屏幕
按钮2,不停闪烁
按钮3和4,来回切换时会发现 enterEvent 会被触发两次,第一次size是乱的,第二次才是正确的。

    def __init__(self):
        super().__init__()
        self.hBox = QHBoxLayout(self)
        self.button1 = QPushButton('キラキ\nラ', self)
        self.button2 = QPushButton('食べた\n愛', self)
        self.button3 = QPushButton('asd\nfasdf', self)
        self.button4 = QPushButton('asd\nfasdf', self)
        self._toolTip = ToolTip(parent=self)
        # self._toolTip.setDarkTheme(True)

        self.button1.setToolTip('aiko - キラキラ ✨'*90)
        self.button2.setToolTip('aiko - 食べた愛 🥰\n'*90)
        self.button3.setToolTip('aiko - キラキラ ✨'*10)
        self.button4.setToolTip('aiko - 食べた愛 🥰\n'*10)
        self.button1.setToolTipDuration(1000)
        self.button2.setToolTipDuration(5000)
        self.button3.setToolTipDuration(1000)
        self.button4.setToolTipDuration(5000)

        self.button1.installEventFilter(self)
        self.button2.installEventFilter(self)
        self.button3.installEventFilter(self)
        self.button4.installEventFilter(self)

        self.hBox.setContentsMargins(30, 30, 30, 30)
        self.hBox.setSpacing(20)
        self.hBox.addWidget(self.button1)
        self.hBox.addWidget(self.button2)
        self.hBox.addWidget(self.button3)
        self.hBox.addWidget(self.button4)

        self.resize(600, 300)
        self._toolTip.hide()

        self.setStyleSheet(self.DEMO_STYLE_SHEET)
@zhiyiYo
Copy link
Owner

zhiyiYo commented Jan 15, 2023

感谢反馈,不过真的会有人在工具提示上面设置那么长的文本吗🤔

@zhiyiYo zhiyiYo closed this as not planned Won't fix, can't repro, duplicate, stale Jan 15, 2023
@oraant
Copy link
Author

oraant commented Jan 15, 2023

感谢反馈,不过真的会有人在工具提示上面设置那么长的文本吗🤔

一些简单的换行提示还是很常见的,如果多个按钮的提示行数不同,则容易出现按钮3/4的问题

@zhiyiYo
Copy link
Owner

zhiyiYo commented Jan 16, 2023

调整大小的 bug 应该已经修好了,至于长文本超出屏幕区域的问题目前没有修复的打算,因为做了这么久的项目没有用过那么长的提示条

@oraant
Copy link
Author

oraant commented Jan 16, 2023

调整大小的 bug 应该已经修好了,至于长文本超出屏幕区域的问题目前没有修复的打算,因为做了这么久的项目没有用过那么长的提示条

大佬您是真的肝啊……

我看了下代码,按钮2的问题或许可以再考虑一下。

如果提示条有换行导致高度较高,而窗口或按钮又比较靠近屏幕顶端时(比如一些顶部的菜单按钮),疯狂闪烁的问题应该依然会发生。

可以试下按钮4的情况。拖动窗口靠近屏幕顶端,鼠标放到按钮4上。
提示条出现后遮挡按钮,导致按钮触发 LeaveEvent ,然后提示条关闭,导致按钮触发 EnterEvent,然后疯狂闪烁。

话说大半夜的写代码不累么,我快要困死了

@oraant
Copy link
Author

oraant commented Jan 16, 2023

目测加个 self.setAttribute(Qt.WA_TransparentForMouseEvents) 就好了,懒得发 PR 了

@zhiyiYo
Copy link
Owner

zhiyiYo commented Jan 17, 2023

不行的,只要工具提示一弹出来就会引发 leaveEvent,然后就会一直闪烁,就算是 windows 的工具提示也有这个问题

@oraant
Copy link
Author

oraant commented Jan 17, 2023

我试了试,在 PyQt5 和 PySide6 上是可以的。

    def __init__(self, text='', parent=None):
        ........................ # 其他代码
        # set style
        self.setAttribute(Qt.WA_TransparentForMouseEvents) # 加在了这里
        self.setAttribute(Qt.WA_TranslucentBackground)
        self.setWindowFlags(Qt.Tool | Qt.FramelessWindowHint)
        self.setDarkTheme(False)
        self.__setQss()

加完后,按钮2,就是那个很长的竖条,也不闪了。

@zhiyiYo
Copy link
Owner

zhiyiYo commented Jan 17, 2023

牛啊,确实有用,可能是我之前加的位置有问题

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants