2014-01-04 2 views
1

У меня есть GUI-класс с (кнопка, два окна ввода и список), я хочу вставить в Listbox некоторые данные из другого класса. Вот мой GUI класс ...Как добавить данные в список из Tkinter из другого класса?

class GUI(object):  
def __init__(self, parent): 
    frame = Frame(parent.title("CAN Interface")) 
    frame.pack() 
    self.lbfirst = Label(frame, text="CAN ID:") 
    self.lbfirst.grid(row=1,column=0) 
    self.first = Entry(frame) 
    self.first.grid(row=2,column=0) 
    self.lbsecond = Label(frame, text="CAN Data:") 
    self.lbsecond.grid(row=1,column=2) 
    self.second = Entry(frame) 
    self.second.grid(row=2,column=2) 
    self.number=Button(frame, text="Send", fg="red", command=self.call_comm) 
    self.number.grid(row=5,column=1) 
    self.result = Listbox(frame) 
    self.result.grid(row=9,column=0, columnspan=5, sticky=N+S+E+W) 

def call_comm_rxc(self, data1): 
    print("in call_comm_rxc") 
    self.data1 = data1 
    self.result.insert (END, 'CAN ID : '+str(self.data1[0])+'|Length : '+str(self.data1[1])+'|Data : '+str(self.data1[2])) 

& это мой другой класс, от которого я хочу, чтобы получить доступ к self.result атрибут класса GUI

class Comm(Thread, Format, GUI): 
def __init__(self): 
    Thread.__init__(self) # Call the Thread class's init function 
def run(self): 
    while True: 
     # here need to add the code which needs to run all the time 
     print("in true")    
     self.CAN_Receive() 

def CAN_Receive(self): 
    print("in rxc") 
    #self.result1 = result1 
    self.data = Format.UnPack(self,b'\x12\x00\x00\x00\x03\x00\x00\x00\x01\x02\x03\x00\x00\x00\x00\x00') 
    GUI.call_comm_rxc(self, self.data) 

Ошибка, которую я облицовкой «AttributeError: объект„Comm“не имеет атрибута„результат“

Exception in thread Thread-1: 
Traceback (most recent call last): 
File "C:\Python33\lib\threading.py", line 901, in _bootstrap_inner 
self.run() 
File "E:\Studies\Ctech\MicroLab Files\example code.py", line 124, in run 
self.CAN_Receive() 
File "E:\Studies\Ctech\MicroLab Files\example code.py", line 141, in CAN_Receive 
GUI.call_comm_rxc(self, self.data) 
File "E:\Studies\Ctech\MicroLab Files\example code.py", line 110, in call_comm_rxc 
self.result.insert (END, 'CAN ID : '+str(self.data1[0])+'|Length : '+str(self.data1[1])+'|Data : '+str(self.data1[2])) 
AttributeError: 'Comm' object has no attribute 'result' 

Пожалуйста, помогите мне, как я могу вставить в Listbox из дочернего класса (Comm)

ответ

0

Инициализация класса GUI отсутствует в классе Comm.

Добавить GUI.__init__(self, parent) в Comm.__init__.

+0

Да, этот пункт отсутствовал, но как я могу передать родительский атрибут 'Comm .__ init __ (self, parent)', который будет передан в GUI .__ init __ (self, parent) '. У меня есть код 'testComm = Comm()' ' testComm.start()' ' корень = Tk()' ' приложение = GUI (корень)' ' root.mainloop()' – user3159610

+0

@ user3159610 Пут ' root = Tk() 'в начале и make' testComm = Comm (root) ' – Liteye

+0

Спасибо, это сработало для меня – user3159610

Смежные вопросы