pycharm 下 pyqt5 designer 无法使用connect ,native Qt signal is not callable,PyQt信号connect连接槽方法时报:native

主要是遇到了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

若有侵权请及时联系我,谢谢

image-20200617182005652image-20200617182932333

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"

我后来试了几次,就好了

到此结束