ich möchte gerne eine Toolbox in meinen Plot integrieren um darin navigieren zu können.
Die GUI habe ich mit Qt Designer gebastelt und den Code in Python.
Wäre super wenn mir jemand einen Tipp geben kann.
Hier mal mein kompletter Code:
Code: Alles auswählen
from PyQt4 import QtCore, QtGui, uic
import os
import serial
import time
import thread
import numpy
import pylab
class UiDemo(QtGui.QDialog):
# constructor
def __init__(self):
QtGui.QDialog.__init__(self) #Aufruf des Konstruktors der Basisklasse
# Set up the user interface from Designer.
self.ui = uic.loadUi('rec_ui_motor_threading.ui')
self.ui.show()
self.ui.my_plot.axes.set_ylim(0,4100)
# Connect up the buttons to functions
self.connect(self.ui.pb_canc, QtCore.SIGNAL('clicked()'),
QtGui.qApp, QtCore.SLOT('quit()'))
self.connect(self.ui.pb_rec, QtCore.SIGNAL("clicked()"),
self.run_and_rec)
self.connect(self.ui.pb_run,QtCore.SIGNAL("clicked()"),
self.run_motor)
# take spinbox values
self.connect(self.ui.dauer, QtCore.SIGNAL('valueChanged(int)'),
self.change_motor_values)
self.connect(self.ui.drehzahl, QtCore.SIGNAL('valueChanged(QString)'),
self.change_motor_values)
#Variablen definieren
self.dauer = 1
self.drehzahl = -180
def change_motor_values(self):
self.dauer = self.ui.dauer.value()
self.drehzahl = self.ui.drehzahl.value()*-1 #spinning direction as in GUI
def run_motor(self):##########################
ser = serial.Serial(0)
ser.baudrate = 57600
ser.timeout = 1
ser.bytesize = 8
ser.write("VR;")
ser.write("EO=1;")
ser.write("MO=1;")
my_string = "JV = %d;"%self.drehzahl
ser.write(my_string)
ser.write("BG;")
time.sleep(self.dauer)
ser.write("MO=0;")
ser.close()
def run_and_rec(self):
thread.start_new_thread(self.get_values,(()))
thread.start_new_thread(self.run_motor,(()))
def get_values(self):
#os.system("C:\\Users\\witt_bo\\Programmieren\\workspace_c\\recording_get_encoder_data\\Debug\\recording_get_encoder_data.exe")
my_filename = open("C:\\Users\\witt_bo\\Dokumente\\Messdaten_Heidenhain\\letzter_Dateiname\\last_string.txt","r")#Dokument oeffnen
for zeilen in my_filename:
filename1 = zeilen
filename = "C:\Users\witt_bo\Dokumente\\Messdaten_Heidenhain\\Position\\" + filename1
filename2 = "C:\Users\witt_bo\Dokumente\\Messdaten_Heidenhain\\PositionAB\\" + filename1
my_print_file = open(filename2,"w")
my_obj_name = open(filename, "r")
encoder1 = []
encoder2 = []
a = 0
b = 0
cnt = 1 # number of pitches in total (55 pitches/360 deg)
cnt2 = 1
neu, neu2 = 0, 0
alt, alt2 = 0, 0
zaehler, zaehler2 = 0, 0
diff = 0
min_diff = 100
max_diff = 0
start_cnt = 0
zaehlerstand = 0
for zeilen in my_obj_name:
a = float(zeilen[46:56]) # encoder 1
b = float(zeilen[78:88]) # encoder 3
if a > 4096:
cnt = int(zeilen[46:56])/4096
a = a - 4096*cnt
neu = a
if neu > alt:
alt = neu
if neu < alt:
zaehler += 1
alt = 0
if b > 4096:
cnt2 = int(zeilen[78:88])/4096
b = b - 4096*cnt2
neu2 = b
if neu2 > alt2:
alt2 = neu2
if neu2 < alt2:
zaehler2 += 1
alt2 = 0
encoder1.append(a)
encoder2.append(b)
my_print_file.write("%010d %010d %d %d\n" % (a, b, zaehler, zaehler2))
for i in range(len(encoder1)): #gets the minimum difference between a and b
if encoder1[i] > encoder2[i]:
diff = encoder1[i]-encoder2[i]
else:
diff = encoder2[i]-encoder1[i]
if diff < min_diff:
min_diff = diff
zaehlerstand = i
print "kleinste Differez: ",min_diff," Zaehlerstand ",zaehlerstand
my_print_file.close
my_obj_name.close
y = numpy.array(encoder1) #55 pitches
z = numpy.array(encoder2) #56 pitches
x = z - y
t = numpy.arange(0,len(encoder1),1)
self.ui.my_plot.axes.hold(False)
uiDemo.ui.setWindowTitle("hallo du raeuber")
#plotHandle1 = self.ui.my_plot.axes.plot(t,y,"k",t,z,"c",t,x,"r")
plotHandle1 = self.ui.my_plot.axes.plot(t,z,"b", t,y,"r")
#plotHandle1 = self.ui.my_plot.axes.plot(t,x,"black",linewidth=2)
self.ui.my_plot.axes.legend([plotHandle1],["55 Zaehne","56 Zaehne", "absolut"])
self.ui.my_plot.axes.set_xlim(500,540)
self.ui.my_plot.draw()
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
uiDemo = UiDemo()#neue Instanz der Klasse UiDemo
sys.exit(app.exec_())
ich weiß auch nicht wie ich die Legende so verschieben kann das sie nicht mitten im Plot hängt.
Bin über jede Hilfestellung und jeden Tipp dankbar.
Schöne Grüße aus Bayern