python - Attributeerror: 'int' object has no attribute 'insert' -


basically when run on windows has no error run in linux, shows attributeerror: 'int' object has no attribute 'insert'. problem anyone?

the insert can found in lap method , self.m.insert(end, self.laps[-1]).

from tkinter import * import time  class stopwatch(frame):       """ implements stop watch frame widget. """                                                                     def __init__(self, parent=none, **kw):                 frame.__init__(self, parent, kw)         self._start = 0.0                 self._elapsedtime = 0.0         self._running = 0         self.timestr = stringvar()         self.e = 0         self.m = 0         self.makewidgets()         self.laps = []         self.lapmod2 = 0         self.today = time.strftime("%d %b %y %h-%m-%s", time.localtime())      def makewidgets(self):                                  """ make time label. """         l1 = label(self, text='----file name----')         l1.pack(fill=x, expand=no, pady=1, padx=2)          self.e = entry(self)         self.e.pack(pady=2, padx=2)          l = label(self, textvariable=self.timestr)         self._settime(self._elapsedtime)         l.pack(fill=x, expand=no, pady=3, padx=2)          l2 = label(self, text='----laps----')         l2.pack(fill=x, expand=no, pady=4, padx=2)          scrollbar = scrollbar(self, orient=vertical)         self.m = listbox(self,selectmode=extended, height = 10,font=("helvetica", 12),yscrollcommand=scrollbar.set)         self.m.pack(side=left, fill=both, expand=1, pady=5, padx=2)         scrollbar.config(command=self.m.yview)         scrollbar.pack(side=right, fill=y)      def _update(self):          """ update label elapsed time. """         self._elapsedtime = time.time() - self._start         self._settime(self._elapsedtime)         self._timer = self.after(50, self._update)      def _settime(self, elap):         """ set time string minutes:seconds:hundreths """         minutes = int(elap/60)         seconds = int(elap - minutes*60.0)         hseconds = int((elap - minutes*60.0 - seconds)*100)                         self.timestr.set('%02d:%02d:%02d' % (minutes, seconds, hseconds))      def _setlaptime(self, elap):         """ set time string minutes:seconds:hundreths """         minutes = int(elap/60)         seconds = int(elap - minutes*60.0)         hseconds = int((elap - minutes*60.0 - seconds)*100)                     return '%02d:%02d:%02d' % (minutes, seconds, hseconds)      def start(self):                                                              """ start stopwatch, ignore if running. """         if not self._running:                         self._start = time.time() - self._elapsedtime             self._update()             self._running = 1              def stop(self):                                             """ stop stopwatch, ignore if stopped. """         if self._running:             self.after_cancel(self._timer)                         self._elapsedtime = time.time() - self._start                 self._settime(self._elapsedtime)             self._running = 0      def reset(self):                                           """ reset stopwatch. """         self._start = time.time()                  self._elapsedtime = 0.0         self.laps = []            self._settime(self._elapsedtime)      def lap(self):         '''makes lap, if started'''         tempo = self._elapsedtime - self.lapmod2         if self._running:             self.laps.append(self._setlaptime(tempo))             self.m.insert(end, self.laps[-1])              self.m.yview_moveto(1)             self.lapmod2 = self._elapsedtime      def gravacsv(self):         '''pega nome cronometro e cria arquivo para guardar laps'''         arquivo = str(self.e.get()) + ' - '         open(arquivo + self.today + '.txt', 'wb') lapfile:             lap in self.laps:                 lapfile.write((bytes(str(lap) + '\n', 'utf-8')))  def main():     root = tk()     root.wm_attributes("-topmost", 1)          sw = stopwatch(root)     sw.pack(side=top)      button(root, text='lap', command=sw.lap).pack(side=left)     button(root, text='start', command=sw.start).pack(side=left)     button(root, text='stop', command=sw.stop).pack(side=left)     button(root, text='reset', command=sw.reset).pack(side=left)     button(root, text='save', command=sw.gravacsv).pack(side=left)     button(root, text='quit', command=root.quit).pack(side=left)          root.mainloop()  if __name__ == '__main__':     main() 

it looks interpreter somehow calling lap() method before calls makewidgets(), weird because don't see lap() being called anywhere in provided code. mcve?

instead of initializing self.m 0 in __init__(), initialize value it's supposed have: listbox widget.

  1. remove self.m = 0 __init__()
  2. move self.m = listbox(self,selectmode=extended, height = 10,font=("helvetica", 12),yscrollcommand=scrollbar.set) makewidgets() __init__()

makewidgets() ever called once anyway, maybe put __init__() unless you're planning on expanding program call makewidgets() more once.