diff --git a/python/rds_parser_table_qt.py b/python/rds_parser_table_qt.py index 100ca3e..01a8860 100644 --- a/python/rds_parser_table_qt.py +++ b/python/rds_parser_table_qt.py @@ -176,7 +176,7 @@ class rds_parser_table_qt(gr.sync_block):#START f=open(self.workdir+'pty-list.csv') reader = csv.reader(f, delimiter=',', quotechar='"') next(reader)#skip header - self.pty_dict=dict((int(rows[0]),unicode(rows[1],errors='ignore')) + self.pty_dict=dict((int(rows[0]),rows[1]) for rows in reader) f.close() self.minute_count=0 @@ -269,7 +269,7 @@ class rds_parser_table_qt(gr.sync_block):#START self.RDS_data[PI]["time"]={"timestring":"88:88","datestring":"00-00-0000","datetime":None} self.RDS_data[PI]["wrong_block_ratio"]=1#100% def handle_msg(self, msg, port): #port from 0 to 3 - if pmt.to_long(pmt.car(msg))==1: #sync/desync messages from RDS decoder + if pmt.is_integer(pmt.car(msg)) and pmt.to_long(pmt.car(msg))==1: #sync/desync messages from RDS decoder synced=pmt.to_python(pmt.cdr(msg)) #print("port:%i, data: %s"%(port,data)) self.decoders[port]['synced']=synced @@ -280,21 +280,21 @@ class rds_parser_table_qt(gr.sync_block):#START wrong_block_ratio=1#100% self.RDS_data[PI]["wrong_block_ratio"]=wrong_block_ratio self.signals.DataUpdateEvent.emit({'PI':PI,'wrong_block_ratio':wrong_block_ratio,'dots':dots}) - elif pmt.to_long(pmt.car(msg))==2: #wrong_block_ratio messages from RDS decoder + elif pmt.is_integer(pmt.car(msg)) and pmt.to_long(pmt.car(msg))==2: #wrong_block_ratio messages from RDS decoder wrong_block_ratio=pmt.to_python(pmt.cdr(msg)) PI=self.decoders[port]['PI'] if self.RDS_data.has_key(PI): dots="."*self.RDS_data[PI]["blockcounts"]["any"] self.RDS_data[PI]["wrong_block_ratio"]=wrong_block_ratio self.signals.DataUpdateEvent.emit({'PI':PI,'wrong_block_ratio':wrong_block_ratio,'dots':dots}) - elif pmt.to_long(pmt.car(msg))==3: #carrier quality message + elif pmt.is_integer(pmt.car(msg)) and pmt.to_long(pmt.car(msg))==3: #carrier quality message pilot_SNR=pmt.to_long(pmt.cdr(msg)) self.decoders[port]['pilot_SNR']=pilot_SNR self.update_freq() PI=self.decoders[port]['PI'] if self.RDS_data.has_key(PI): self.signals.DataUpdateEvent.emit({'PI':PI,'pilot_SNR':pilot_SNR}) - elif pmt.to_long(pmt.car(msg))==4: #mode messages from RDS sync_decim + elif pmt.is_integer(pmt.car(msg)) and pmt.to_long(pmt.car(msg))==4: #mode messages from RDS sync_decim mode=pmt.to_python(pmt.cdr(msg)) self.decoders[port]['decim_mode']=mode self.update_freq() @@ -322,11 +322,11 @@ class rds_parser_table_qt(gr.sync_block):#START groupNR=array[2]&0b11110000 groupVar=array[2]&0b00001000 if (groupVar == 0): - groupType=str(groupNR >> 4)+"A" + groupType=bytes(groupNR >> 4)+"A" else: - groupType=str(groupNR >> 4)+"B" + groupType=bytes(groupNR >> 4)+"B" #if self.debug: - #PI=str(port)+"_%02X%02X" %(array[0],array[1]) + #PI=bytes(port)+"_%02X%02X" %(array[0],array[1]) #else: #PI="%02X%02X" %(array[0],array[1]) PI="%02X%02X" %(array[0],array[1]) @@ -365,7 +365,7 @@ class rds_parser_table_qt(gr.sync_block):#START if self.RDS_data[PI]["blockcounts"]["any"]==5: self.RDS_data[PI]["blockcounts"]["any"]=0 if self.writeDB: - t=(str(PI),groupType,self.RDS_data[PI]["blockcounts"][groupType])#TODO only update DB every few seconds + t=(bytes(PI),groupType,self.RDS_data[PI]["blockcounts"][groupType])#TODO only update DB every few seconds db.execute("INSERT OR REPLACE INTO grouptypeCounts (PI,grouptype,count) VALUES (?,?,?)",t) dots="."*self.RDS_data[PI]["blockcounts"]["any"] self.RDS_data[PI]["TP"]=TP @@ -380,7 +380,7 @@ class rds_parser_table_qt(gr.sync_block):#START #add any received groups to DB (slow) #content="%02X%02X%02X%02X%02X" %(array[3]&0x1f,array[4],array[5],array[6],array[7]) - #t=(str(datetime.now()),PI,self.RDS_data[PI]["PSN"],groupType,content) + #t=(bytes(datetime.now()),PI,self.RDS_data[PI]["PSN"],groupType,content) #db.execute("INSERT INTO groups VALUES (?,?,?,?,?)",t) if (groupType == "0A"):#AF PSN @@ -396,7 +396,7 @@ class rds_parser_table_qt(gr.sync_block):#START MS=(array[3]>>3)&0x1 self.RDS_data[PI]["TA"]=TA #style='font-family:Courier New;color:%s' - flag_string="TP:%i, TA:%i, MS:%i, DI:%s"%(TP,TA,MS,str(self.RDS_data[PI]["DI"])) + flag_string="TP:%i, TA:%i, MS:%i, DI:%s"%(TP,TA,MS,bytes(self.RDS_data[PI]["DI"])) pty_colored=self.RDS_data[PI]["PTY"] if TP==1: if TA==1: @@ -486,7 +486,7 @@ class rds_parser_table_qt(gr.sync_block):#START #textcolor="black" textcolor=""#use default color (white if background is black) if not self.RDS_data[PI]["internals"]["last_valid_psn"]==self.RDS_data[PI]["PSN"]:#ignore duplicates - t=(str(datetime.now()),PI,self.RDS_data[PI]["PSN"],"PSN_valid",self.RDS_data[PI]["PSN"]) + t=(bytes(datetime.now()),PI,self.RDS_data[PI]["PSN"],"PSN_valid",self.RDS_data[PI]["PSN"]) if self.writeDB: db.execute("INSERT INTO data (time,PI,PSN,dataType,data) VALUES (?,?,?,?,?)",t) t=(self.RDS_data[PI]["PSN"],PI) @@ -511,12 +511,12 @@ class rds_parser_table_qt(gr.sync_block):#START PIN_valid= PIN_day in range(1,32) and PIN_hour in range(0,24) and PIN_minute in range(0,60) if PIN_valid: self.RDS_data[PI]["PIN"]=[PIN_day,PIN_hour,PIN_minute] - data_string="radio paging code:%i,LA:%i,variant:%i,SLC:%04X,PIN (valid):%s "%(radio_paging,LA,variant,SLC,str([PIN_day,PIN_hour,PIN_minute])) + data_string="radio paging code:%i,LA:%i,variant:%i,SLC:%04X,PIN (valid):%s "%(radio_paging,LA,variant,SLC,bytes([PIN_day,PIN_hour,PIN_minute])) else: data_string="radio paging code:%i,LA:%i,variant:%i,SLC:%04X,PIN:%04X "%(radio_paging,LA,variant,SLC,PIN) #%02X%02X%02X%02X%02X - t=(str(datetime.now()),PI,self.RDS_data[PI]["PSN"],"PIN",data_string) + t=(bytes(datetime.now()),PI,self.RDS_data[PI]["PSN"],"PIN",data_string) if self.writeDB: db.execute("INSERT INTO data (time,PI,PSN,dataType,data) VALUES (?,?,?,?,?)",t) if self.debug and not variant==0:#print if not seen before @@ -558,7 +558,7 @@ class rds_parser_table_qt(gr.sync_block):#START segment=chr(array[4])+chr(array[5])+chr(array[6])+chr(array[7])#EDIT:latedecode #self.signals.DataUpdateEvent.emit({'col':5,'row':port,'PI':PI,'groupType':groupType,'adress':adr,'segment':segment}) - text_list=list(self.RDS_data[PI]["RT_"+str(ab_flag)]["RT"]) + text_list=list(self.RDS_data[PI]["RT_"+bytes(ab_flag)]["RT"]) #determine text length: try: text_end=text_list.index('\r') @@ -576,27 +576,27 @@ class rds_parser_table_qt(gr.sync_block):#START text_list=['_']*64 #clear text text_list[adr*4:adr*4+4]=segment #reset stored text: - #self.RDS_data[PI]["RT_"+str(ab_flag)]["RT"]="_"*64 #done in text_list - self.RDS_data[PI]["RT_"+str(ab_flag)]["RT_valid"]=[False]*64 + #self.RDS_data[PI]["RT_"+bytes(ab_flag)]["RT"]="_"*64 #done in text_list + self.RDS_data[PI]["RT_"+bytes(ab_flag)]["RT_valid"]=[False]*64 #predict RT from last texts: for rt in self.RDS_data[PI]["internals"]["RT_history"]: if rt[adr*4:adr*4+4]==list(segment): - self.RDS_data[PI]["RT_"+str(ab_flag)]["RT"]="".join(rt) + self.RDS_data[PI]["RT_"+bytes(ab_flag)]["RT"]="".join(rt) predicted=True - self.RDS_data[PI]["RT_"+str(ab_flag)]["RT_valid"][adr*4:adr*4+4]=[True] *4 + self.RDS_data[PI]["RT_"+bytes(ab_flag)]["RT_valid"][adr*4:adr*4+4]=[True] *4 if not predicted: - self.RDS_data[PI]["RT_"+str(ab_flag)]["RT"]="".join(text_list) + self.RDS_data[PI]["RT_"+bytes(ab_flag)]["RT"]="".join(text_list) #determine if (new) text is valid - self.RDS_data[PI]["RT_"+str(ab_flag)]["RT_all_valid"]=True + self.RDS_data[PI]["RT_"+bytes(ab_flag)]["RT_all_valid"]=True for i in range(0,text_end): - if (not self.RDS_data[PI]["RT_"+str(ab_flag)]["RT_valid"][i]): - self.RDS_data[PI]["RT_"+str(ab_flag)]["RT_all_valid"] = False - if(self.RDS_data[PI]["RT_"+str(ab_flag)]["RT_all_valid"]): + if (not self.RDS_data[PI]["RT_"+bytes(ab_flag)]["RT_valid"][i]): + self.RDS_data[PI]["RT_"+bytes(ab_flag)]["RT_all_valid"] = False + if(self.RDS_data[PI]["RT_"+bytes(ab_flag)]["RT_all_valid"]): #textcolor="black" textcolor=""#use default color (white if background is black) - l=list(self.RDS_data[PI]["RT_"+str(ab_flag)]["RT"]) + l=list(self.RDS_data[PI]["RT_"+bytes(ab_flag)]["RT"]) rt="".join(l[0:text_end])#remove underscores(default symbol) after line end marker if not self.RDS_data[PI]["internals"]["last_valid_rt"]==rt:#ignore duplicates #TODO add 2nd order duplicates ABAB self.RDS_data[PI]["internals"]["RT_history"].append(l) @@ -604,23 +604,23 @@ class rds_parser_table_qt(gr.sync_block):#START self.RDS_data[PI]["internals"]["RT_history"].pop(0) if self.writeDB: t=( - str(datetime.now()),PI,self.RDS_data[PI]["PSN"], + bytes(datetime.now()),PI,self.RDS_data[PI]["PSN"], "RT",self.decode_chars(rt) ) db.execute("INSERT INTO data (time,PI,PSN,dataType,data) VALUES (?,?,?,?,?)",t) self.RDS_data[PI]["internals"]["last_valid_rt"]=rt try:#save rt+ if it exist if self.writeDB: - t=(str(datetime.now()),PI, + t=(bytes(datetime.now()),PI, self.RDS_data[PI]["PSN"],"RT+", - self.decode_chars(str(self.RDS_data[PI]["RT+"])) + self.decode_chars(bytes(self.RDS_data[PI]["RT+"])) ) db.execute("INSERT INTO data (time,PI,PSN,dataType,data) VALUES (?,?,?,?,?)",t) except KeyError: pass#no rt+ -> dont save else: textcolor="gray" - display_text=self.decode_chars(self.RDS_data[PI]["RT_"+str(ab_flag)]["RT"].split("\r")[0]) + display_text=self.decode_chars(self.RDS_data[PI]["RT_"+bytes(ab_flag)]["RT"].split("\r")[0]) formatted_text=self.color_text(display_text,adr*4,adr*4+4,textcolor,segmentcolor) rtcol=self.colorder.index('text') self.signals.DataUpdateEvent.emit({'col':rtcol,'row':port,'PI':PI,'string':formatted_text}) @@ -630,9 +630,9 @@ class rds_parser_table_qt(gr.sync_block):#START app_data=int((array[4]<<8)|(array[5]))#content defined by ODA-app app_group_raw=int(array[3]&0x1f) #group type in which this app is sent if (app_group_raw&0x1 == 0): - app_group=str(app_group_raw >> 1)+"A" + app_group=bytes(app_group_raw >> 1)+"A" else: - app_group=str(app_group_raw >> 1)+"B" + app_group=bytes(app_group_raw >> 1)+"B" if not self.RDS_data[PI]["AID_list"].has_key(AID):#new ODA found try: @@ -715,7 +715,7 @@ class rds_parser_table_qt(gr.sync_block):#START self.RDS_data[PI]["time"]["datestring"]=datestring self.RDS_data[PI]["time"]["datetime"]=datetime(date.year,date.month,date.day,hours,minutes)+timedelta(hours=local_time_offset) if self.writeDB: - t=(str(datetime.now()),PI,self.RDS_data[PI]["PSN"],"CT",datestring+" "+timestring+"; datecode(MJD):"+str(datecode)) + t=(bytes(datetime.now()),PI,self.RDS_data[PI]["PSN"],"CT",datestring+" "+timestring+"; datecode(MJD):"+bytes(datecode)) db.execute("INSERT INTO data (time,PI,PSN,dataType,data) VALUES (?,?,?,?,?)",t) except ValueError as e: print("ERROR: could not interpret time or date:") @@ -738,7 +738,7 @@ class rds_parser_table_qt(gr.sync_block):#START self.IH_data[PI][ih_data]={} self.IH_data[PI][ih_data]["count"]=0 self.IH_data[PI][ih_data]["count"]+=1 - self.IH_data[PI][ih_data]["last_time"]=str(datetime.now()) + self.IH_data[PI][ih_data]["last_time"]=bytes(datetime.now()) #TMC-alert-c (grouptype mostly 8A): elif (self.RDS_data[PI]["AID_list"].has_key(52550) and self.RDS_data[PI]["AID_list"][52550]["groupType"]==groupType):#TMC alert-C @@ -763,7 +763,7 @@ class rds_parser_table_qt(gr.sync_block):#START })#this gnuradio instance doesnt seem to be able to convert from numpy.int64 to pmt self.message_port_pub(pmt.intern('tmc_raw'), send_pmt) - #~ tmc_hash=hashlib.md5(str([PI,tmc_x,tmc_y,tmc_z])).hexdigest() + #~ tmc_hash=hashlib.md5(bytes([PI,tmc_x,tmc_y,tmc_z])).hexdigest() tmc_T=tmc_x>>4 #0:TMC-message 1:tuning info/service provider name #~ tmc_F=int((tmc_x>>3)&0x1) #identifies the message as a Single Group (F = 1) or Multi Group (F = 0) #~ Y15=int(tmc_y>>15) @@ -839,11 +839,11 @@ class rds_parser_table_qt(gr.sync_block):#START tag2_start=int((tag2>>5)&(2**6-1)) tag2_len=int(tag2&(2**5-1)) if not self.RDS_data[PI]["RT+"]["last_item_toggle_bit"] == item_toggle_bit: #new item - #self.RDS_data[PI]["RT+"]["history"][str(datetime.now())]=self.RDS_data[PI]["internals"]["last_rt_tooltip"] - t=(str(datetime.now()),PI,self.RDS_data[PI]["PSN"],"RT+",str(self.RDS_data[PI]["RT+"])) + #self.RDS_data[PI]["RT+"]["history"][bytes(datetime.now())]=self.RDS_data[PI]["internals"]["last_rt_tooltip"] + t=(bytes(datetime.now()),PI,self.RDS_data[PI]["PSN"],"RT+",bytes(self.RDS_data[PI]["RT+"])) if self.writeDB: db.execute("INSERT INTO data (time,PI,PSN,dataType,data) VALUES (?,?,?,?,?)",t) - self.RDS_data[PI]["RT+_history"][str(datetime.now())]=copy.deepcopy(self.RDS_data[PI]["RT+"])#save old item + self.RDS_data[PI]["RT+_history"][bytes(datetime.now())]=copy.deepcopy(self.RDS_data[PI]["RT+"])#save old item self.RDS_data[PI]["RT+"]["last_item_toggle_bit"] = item_toggle_bit rtcol=self.colorder.index('text') if self.debug: @@ -851,8 +851,8 @@ class rds_parser_table_qt(gr.sync_block):#START self.signals.DataUpdateEvent.emit({'col':rtcol,'row':port,'PI':PI,'tooltip':""}) if self.RDS_data[PI].has_key("RT_0"): ab_flag=self.RDS_data[PI]["RT_last_ab_flag"] - rt=self.RDS_data[PI]["RT_"+str(ab_flag)]["RT"] - rt_valid=self.RDS_data[PI]["RT_"+str(ab_flag)]["RT_valid"] + rt=self.RDS_data[PI]["RT_"+bytes(ab_flag)]["RT"] + rt_valid=self.RDS_data[PI]["RT_"+bytes(ab_flag)]["RT_valid"] if not tag1_type=="DUMMY_CLASS" and all(rt_valid[tag1_start:tag1_start+tag1_len+1]): self.RDS_data[PI]["RT+"][tag1_type]=rt[tag1_start:tag1_start+tag1_len+1] self.RDS_data[PI]["internals"]["RT+_times"][tag1_type]=time.time() @@ -872,8 +872,8 @@ class rds_parser_table_qt(gr.sync_block):#START self.signals.DataUpdateEvent.emit({'col':rtpcol,'row':port,'PI':PI,'string':tags}) if(tag2_type=="ITEM.TITLE" and self.RDS_data[PI].has_key("RT_0")):#TODO remove duplicate code ab_flag=self.RDS_data[PI]["RT_last_ab_flag"] - rt=self.RDS_data[PI]["RT_"+str(ab_flag)]["RT"] - rt_valid=self.RDS_data[PI]["RT_"+str(ab_flag)]["RT_valid"] + rt=self.RDS_data[PI]["RT_"+bytes(ab_flag)]["RT"] + rt_valid=self.RDS_data[PI]["RT_"+bytes(ab_flag)]["RT_valid"] artist="?" song="?" if all(rt_valid[tag1_start:tag1_start+tag1_len+1]): @@ -1050,7 +1050,7 @@ class rds_parser_table_qt(gr.sync_block):#START print("symbol not decoded: "+"?%02X?"%ord(char)+ "in string:"+return_string) pass - if not type(return_string)==unicode: + if not type(return_string)==str: code.interact(local=locals()) return return_string def color_text(self, text, start,end,textcolor,segmentcolor): @@ -1075,42 +1075,42 @@ class rds_parser_table_qt_Widget(QtWidgets.QWidget): self.setLayout(layout) #self.decoder_to_PI={} self.PI_to_row={} - self.table=QtGui.QTableWidget(self) + self.table=QtWidgets.QTableWidget(self) rowcount=0 self.table.setRowCount(rowcount) #self.colorder=['ID','freq','name','buttons','PTY','AF','time','text','quality'] self.colorder=tableobj.colorder self.table.setColumnCount(len(self.colorder)) - self.table.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers) #disallow editing + self.table.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) #disallow editing layout.addWidget(self.table) self.table.setHorizontalHeaderLabels(self.colorder) #self.table.setMaximumHeight(300)#TODO use dynamic value button_layout = Qt.QHBoxLayout() - codebutton = QtGui.QPushButton("code.interact") + codebutton = QtWidgets.QPushButton("code.interact") codebutton.clicked.connect(self.onCLick) button_layout.addWidget(codebutton) - ih_button = QtGui.QPushButton("show IH data") + ih_button = QtWidgets.QPushButton("show IH data") ih_button.clicked.connect(self.showIHdata) button_layout.addWidget(ih_button) - save_button = QtGui.QPushButton("save") + save_button = QtWidgets.QPushButton("save") save_button.clicked.connect(self.saveData) button_layout.addWidget(save_button) - print_button = QtGui.QPushButton("print profile") + print_button = QtWidgets.QPushButton("print profile") print_button.clicked.connect(self.printProfile) button_layout.addWidget(print_button) - mode_button = QtGui.QPushButton("searchMode") + mode_button = QtWidgets.QPushButton("searchMode") mode_button.clicked.connect(self.switchMode) button_layout.addWidget(mode_button) layout.addLayout(button_layout) label_layout = Qt.QHBoxLayout() - self.freq_label=QtGui.QLabel("decoder frequencies:") + self.freq_label=QtWidgets.QLabel("decoder frequencies:") self.freq_label.setWordWrap(True) - self.freq_label.setSizePolicy(QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, - QtGui.QSizePolicy.Ignored))#expand in horizontal direction and only wrap if window too small + self.freq_label.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, + QtWidgets.QSizePolicy.Ignored))#expand in horizontal direction and only wrap if window too small self.freq_label.setTextFormat(QtCore.Qt.RichText)#instead of AutoText - self.count_label=QtGui.QLabel("count:") + self.count_label=QtWidgets.QLabel("count:") self.count_label.setAlignment(QtCore.Qt.AlignRight) label_layout.addWidget(self.freq_label) label_layout.addWidget(self.count_label) @@ -1118,7 +1118,7 @@ class rds_parser_table_qt_Widget(QtWidgets.QWidget): #self.setMinimumSize(Qt.QSize(500,40*self.tableobj.nPorts)) self.setMinimumSize(Qt.QSize(500,40*(4+self.tableobj.nPorts))) self.lastResizeTime=0 - self.clip = QtGui.QApplication.clipboard() + self.clip = QtWidgets.QApplication.clipboard() #self.cb.clear(mode=cb.Clipboard ) #self.cb.setText("Clipboard Text", mode=cb.Clipboard) def keyPressEvent(self, e): @@ -1129,7 +1129,7 @@ class rds_parser_table_qt_Widget(QtWidgets.QWidget): if e.key() == QtCore.Qt.Key_C: #copy try: qs = self.table.cellWidget(selected.topRow(),selected.leftColumn()).text()#get QString from table - s=re.sub("<.*?>","", str(qs))#remove html tags + s=re.sub("<.*?>","", bytes(qs))#remove html tags self.clip.setText(s) except Exception as e: print(e) @@ -1138,25 +1138,25 @@ class rds_parser_table_qt_Widget(QtWidgets.QWidget): rowPosition = self.table.rowCount() self.table.insertRow(rowPosition) #for col in range(self.table.columnCount()-1):#all labels except in last column -> buttons -# self.table.setCellWidget(rowPosition,col,QtGui.QLabel()) +# self.table.setCellWidget(rowPosition,col,QtWidgets.QLabel()) #initialize labels everywhere: for col in range(self.table.columnCount()): - self.table.setCellWidget(rowPosition,col,QtGui.QLabel()) + self.table.setCellWidget(rowPosition,col,QtWidgets.QLabel()) button_layout = Qt.QHBoxLayout() - details_button=QtGui.QPushButton("Detail") + details_button=QtWidgets.QPushButton("Detail") details_button.clicked.connect(functools.partial(self.getDetails, row=rowPosition)) button_layout.addWidget(details_button) #2017-03-17 disabled LR buttons #2017-04-24 enabled LR buttons - left_button=QtGui.QPushButton("L") + left_button=QtWidgets.QPushButton("L") #left_button.clicked.connect(functools.partial(self.setAudio, row=rowPosition,audio_channel="left")) left_button.clicked.connect(functools.partial(self.setAudio2, row=rowPosition,audio_channel=0)) button_layout.addWidget(left_button) - center_button=QtGui.QPushButton("C") + center_button=QtWidgets.QPushButton("C") #center_button.clicked.connect(functools.partial(self.setAudio, row=rowPosition,audio_channel="center")) center_button.clicked.connect(functools.partial(self.setAudio2, row=rowPosition,audio_channel=1)) button_layout.addWidget(center_button) - right_button=QtGui.QPushButton("R") + right_button=QtWidgets.QPushButton("R") #right_button.clicked.connect(functools.partial(self.setAudio, row=rowPosition,audio_channel="right")) right_button.clicked.connect(functools.partial(self.setAudio2, row=rowPosition,audio_channel=2)) button_layout.addWidget(right_button) @@ -1213,7 +1213,7 @@ class rds_parser_table_qt_Widget(QtWidgets.QWidget): if event.has_key('AF'): #setAF PIcol=self.colorder.index('AF') - self.table.cellWidget(row,PIcol).setText(str(event['AF']['number'])) + self.table.cellWidget(row,PIcol).setText(bytes(event['AF']['number'])) if event.has_key('PSN'): #setPSN PSNcol=self.colorder.index('name') @@ -1231,7 +1231,7 @@ class rds_parser_table_qt_Widget(QtWidgets.QWidget): #send_pmt = pmt.string_to_symbol("switch mode") self.tableobj.message_port_pub(pmt.intern('ctrl'), send_pmt) def saveData(self): - filename="RDS_data_"+str(datetime.now())+".txt" + filename="RDS_data_"+bytes(datetime.now())+".txt" f=open(self.tableobj.workdir+filename,"w") rds_data=copy.deepcopy(self.tableobj.RDS_data) for PI in sorted(rds_data): @@ -1246,7 +1246,7 @@ class rds_parser_table_qt_Widget(QtWidgets.QWidget): print("data saved in file %s"%filename) def showIHdata(self): view=Qt.QDialog() - l=QtGui.QLabel("In House Data:\n%s"%pp.pformat(self.tableobj.IH_data)) + l=QtWidgets.QLabel("In House Data:\n%s"%pp.pformat(self.tableobj.IH_data)) l.setTextInteractionFlags(QtCore.Qt.TextSelectableByMouse | QtCore.Qt.TextSelectableByKeyboard) l.setWordWrap(True) @@ -1258,7 +1258,7 @@ class rds_parser_table_qt_Widget(QtWidgets.QWidget): def setAudio(self,row,audio_channel): PIcol=self.colorder.index('ID') - PI=str(self.table.cellWidget(row,PIcol).text()) + PI=bytes(self.table.cellWidget(row,PIcol).text()) freq=int(self.tableobj.RDS_data[PI]['AF']['main']) #print("setaudio row:%i, chan:%s, PI:%s,freq:%i"%(row,audio_channel,PI,freq)) send_pmt = pmt.pmt_to_python.pmt_from_dict({"cmd":"set_audio_freq", @@ -1271,7 +1271,7 @@ class rds_parser_table_qt_Widget(QtWidgets.QWidget): def setAudio2(self,row,audio_channel): PIcol=self.colorder.index('ID') - PI=str(self.table.cellWidget(row,PIcol).text()) + PI=bytes(self.table.cellWidget(row,PIcol).text()) #find port: for port,decoder in enumerate(self.tableobj.decoders): if decoder['PI']==PI: @@ -1284,7 +1284,7 @@ class rds_parser_table_qt_Widget(QtWidgets.QWidget): def getDetails(self,row): PIcol=self.colorder.index('ID') - PI=str(self.table.cellWidget(row,PIcol).text()) + PI=bytes(self.table.cellWidget(row,PIcol).text()) view = chart.DialogViewer() if self.tableobj.PI_dict.has_key(PI) and self.tableobj.PI_dict[PI]>3: #dont print piechart if no packets received (detected via EON) @@ -1297,7 +1297,7 @@ class rds_parser_table_qt_Widget(QtWidgets.QWidget): #and sorts based on integer valure of number in front for key in sorted(blockcounts,key=lambda elem: int(elem[0:-1])): count=blockcounts[key] - table.addRow([key+": "+str(count),count]) + table.addRow([key+": "+bytes(count),count]) mychart=chart.PieChart(table) view.setGraph(mychart) #view.resize(360, 240) @@ -1313,15 +1313,15 @@ class rds_parser_table_qt_Widget(QtWidgets.QWidget): #combine char lists into strings (more compact) except KeyError: pass - l=QtGui.QLabel("Data:%s"%pp.pformat(rds_data)) + l=QtWidgets.QLabel("Data:%s"%pp.pformat(rds_data)) l.setTextInteractionFlags(QtCore.Qt.TextSelectableByMouse | QtCore.Qt.TextSelectableByKeyboard) l.setWordWrap(True) - #l=QtGui.QLabel("Data:") + #l=QtWidgets.QLabel("Data:") #view.layout().addWidget(l) - scrollArea = QtGui.QScrollArea(self) + scrollArea = QtWidgets.QScrollArea(self) scrollArea.setWidgetResizable(True) scrollArea.setWidget(l) view.layout().addWidget(scrollArea)