私はQtDesignerで作成されたウィンドウアプリケーションのプログレスバーに8個の値を渡す関数を作成しようとしています。 実際にこの値を生成する関数があります。値を取得して値を表示するプログレスバーを更新するために毎秒実行したい。Pythonでシグナルが出ると終了コード139が発生する
- PythonのQtの開発: は、私は、Pythonとグラフィックアプリを作って動的に更新progessバーでアプリを作るについてのチュートリアルを組み合わせhttps://www.youtube.com/watch?v=eD91nE8q8Nk スレッドと
- PyQtはプログレスバー:https://www.youtube.com/watch?v=ivcxZSHL7jM
問題は値が正しく渡されていることですが、信号を送信するとアプリ全体がメッセージでクラッシュします:
ここProcess finished with exit code 139 (interrupted by signal 11: SIGSEGV)
私のコードです:値(probkowanie.py)を生成
モジュール:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from PySide.QtCore import *
from PySide.QtGui import *
from PyQt4 import QtCore
import sys
import time
import signalPreview # window library
import probkowanie # values generating library
class MainDialog(QDialog, signalPreview.Ui_mainDialog):
def __init__(self, parent=None):
super(MainDialog, self).__init__(parent)
self.setupUi(self)
self.threadclass = ThreadClass()
self.threadclass.start()
self.connect(self.threadclass, QtCore.SIGNAL('MYO_SIGNALS'), self.updateProgressBars)
def updateProgressBars(self, signals):
self.progressBar.setValue(signals[0])
class ThreadClass(QtCore.QThread):
def __init__(self, parent = None):
super(ThreadClass, self).__init__(parent)
def run(self):
while 1:
signals = probkowanie.getSignals()
self.emit(QtCore.SIGNAL('MYO_SIGNALS'), 5) # this line causes crash
print signals # it works correctly
app = QApplication(sys.argv)
form = MainDialog()
form.show()
app.exec_()
:
import time
from random import randint
import threading
def getSignals():
time.sleep(1)
signals = (randint(0, 100), randint(0, 100), randint(0, 100), randint(0, 100), randint(0, 100), randint(0, 100), randint(0, 100), randint(0, 100),)
return signals
、ここでは、メインプログラムコードであります私はそれがライブラリを混在させることによって引き起こされるかもしれないと思う。チュートリアル2はPyQt4に基づいていますが、PySideのQtCoreを使用しています。チュートリアル番号1はPySideをベースにしているため、私の決定があります。
from PySide import QtCore
from PyQt4 import QtCore
にその後私は、私が何をすべきかわからないもの、エラーの別の束を得る: Traceback (most recent call last):
File "/usr/lib/pycharm/helpers/pydev/pydevd.py", line 1580, in <module>
globals = debugger.run(setup['file'], None, None, is_module)
File "/usr/lib/pycharm/helpers/pydev/pydevd.py", line 964, in run
pydev_imports.execfile(file, globals, locals) # execute the script
File "/mnt/Grubas/Projekty/Biomed/MYO/myo.py", line 36, in <module>
form = MainDialog()
File "/mnt/Grubas/Projekty/Biomed/MYO/myo.py", line 20, in __init__
self.connect(self.threadclass, QtCore.SIGNAL('MYO_SIGNALS'), self.updateProgressBars)
TypeError: 'PySide.QtCore.QObject.connect' called with wrong argument types:
PySide.QtCore.QObject.connect(ThreadClass, str, instancemethod)
Supported signatures:
PySide.QtCore.QObject.connect(PySide.QtCore.QObject, str, callable, PySide.QtCore.Qt.ConnectionType = Qt.AutoConnection)
PySide.QtCore.QObject.connect(PySide.QtCore.QObject, PySide.QtCore.QMetaMethod, PySide.QtCore.QObject, PySide.QtCore.QMetaMethod, PySide.QtCore.Qt.ConnectionType = Qt.AutoConnection)
PySide.QtCore.QObject.connect(PySide.QtCore.QObject, str, PySide.QtCore.QObject, str, PySide.QtCore.Qt.ConnectionType = Qt.AutoConnection)
PySide.QtCore.QObject.connect(PySide.QtCore.QObject, str, str, PySide.QtCore.Qt.ConnectionType = Qt.AutoConnection) PySide.QtCore.QObject.connect(str, callable, PySide.QtCore.Qt.ConnectionType = Qt.AutoConnection)
PySide.QtCore.QObject.connect(str, PySide.QtCore.QObject, str, PySide.QtCore.Qt.ConnectionType = Qt.AutoConnection)
@EDIT 私が変えてみました@ekhumoroスクリプトで提案された変更を行った後、クラッシュするが、今は別のエラーが発生する:
QObject::connect: Cannot queue arguments of type 'object' (Make sure 'object' is registered using qRegisterMetaType().)
私は自分で解決策を探すようにしましたが、必要なコードが見つかりませんでした。私はまた、(タプル)または(リスト)に(物体)からの信号の種類を変換しようとしたが、それは別のエラーにつながる:私が見つけ
TypeError: Unknown type used to call meta function (that may be a signal): tuple
最も溶液はPyQtはに基づいています。 PySideのための簡単な書き換え方法はありますか?ここ は正しいように思えるが、PyQtはを使用して作られているソリューションの一例です: https://stackoverflow.com/a/2595607/2550466
私は私のポストを編集したため、追加的なエラーが発生します。型 'オブジェクト'の引数をキューに入れる方法 – Asmox
@Asmox。私はあなたが古いバージョンのpysideを使用しているに違いないと思います。とにかく、代わりにpyqt4を使用するように私の答えを更新しました。これは大丈夫です。 – ekhumoro
ありがとう、すべて正常に動作します! – Asmox