나는 QtDesigner로 만든 창 응용 프로그램의 진행 막대에 8 개의 값을 전달하는 함수를 만들려고합니다. 실제로이 값을 생성하는 함수가 있습니다. 나는 값을 표시하고 값을 표시하는 진행 막대를 업데이트하기 위해 매초마다 실행하려고합니다.파이썬에서 신호가 나오면 종료 코드 139가 발생합니다.
- 파이썬 Qt를 개발 : 는 파이썬과 그래픽 응용 프로그램을 동적으로 업데이트 통해 진행 상태 막대와 응용 프로그램을 만드는 방법에 대한 자습서를 결합 https://www.youtube.com/watch?v=eD91nE8q8Nk 스레드와
- PyQt는 진행 바 : https://www.youtube.com/watch?v=ivcxZSHL7jM
문제는 값이 올바르게 전달되지만 신호를 보내면 전체 앱이 다음 메시지와 함께 충돌합니다.
값 (probkowanie.py) 생성모듈 : 여기서
Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
691,363,210 내 코드
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
및 여기를 메인 프로그램 코드 :
#!/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_()
혼합 된 라이브러리가 원인 일 수 있습니다. 튜토리얼 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().)
나는 혼자 해결책을 찾으려고했지만, 내가 필요한 정확한 코드를 찾지 못했습니다. 또한, I (튜플) 또는 (목록)에서 (오브젝트)로부터의 신호의 형태를 변형하려고하지만, 다른 에러 리드 : I 발견
TypeError: Unknown type used to call meta function (that may be a signal): tuple
가장 PyQt는 솔루션을 기반으로한다. PySide 용으로 다시 작성할 수있는 쉬운 방법이 있습니까? 당신이 중 하나를 제거해야합니다, 그래서 https://stackoverflow.com/a/2595607/2550466
내 게시물을 편집 한으로 인해 추가 오류. 'object'유형의 인수를 대기열에 넣는 방법? – Asmox
@Asmox. 나는 당신이 pyside의 이전 버전을 사용해야한다고 생각합니다. 왜냐하면 그것이 저에게 잘 작동하기 때문입니다. 어쨌든, 대신 pyqt4를 사용하여 내 대답을 업데이 트했습니다, 당신을 위해 잘 작동합니다. – ekhumoro
고맙습니다. 이제 모든 것이 제대로 작동합니다! – Asmox