小编grg*_*rsr的帖子

PyQt 崩溃和线程安全

你好 StackExchange 社区,

\n

首先,你们给了我很大的帮助,非常感谢。第一次提问:

\n

我目前正在编写一个 PyQt GUI 应用程序,我发现它在 Windows 系统上崩溃了,而且它在我家里的机器上运行时也给我带来了段错误(都是 linux mint 17)。经过一些研究,我意识到我可能创建了一个线程不安全的 GUI,因为我有几个互相调用其他方法的对象。

\n
\n

来自另一个 stackoverflow 问题GUI 小部件只能从主线程访问,即调用 QApplication.exec() 的线程。从任何其他线程 \xe2\x80\x93 访问 GUI 小部件,您对 self.parent() \xe2\x80\x93 的调用正在执行的操作是未定义的行为,在您的情况下,这意味着崩溃。

\n

来自 Qt 文档虽然 QObject 是可重入的,但 GUI 类(尤其是 QWidget 及其所有子类)是不可重入的。它们只能在主线程中使用。如前所述,还必须从该线程调用 QCoreApplication::exec()。

\n
\n

所以最后,我认为我应该只使用信号槽系统来做到这一点。

\n
    \n
  1. 它是否正确?
  2. \n
  3. 这是否仅在函数调用时需要,或者我可以在运行时以线程安全的方式操作其他对象中某些对象的字段吗?例如,我有一个可从多个其他对象访问的选项对象,并且我经常从不同来源更改其中的参数。线程安全还是不安全?
  4. \n
\n

接下来的事情是,我在示例代码中重新创建这种线程不安全行为时遇到问题。Qt 文档说 QObject 存在于不同的线程中。这意味着,以下 Qt 应用程序应该是线程不安全的(如果我正确理解的话)。

\n
from PyQt4 import QtGui\nimport sys\n\nclass TestWidget(QtGui.QWidget):\n    def __init__(self,string):\n        super(TestWidget,self).__init__()\n        self.button = QtGui.QPushButton(string,parent=self)\n        self.button.clicked.connect(self.buttonClicked)\n        \n        # just to …
Run Code Online (Sandbox Code Playgroud)

python qt multithreading pyqt4

5
推荐指数
1
解决办法
6096
查看次数

python list / numpy array 索引使用元组解包可能吗?

我想知道元组解包是否可以用于“索引从...到”类型的样式,因此使用inds = (a,b),M[*inds]会导致M[a:b].

我经常有一些元组,其中包含我用来将数据分割成一些有趣的子集的索引,并且我认为像上面建议的那样会很方便。有没有办法做到这一点?

感谢您的意见

python numpy

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

标签 统计

python ×2

multithreading ×1

numpy ×1

pyqt4 ×1

qt ×1