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

PySide6-Fluent-Widgets ComboBoxBase bug 导致ComboBox及其子类无法使用 #468

Closed lidanqing123 closed 1 year ago

lidanqing123 commented 1 year ago

测试时ComboBox无法选定除第一个值之外的其他值,排查发现是qfluentwidgets\components\widgets\combo_box.py 285行的lambda函数问题,x值会被triggered信号值顶替,self._onItemClicked收到的是bool值 。 图片

图片

修改方法可参考下图

图片

zhiyiYo commented 1 year ago

我的 pyside6.4.2 和 python3.8 可以收到 index

lidanqing123 commented 1 year ago

您好!您的邮件已收到!我查阅后,尽快回复您!

lidanqing123 commented 1 year ago

我的 pyside6.4.2 和 python3.8 可以收到 index

我用的python3.10,还没试python其他版本

lidanqing123 commented 1 year ago

我的 pyside6.4.2 和 python3.8 可以收到 index

我看pyqt5分支这个地方跟我改后是一样的

zhiyiYo commented 1 year ago

因为python3.8收不到checked参数,所以被我移除了

zhiyiYo commented 1 year ago

python3.11 也很正常

lidanqing123 commented 1 year ago

图片 https://doc.qt.io/qtforpython-6/PySide6/QtGui/QAction.html#PySide6.QtGui.PySide6.QtGui.QAction.toggled PySide6 中 QAction.toggled 信号是会传checked参数的,还是建议在lambda函数中加上一个额外的位置参数。 我现在需要自己修改源码才可以正常使用

lidanqing123 commented 1 year ago

不好意思啊,截图截错位置了 https://doc.qt.io/qtforpython-6/PySide6/QtGui/QAction.html#PySide6.QtGui.PySide6.QtGui.QAction.triggered 图片 triggered 的 checked参数 还是会收到

import sys
from PySide6.QtCore import *
from PySide6.QtGui import *
from PySide6.QtWidgets import *

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("My App")

        label = QLabel("Hello!")
        label.setAlignment(Qt.AlignCenter)

        self.setCentralWidget(label)

        toolbar = QToolBar("My main toolbar")
        toolbar.setIconSize(QSize(16, 16))
        self.addToolBar(toolbar)

        button_action = QAction(QIcon("bug.png"), "&Your button", self)
        button_action.setStatusTip("This is your button")
        button_action.triggered.connect(self.onMyToolBarButtonClick)
        button_action.setCheckable(True)
        toolbar.addAction(button_action)

        toolbar.addSeparator()

        button_action2 = QAction(QIcon("bug.png"), "Your &button2", self)
        button_action2.setStatusTip("This is your button2")
        button_action2.triggered.connect(self.onMyToolBarButtonClick)
        button_action2.setCheckable(True)
        toolbar.addAction(button_action2)

        toolbar.addWidget(QLabel("Hello"))
        toolbar.addWidget(QCheckBox())

        self.setStatusBar(QStatusBar(self))

        menu = self.menuBar()

        file_menu = menu.addMenu("&File")
        file_menu.addAction(button_action)
        file_menu.addSeparator()
        file_menu.addAction(button_action2)

    def onMyToolBarButtonClick(self, s):
        print("click", s)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MainWindow()
    w.show()
    app.exec()
zhiyiYo commented 1 year ago

单独运行这个示例确实能收到 checked 信号,但是运行 demo 很正常 image 加上 checked 参数会报错: image

zhiyiYo commented 1 year ago

是不是你的pyside版本太高

lidanqing123 commented 1 year ago

我发现是我的pyside6版本高了,降回到pyside6 6.4.3的话不加c参数可以正常运行

lidanqing123 commented 1 year ago

会有升级pyside6版本的计划吗

zhiyiYo commented 1 year ago

暂时没有

Ruchild commented 1 year ago

我今天遇到了同样的问题,研究了3个小时,源码也改来改去,依然没解决,刚才搜了下这个问题,然后我把PySide6 从6.5.3降回到6.4.2,问题解决了! 我真的。。再也不乱升版本了

lidanqing123 commented 1 year ago

您好!您的邮件已收到!我查阅后,尽快回复您!

zhiyiYo commented 1 year ago

还是得根据版本号处理一下这个问题