Всем привет!
Недавно столкнулся с необходимостью написать программу по управлению видеоматрицей по COM-порту. Отыпа программирования в Python не имею. Написал программу, но работает очень странно.
Установлен Python2.7 + PyGTK.
При работе через переходник USB-COM все нормально работает, все коды шлются через порт. При работе через встроенный в ноут COM-порт при нажатии кнопки записи в порт приложение зависает и ничего не шлется.
Подскажите в чем проблема?
Вот текст программы:
#!/usr/bin/env python
# coding: utf-8
import sys
import os
import serial
import importlib
try:
import pygtk
pygtk.require('2.0')
except:
sys.exit(1)
try:
import gtk
import gtk.glade
except:
sys.exit(1)
class App:
def __init__(self):
# Загружаем файл интерфейса
self.gladefile = “Routing2.glade”
# дерево элементов интерфейса
self.widgetsTree = gtk.glade.XML(self.gladefile)
# Словарик, задающий связи событий с функциями-обработчиками
dic = { “button1_clicked_cb”: self.pushbutton_source,
“button2_clicked_cb”: self.pushbutton_source,
“button3_clicked_cb”: self.pushbutton_source,
“button4_clicked_cb”: self.pushbutton_source,
“button5_clicked_cb”: self.pushbutton_destination,
“button6_clicked_cb”: self.pushbutton_destination,
“button7_clicked_cb”: self.pushbutton_destination,
“button8_clicked_cb”: self.pushbutton_destination,}
# Магическая команда, соединяющая сигналы с обработчиками
self.widgetsTree.signal_autoconnect(dic)
# Соединяем событие закрытия окна с функцией завершения приложения
self.window = self.widgetsTree.get_widget(“window1”)
if (self.window):
self.window.connect(“destroy”, self.close_app)
# А это уже логика приложения. Задаём маршруты для нажатия каждой кнопки.
# Запоминаем номер выбранного источника
self.routes = {'button1': ('0', ‘Image1’),
‘button2’: ('1', ‘LampCam’),
‘button3’: ('2', ‘RoomCam’),
‘button4’: ('3', ‘Multinput’),
#Коды маршрутизации в зависимости
#от комбинации источник-приемник
‘button5’: ('00110001', ‘00110010’,
‘00110011’, ‘00110100’, ‘textview1’),
‘button6’: ('00110101', ‘00110110’,
‘00110111’, ‘00111000’, ‘textview2’),
‘button7’: ('00111001', ‘01100001’,
‘01100010’, ‘01100011’, ‘textview3’),
‘button8’: ('01100100', ‘01100101’,
‘01100110’, ‘01100111’, ‘textview4’)}
#В переменную self.source записываем номер выбранного источника
#В переменную self.sourcename записываем имя выбранного источника
def pushbutton_source(self,widget):
self.source = self.routes
self.sourcename = self.routes
#Выбираем textview, в который будет записано имя выбранного источника
destinationview = self.widgetsTree.get_widget(self.routes)
#В выбранный textview записываем имя выбранного источника
destinationview.get_buffer().set_text(self.sourcename)
#В переменную destination записываем двоичный код маршрутизации
def pushbutton_destination(self,widget):
destination = self.routes
#Выбираем textview, в который будет записано имя выбранного источника
destinationview = self.widgetsTree.get_widget(self.routes)
#В выбранный textview записываем имя выбранного источника
destinationview.get_buffer().set_text(self.sourcename)
#Открываем порт COM17 и записываем в него переменную total
ser = serial.Serial('COM17', 19200, dsrdtr = 1, timeout = 0)
ser.write(destination+'\r')
ser.close()
def close_app(self, widget):
gtk.main_quit()
if __name__ == “__main__”:
app = App()
gtk.main()
p.s. не судите строго, если вам покажутся какие-то моменты ламерскими - так оно и есть. это моя первая программа. Заранее благодарен.