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

[Bug]: 点击ComboBox闪退问题 #836

Open
Win12Home opened this issue Apr 10, 2024 · 3 comments
Open

[Bug]: 点击ComboBox闪退问题 #836

Win12Home opened this issue Apr 10, 2024 · 3 comments
Labels
bug Something isn't working

Comments

@Win12Home
Copy link

What happened?

我在子窗口上使用了ComboBox,点击它就会闪退并发生如下错误

Operation System

Windows11 23H2

Python Version

3.12.2 64bit

PyQt/PySide Version

PyQt5 5.15.10

PyQt/PySide-Fluent-Widgets Version

1.5.4

How to Reproduce?

报错

Traceback (most recent call last):
  File "C:\Program Files\Python312\Lib\site-packages\qfluentwidgets\components\widgets\combo_box.py", line 394, in mouseReleaseEvent
    self._toggleComboMenu()
  File "C:\Program Files\Python312\Lib\site-packages\qfluentwidgets\components\widgets\combo_box.py", line 350, in _toggleComboMenu
    self._showComboMenu()
  File "C:\Program Files\Python312\Lib\site-packages\qfluentwidgets\components\widgets\combo_box.py", line 340, in _showComboMenu
    menu.view.adjustSize(pd, MenuAnimationType.DROP_DOWN)
  File "C:\Program Files\Python312\Lib\site-packages\qfluentwidgets\components\widgets\menu.py", line 204, in adjustSize
    for i in range(self.count()):
                   ^^^^^^^^^^^^
RuntimeError: wrapped C/C++ object of type MenuActionListWidget has been deleted

Minimum code

class ComboboxSettingCard(SettingCard):
    def __init__(self,icon,title,content,parent):
        super().__init__(icon,title,content,parent)
        self.combobox=ComboBox(self)

    def resizeEvent(self, a0):
        super().resizeEvent(a0)
        self.combobox.setGeometry(self.width()-300,20,280,30)

class SettingsDialog(FluentWindowBase):
    def __init__(self,p):
        super().__init__()
        self.settings=[]
        self.setTitleBar(FluentTitleBar(self))
        self.resize(900,750)
        self.setMaximumSize(900,750)
        self.setMinimumSize(900,750)
        self.titleBar.setDoubleClickEnabled(False)
        self.titleBar.minBtn.hide()
        self.titleBar.maxBtn.hide()
        self.setWindowIcon(QIcon(FluentIcon.SETTING.path()))
        self.setWindowTitle(setlanguage["title"])
        self.listwidget=ListWidget(self)
        self.listwidget.itemClicked.connect(self.itemClicked)
        self.appearance=SettingCardGroup(setlanguage["appearance"])
        self.setlanguage=ComboboxSettingCard(FluentIcon.LANGUAGE,setlanguage["languageset"],setlanguage["languagesetsub"],self.appearance)
        self.setLanguages()
        self.setlanguage.combobox.currentIndexChanged.connect(self.applyLanguage)
        self.appearance.addSettingCards([self.setlanguage])
        self.addSetting(setlanguage["appearance"],self.appearance)

    def tipsRestart(self):
        self.msg=MessageBox(language["tips"],language["changelanguagecontext"],self)
        self.msg.yesButton.setText(language["done"])
        self.msg.cancelButton.hide()
        self.msg.buttonLayout.insertStretch(1)
        self.msg.exec_()

    def applyLanguage(self):
        row=self.setlanguage.combobox.currentIndex()
        settings.apply("language",str(languagelist[row][0].stem))
        self.tipsRestart()

    def setLanguages(self):
        row=0
        for i in languagelist:
            self.setlanguage.combobox.addItem(i[1])
            if languageoriginal["name"] == i[1]:self.setlanguage.combobox.setCurrentIndex(row)
            row+=1

    def addSetting(self,name:str,interface:QWidget):
        self.stackedWidget.addWidget(interface)
        self.settings.append([interface,QListWidgetItem(name,self.listwidget)])
        self.listwidget.setCurrentRow(0)

    def itemClicked(self):
        item=self.listwidget.currentRow()
        interface=self.settings[item][0]
        self.stackedWidget.setCurrentWidget(interface)

    def resizeEvent(self, e):
        super().resizeEvent(e)
        self.listwidget.setGeometry(0,self.titleBar.height(),300,self.height()-self.titleBar.height())
        self.stackedWidget.setGeometry(300,self.titleBar.height(),600,self.height()-self.titleBar.height())
