主要是遇到了3个问题
背景,按照网上的教程配置了pycharm下pyqt5相关的东西,如愿做出了界面文件,并生成了py文件,有个小插曲,就是使用pyuic生成的时候有时候会提示找不到ui文件,主要是pyuic设置问题,问题如下:
图片来源:https://blog.csdn.net/qq_40016971/article/details/106816818?utm_medium=distribute.pc_relevant.none-task-blog-title-6&spm=1001.2101.3001.4242
若有侵权请及时联系我,谢谢
https://www.codenong.com/cs105457038/
注意在pyuic的配置里,Working directory中 默认是$ProjectFileDir$,这会导致pyuic在工程目录寻找ui文件,但工程目录一般是只python.exe的目录,改为$FileDir$就可以了
言归正传,pyqt使用时connect出错,主要涉及2各原因
1,pycharm环境问题,这个时最大的坑
2,connect使用方法问题
第一个:pycharm的坑,以下参考网友贴,下附连接,如由侵权,请及时告知
https://www.zhihu.com/question/58209570
Pycharm对于PyQt5的语法检测总是误测connect函数找不到,如何修改?
import等内容一切正常,实际运行也不会出错,只有在connect上一直误报,是否可以调整下pycharm的设置来消除误报?
网友好回答
k1mlka
riddim or die
4 人赞同了该回答
推荐安装 PyQt5-stubs 可以解决许多 pycharm 的 pyqt5 智能检测问题。
`pip install PyQt5-stubs`
2020 年了,jb似乎都还没修复这些几年前就有的问题。
https://youtrack.jetbrains.com/issue/PY-24183?_ga=2.170594915.237989288.1580259506-426900699.1579714146
回答正解,可见pycharm神器也有问题,使用PyQt5-stubs 就好了,至于为什么还没能来得及看
2,connect使用方法问题
首先可以参考以下链接
https://blog.csdn.net/shankezh/article/details/52702573?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.compare&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.compare
https://www.jianshu.com/p/6a50f2a8d096
https://blog.csdn.net/s_daqing/article/details/104824556?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.compare&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.compare
最主要的原因如下
https://www.codenong.com/17578428/
关于用户界面:PyQt5信号和插槽“ QObject没有属性”错误
PyQt5 Signals and Slots 'QObject has no attribute' error
我一直在尝试找到一种从main外部的Python线程更新GUI线程的方法。 sourceforge上的PyQt5文档提供了有关如何执行此操作的良好说明。 但是我仍然无法正常工作。
有没有很好的方法来解释交互式会话的以下输出? 难道没有一种方法可以在这些对象上调用emit方法吗?
1 2 3 4 5 6 7 | >>> from PyQt5.QtCore import QObject, pyqtSignal >>> obj = QObject() >>> sig = pyqtSignal() >>> obj.emit(sig) Traceback (most recent call last): File"<stdin>", line 1, in <module> AttributeError: 'QObject' object has no attribute 'emit' |
和
1 2 3 4 | >>> obj.sig.emit() Traceback (most recent call last): File"<stdin>", line 1, in <module> AttributeError: 'QObject' object has no attribute 'sig' |
和
1 2 3 4 5 | >>> obj.sig = pyqtSignal() >>> obj.sig.emit() Traceback (most recent call last): File"<stdin>", line 1, in <module> AttributeError: 'PyQt5.QtCore.pyqtSignal' object has no attribute 'emit' |
相关讨论
以下单词和代码在PyQt5文档中。
新信号只能在QObject的子类中定义。它们必须是类定义的一部分,并且在定义了类之后不能动态添加为类属性。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | from PyQt5.QtCore import QObject, pyqtSignal
class Foo(QObject):
# Define a new signal called 'trigger' that has no arguments. trigger = pyqtSignal()
def connect_and_emit_trigger(self): # Connect the trigger signal to a slot. self.trigger.connect(self.handle_trigger)
# Emit the signal. self.trigger.emit()
def handle_trigger(self): # Show that the slot has been called.
print"trigger signal received" |
我后来试了几次,就好了
到此结束