相关疑难解决方法(0)

是否可以在不调用QApplication :: exec()的情况下创建本地事件循环?

我想创建一个基于其构建的库,QTcpServerQTcpSocket用于在其main函数中没有事件循环的程序中(因为Qt事件循环是阻塞的,并且不能为所需的实时操作提供足够的时序分辨率).

我希望通过在类中创建本地事件循环来解决这个问题,但除非我app->exec()首先调用main函数,否则它们似乎不起作用.有没有办法创建本地事件循环并允许在线程内进行信号/插槽通信而无需应用程序级事件循环?

我已经看过有没有办法在没有QApplication :: exec()的情况下使用Qt?但答案没有帮助,因为似乎解决方案添加了本地事件循环但不删除应用程序循环.

c++ qt event-loop qeventloop qapplication

7
推荐指数
1
解决办法
2272
查看次数

使用matplotlib进行绘图时,如何避免PyCharm控制台崩溃“警告:在main()线程中未创建QApplication”?

在PyCharm中,当我尝试使用其交互式控制台绘制某些内容时,例如:

In[2]: from matplotlib.pyplot import *
In[3]: x = range(5)
In[4]: y = range(5,10)
In[5]: plot(x,y)
WARNING: QApplication was not created in the main() thread.
Out[5]: [<matplotlib.lines.Line2D at 0x7fade916a438>]
In[6]: show()
Run Code Online (Sandbox Code Playgroud)

它打开一个窗口并崩溃。我必须停止控制台并启动一个新控制台。

错误的屏幕截图

当我在终端的ipython控制台中运行类似的操作时,它工作正常,看来错误仅在Pycharm中发生。

另一方面,如果使用import matplotlib.pyplot as plt它导入matplotlib 可以正常工作:

In[2]: import matplotlib.pyplot as plt
In[3]: x = range(5)
In[4]: y = range(5,10)
In[5]: plt.plot(x,y)
Out[5]: [<matplotlib.lines.Line2D at 0x7fd3453b72e8>]
In[6]: plt.show()
Run Code Online (Sandbox Code Playgroud)

但是,如果我同时做这件事,它也会崩溃(即使使用调用plot函数plt.plot):

In[2]: from matplotlib.pyplot import *
In[3]: import matplotlib.pyplot as plt
In[4]: x = range(5)
In[5]: y …
Run Code Online (Sandbox Code Playgroud)

python qt multithreading matplotlib pycharm

6
推荐指数
1
解决办法
348
查看次数