내 우분투 (14.04) OS에서 원시 마우스 데이터를 파이썬으로 처리하는 서사시 투쟁 중에 여기서 많은 도움을 얻었습니다. 다시 붙어 있습니다. 나는 pyqtgraph의 "쉬운"것을 이해하는 것이 매우 어려워 보인다. 내가하고 싶은 건 내가 시작/일시 정지/중지 버튼, 숫자를 보여줄 목록 위젯, 그리고 내가 무슨 일이 일어나는지 볼 수있는 줄거리가있는 멋진 작은 GUI로 코드를 래핑하는 것이다. 나는 나를 위해 주요한 문제를 짐작한다. 나는 pyqt에서이 모든 사건을 아주 잘 이해하고있다. 내가 창은 정지하고 아무 일도 발생하지 않습니다, 시작 버튼을 누르면pyqtgraph가있는 Python 실시간 mousedata
#!/usr/bin/python
import threading
import struct
import time
import numpy as np
from PyQt4 import QtGui # (the example applies equally well to PySide)
from PyQt4 import QtCore
import pyqtgraph as pg
##
data =[(0,0)]
sum_data = [(0,0)]
file = open("/dev/input/mouse2", "rb")
def getMouseEvent():
buf = file.read(3);
#python 2 & 3 compatibility
button = buf[0] if isinstance(buf[0], int) else ord(buf[0])
x,y = struct.unpack("bb", buf[1:]);
print x,y
return x, y
def mouseCollect():
while True:
data.append(getMouseEvent())
sum_data.append(tuple(map(sum,zip(sum_data[-1],data[-1]))))
plot.plot(sum_data[0], clear=True)
pg.QtGui.QApplication.processEvents()
print sum_data[-1]
## Always start by initializing Qt (only once per application)
app = QtGui.QApplication([])
## Define a top-level widget to hold everything
w = QtGui.QWidget()
## Create some widgets to be placed inside
btn1 = QtGui.QPushButton('Start')
listw = QtGui.QListWidget()
plot = pg.PlotWidget()
def start_btn():
print 'test'
threading.Thread(target=mouseCollect).start()
btn1.clicked.connect(start_btn)
## Create a grid layout to manage the widgets size and position
layout = QtGui.QGridLayout()
w.setLayout(layout)
## Add widgets to the layout in their proper positions
layout.addWidget(btn1, 0, 0) # button goes in upper-left
layout.addWidget(plot, 0, 1, 4, 1)
## Display the widget as a new window
w.show()
## Start the Qt event loop
app.exec_()
##------------------------------------------------------------------
: 어쨌든 내가 원하는 위젯을 가지고있는 "쉽게"예를 복용, 나는 (더 최소한의 편집) 내 코드를 구현하지 못한다. 내 생각에, 버튼을 누르면, 그곳의 메토 상태에 연결되고 그냥 그 일을하고있는 것입니다. 좋아, 나는 무한 루프가 있지만 적어도 나는 뭔가를 봐야한다고 생각했다. 모든 도움이 절망적입니다. 또한이 문제에 관해 좋은 정보를 얻으려는 요령은 대단히 환영합니다.
관련 편집하십시오 QTimer를 사용하는 반복적 인 업데이트를 echocage
는 [A를 제공 할 수
더 또는 덜 최종 코드 (전체 코드가 아닌)는 이제 다음과 같습니다 최소 예] (http://stackoverflow.com/help/mcve)? 만약 당신이 말하는 것은 버튼이 작동하고'mouseCollect'가 호출된다면, 문제는'mouseCollect'에 있습니다 -이 예제에서는 버튼이 전혀 필요하지 않습니다. 또한 들여 쓰기가 올바른지 확인하십시오. – Lack
수정 됨. 나는 더 많이 자르고, 아직도 완전해야하는 곳을 모른다. :) 그것을 테스트했고 같은 문제가있다. 고마워. – user3759978
좋아, 문제는 당신이 mouseCollect를 같은 스레드에서 실행하고 있다는 것입니다. 루프에서 영원히 기다리고 있기 때문에 마우스 이벤트 핸들러가 반환하지 않으면 GUI가 정지됩니다. 이 문제를 피하려면 mouseCollect를 새 스레드에서 실행 해보십시오. 그러나 PyQT가 멀티 스레드 호출을 처리하는 방법을 알려주지는 못합니다. 당신은 (대상 = mouseCollect) .start()를 스레딩 모듈에서 스레드를 가져 오기 및 '스레드를 호출하여 ' 당신은 한 번만 수행하면 그렇게 할 수 있습니다 당신은 본체에 그것을 할 경우에도 아마 수 프로그램의 – Echocage