许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  PyQt-Fluent-Widgets 搭配 QtDesigner 的正确使用姿

PyQt-Fluent-Widgets 搭配 QtDesigner 的正确使用姿

阅读数 3
点赞 0
article_banner

请问,导入FramelessWindow之后,布局和标题栏之间有重叠,应该怎样调


装完PyQt-Fluent-Widgets发现Qt Designer侧边栏还是光秃秃的,只有标准Qt组件,Fluent的PushButton、CardWidget一个都找不到。库装进去了但Designer插件没挂上,直接pip install完就打开Designer是看不到的。


启动Designer要走库自带的脚本。PyQt-Fluent-Widgets的源码目录下有个tools文件夹,里面有designer.py,在终端里跑`python ./tools/designer.py`,启动出来的Designer侧边栏才会多出Fluent Widgets那一栏。如果源码目录里找不到tools文件夹,去GitHub的release页面下载FluentDesigner压缩包,解压后直接跑designer/designer.exe,那个是已经装好插件的Designer。新版qfluentwidgets已经不在pip包里带designer.py了,得从源码仓库拿或者去release页面下预编译的。


最简单的办法是“提升为”。Designer里先拖一个原生QPushButton,右键选“提升为…”,弹出来的对话框里填两项:头文件写`qfluentwidgets`,类名写`PushButton`,点添加再提升。提升完之后Designer里看着还是原来的灰色按钮,不会变成Fluent样式,这是正常的。保存成mainwindow.ui,用pyuic5转成py文件,打开生成的代码能看到`from qfluentwidgets import PushButton`,按钮实例化的时候就是Fluent的了。


提升之后跑起来直接崩,报TypeError说PushButton的__init__缺少text参数。原生QPushButton的构造函数是`def __init__(self, *__args)`,text和parent都是可选的,pyuic5生成代码的时候调的是`PushButton()`,不带任何参数。但qfluentwidgets的PushButton定义是`def __init__(self, text: str, parent=None)`,text是必填的位置参数,`PushButton()`一调就报缺参数。解决方法是写一个中间类,构造函数签名跟原生父类完全一样,内部再转交给Fluent的PushButton。写一个CustomButton,继承自qfluentwidgets.PushButton,`__init__(self, *args)`里先把参数收下来,根据参数个数判断调用父类的哪种构造,或者直接给text一个默认值空字符串。提升的时候头文件写自己的模块名,类名写CustomButton,这样pyuic5生成`CustomButton()`就不会崩了。


同一个窗口里用了MSFluentWindow加addSubInterface挂多个子界面,导航栏只显示第一个,后面几个怎么点都不切换。打开每个.ui文件看根widget的name属性,全是默认的`Form`。addSubInterface内部用`interface.objectName()`当路由键,所有子界面的objectName都是`Form`,后面的覆盖前面的,导航栏里只认最后一个。改法是把每个.ui文件根widget的name改成唯一的,`Form1`、`Form2`、`Form3`这样,在Designer里选中根widget,Property Editor里把objectName改掉,重新保存.ui文件。改完不用改Python代码,loadUi的时候objectName跟着.ui走。只在Python构造函数里`self.setObjectName("Form1")`没用,那个调用发生在loadUi之后,导航栏注册的时候读的还是"Form"。


PyQt-Fluent-Widgets依赖PyQt5-Frameless-Window版本大于等于0.2.7,低于这个版本Designer插件和Fluent窗口的圆角阴影都会出问题。用pip装的时候`pip install "PyQt-Fluent-Widgets[full]"`会把Frameless-Window一起带上,装lite版本的话得手动确认一下版本。PyQt5、PyQt6、PySide2、PySide6四个版本的Fluent-Widgets包名都是qfluentwidgets,同时装两个会互相覆盖,报ImportError找不到模块。用PyQt5就只装PyQt5版的,装完之后`python -c "from qfluentwidgets import PushButton; print('ok')"`确认一下。


D:\PyQt_Projects\FluentApp\下面那个demo.ui的根widget名字还是Form,导航栏问题还没改,下次把Form改成MainWindow,另外那个CustomButton中间类还没建,PushButton提升之后还是直接崩,中间类的构造参数是...


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空