@Win12Home Win12Home added the bug Something isn't working label Apr 10, 2024
@Win12Home
Copy link
Author

还会有这样的问题
`Traceback (most recent call last):

File "C:\Program Files\Python312\Lib\site-packages\qfluentwidgets\components\widgets\combo_box.py", line 394, in mouseReleaseEvent
self._toggleComboMenu()

File "C:\Program Files\Python312\Lib\site-packages\qfluentwidgets\components\widgets\combo_box.py", line 350, in _toggleComboMenu
self._showComboMenu()

File "C:\Program Files\Python312\Lib\site-packages\qfluentwidgets\components\widgets\combo_box.py", line 341, in _showComboMenu
menu.exec(pd, aniType=MenuAnimationType.DROP_DOWN)

File "C:\Program Files\Python312\Lib\site-packages\qfluentwidgets\components\widgets\combo_box.py", line 510, in exec
return super().exec(pos, ani, aniType)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

File "C:\Program Files\Python312\Lib\site-packages\qfluentwidgets\components\widgets\menu.py", line 726, in exec
self.aniManager.exec(pos)

File "C:\Program Files\Python312\Lib\site-packages\qfluentwidgets\components\widgets\menu.py", line 856, in exec
self.ani.start()

RuntimeError: wrapped C/C++ object of type QPropertyAnimation has been deleted`

@rainzee
Copy link
Contributor

rainzee commented Apr 13, 2024

给个直接能跑的代码

@AlexZhu2001
Copy link
Contributor

没有办法复现 请给出完整的代码
测试代码如下:

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from qfluentwidgets import *
from qfluentwidgets.window.fluent_window import FluentWindowBase


languagelist = [f"{i}" for i in range(100)]


class ComboboxSettingCard(SettingCard):
    def __init__(self, icon, title, content, parent):
        super().__init__(icon, title, content, parent)
        self.combobox = ComboBox(self)

    def resizeEvent(self, a0):
        super().resizeEvent(a0)
        self.combobox.setGeometry(self.width()-300, 20, 280, 30)


class SettingsDialog(FluentWindowBase):
    def __init__(self, p=None):
        super().__init__()
        self.settings = []
        self.setTitleBar(FluentTitleBar(self))
        self.resize(900, 750)
        self.appearance = SettingCardGroup("title")
        self.listwidget = ListWidget(self)
        self.listwidget.itemClicked.connect(self.itemClicked)
        self.setlanguage = ComboboxSettingCard(
            FluentIcon.LANGUAGE, "test", "text", self.appearance)
        self.setlanguage.combobox.currentIndexChanged.connect(
            self.applyLanguage)
        self.appearance.addSettingCards([self.setlanguage])
        self.appearance.move(10, self.titleBar.height())
        self.appearance.resize(
            self.width() - 20, self.height() - self.titleBar.height())
        self.setLanguages()
        self.addSetting("test", self.appearance)

    def applyLanguage(self):
        pass

    def setLanguages(self):
        row = 0
        for i in languagelist:
            self.setlanguage.combobox.addItem(i)
            self.setlanguage.combobox.setCurrentIndex(0)

    def addSetting(self, name: str, interface: QWidget):
        self.stackedWidget.addWidget(interface)
        self.settings.append(
            [interface, QListWidgetItem(name, self.listwidget)])
        self.listwidget.setCurrentRow(0)

    def resizeEvent(self, e):
        super().resizeEvent(e)
        self.listwidget.setGeometry(
            0, self.titleBar.height(), 300, self.height()-self.titleBar.height())
        self.stackedWidget.setGeometry(
            300, self.titleBar.height(), 600, self.height()-self.titleBar.height())

    def itemClicked(self):
        item = self.listwidget.currentRow()
        interface = self.settings[item][0]
        self.stackedWidget.setCurrentWidget(interface)


app = QApplication([])
dlg = SettingsDialog()
dlg.show()
app.exec()

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants