ChinaIceF / PyQt-SiliconUI

A powerful and artistic UI library based on PyQt5,基于 PyQt5 的UI框架,灵动、优雅而轻便
GNU General Public License v3.0
433 stars 43 forks source link

二级子页面,SiComboBox 的 menu 展开无法显示 #127

Open sihanghans opened 3 weeks ago

sihanghans commented 3 weeks ago

你好,我是个初学者,在调试发现 SiComboBox 放在二级子页面时, SiComboBox 的 menu 展开无法显示,这个怎么解决?

ChinaIceF commented 3 weeks ago

需要更多信息

你好,请提供你的出错源代码和运行环境,以便我解决问题

sihanghans commented 3 weeks ago

Snipaste_调试1 Snipaste_调试2 Snipaste_调试3

sihanghans commented 3 weeks ago

在两个电脑(联想\Magic book)跑了,都是 Windows 10 系统(minicanda + python=3.8)

Cassianvale commented 2 weeks ago

和 #122 应该是同一个问题

sihanghans commented 2 weeks ago

for widget in self.combobox.menu().options(): widget.show() 使用这个方式并没有解决这个问题,这个问题还有其他可能吗 我这边可以帮忙测试

Cassianvale commented 2 weeks ago

for widget in self.combobox.menu().options(): widget.show() 使用这个方式并没有解决这个问题,这个问题还有其他可能吗 我这边可以帮忙测试

我测试过元素应该是被色块盖住了

Fandlla commented 2 weeks ago

这个问题貌似是动态添加控件时reloadStyleSheet()没有正确加载导致的。 这是出问题的代码: 屏幕截图 2024-09-11 193538

`           combox = SiComboBox(self)
            combox.setFixedSize(256, 32)
            combox.addOption("01")
            combox.addOption("02")
            combox.menu().setIndex(0)

            self.current_submenu.append(combox)
            self.container_h.addWidget(combox)

            combox.menu().reloadStyleSheet()
            combox.show()
            self.container_h.arrangeWidget()`

调用SiGlobal.siui.reloadAllWindowsStyleSheet()重新加载所有窗体的样式后(有卡顿) 屏幕截图 2024-09-11 194200 也可以只加载控件子控件的样式:

`SiGlobal.siui._reloadWidgetStyleSheet(combox.menu())
 SiGlobal.siui._reloadWidgetStyleSheet(self)
 combox.menu().reloadStyleSheet()`

好像reloadStyleSheet()没有加载父控件成员的样式。 感觉是这个问题是因为部分控件(比如SiComboBox)及其成员(如menu_)没有绑定同一个父控件,加之reloadStyleSheet()的不完善导致的

ChinaIceF commented 2 weeks ago

这个问题貌似是动态添加控件时reloadStyleSheet()没有正确加载导致的。 这是出问题的代码: 屏幕截图 2024-09-11 193538

`           combox = SiComboBox(self)
            combox.setFixedSize(256, 32)
            combox.addOption("01")
            combox.addOption("02")
            combox.menu().setIndex(0)

            self.current_submenu.append(combox)
            self.container_h.addWidget(combox)

            combox.menu().reloadStyleSheet()
            combox.show()
            self.container_h.arrangeWidget()`

调用SiGlobal.siui.reloadAllWindowsStyleSheet()重新加载所有窗体的样式后(有卡顿) 屏幕截图 2024-09-11 194200 也可以只加载控件子控件的样式:

`SiGlobal.siui._reloadWidgetStyleSheet(combox.menu())
 SiGlobal.siui._reloadWidgetStyleSheet(self)
 combox.menu().reloadStyleSheet()`

好像reloadStyleSheet()没有加载父控件成员的样式。 感觉是这个问题是因为部分控件(比如SiComboBox)及其成员(如menu_)没有绑定同一个父控件,加之reloadStyleSheet()的不完善导致的

控件本身提供了reloadStyleSheet()方法,供重载其样式表,SiGlobal中提供的重载样式表方法通常在需要重载某个控件全部子控件的样式表时使用

ChinaIceF commented 2 weeks ago

已经确认这是由于SiComboBox和其成员的reloadStyleSheet方法不完善导致的,会在下一个push中优化,感谢

ChinaIceF commented 2 weeks ago

抱歉这几天由于学业较忙,没有及时回复issue,在此感谢#127下的所有人