Ok,
You need to learn how to read the error traceback.
It pointed directly to the error.
win was not defined in the method run as it was out of scope.
in order to make it work, you need to save win from the __init__ attributes to a variable that run can see,
thus in the code below:
new code still doesn't run to finish, but has gotten past the error you were receiving:
You need to learn how to read the error traceback.
It pointed directly to the error.
win was not defined in the method run as it was out of scope.
in order to make it work, you need to save win from the __init__ attributes to a variable that run can see,
thus in the code below:
self.win = winand also refer to it as self.win in the methods that use it.
new code still doesn't run to finish, but has gotten past the error you were receiving:
import wx import wx.grid import pandas as pd import googlefinance.client as gf from threading import * class RunThread(Thread): def __init__(self, event, win): self.win=win Thread.__init__(self) self.stopped = event self.start() def run(self): print('Loading 0,0 ..') self.win.Update_5M(0, 0) while True: print('Loading 1,12 ..') self.win.Update_5M(1, 12) self.stopped.wait(20) class Frame(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, title="Thread Crash", size=(530, 742), pos=(500, 100)) wx.Panel(self) sizer = wx.BoxSizer(wx.VERTICAL) self.SetSizer(sizer) self.grid = self.Create_Grid() stopFlag = Event() RunThread(stopFlag, self) def Update_5M(self, n, m): self.dfg, self.dfr = self.Load_Data_Frame(n) self.Update_Grid(self.dfr, self.grid, 'red', m) self.Update_Grid(self.dfg, self.grid, 'green', m) def Create_Grid(self): self.colno = 11 self.colsz = [43, 40, 22, 40, 44, 60, 40, 40, 40, 40, 40] grid = wx.grid.Grid(self, size=(522, 700), pos=(0, 0)) grid.CreateGrid(1, 11) grid.SetRowLabelSize(60) grid.SetLabelFont(wx.Font(8, wx.DEFAULT, wx.NORMAL, wx.NORMAL)) grid.SetDefaultCellAlignment(wx.ALIGN_RIGHT, wx.ALIGN_CENTRE) for col in range(self.colno): grid.SetColSize(col, self.colsz[col]) return grid def Update_Grid(self, df_head, grid, gor, n): cols = grid.GetNumberCols() rows = grid.GetNumberRows() rl = for r in range(rows): rl.append(grid.GetRowLabelValue(r + n)) for row in range(len(df_head.index)): r = row + n grid.InsertRows(r, 1, False) param = {'q': df_head.values[row, 0], 'i': "86400", 'x': "TSE", 'p': "5d"} df = gf.get_price_data(param).tail(1) o = 0 if len(df) < 1: grid.DeleteRows(r, 1, False) r -= 1 o += 1 continue PP = (df.values[0, 1] + df.values[0, 2] + df.values[0, 3]) / 3 for col in range(self.colno): if col != 2: if n == 0: if gor == 'green': grid.SetCellBackgroundColour(r, col, wx.Colour(row * 50, 200, row * 40)) if gor == 'red': grid.SetCellBackgroundColour(r, col, wx.Colour(200, row * 50, row * 40)) else: if gor == 'green': grid.SetCellBackgroundColour(r, col, wx.Colour(row * 50, 255, row * 40)) if gor == 'red': grid.SetCellBackgroundColour(r, col, wx.Colour(255, row * 50, row * 40)) if col == 2: d = ('%.0f' % df_head.values[row, col]) elif col == 0: d = df_head.values[row, col] elif col == 5: d = format(df_head.values[row, col], "8,d") elif col < 6: d = ('%.2f' % df_head.values[row, col]) elif col == 6: d = '%.2f' % (PP + df.values[0, 1] - df.values[0, 2]) elif col == 7: d = '%.2f' % (PP * 2 - df.values[0, 2]) elif col == 8: d = '%.2f' % PP elif col == 9: d = '%.2f' % (PP * 2 - df.values[0, 1]) elif col == 10: d = '%.2f' % (PP - df.values[0, 1] + df.values[0, 2]) grid.SetCellValue(r, col, d) for r in range(len(rl)): grid.SetRowLabelValue(r + n + 6 - o, rl[r]) def Load_Data_Frame(self, n): df_all = p = [['86400', '3M'], ['300', '2d']] symb = pd.DataFrame(pd.read_csv('TSE.csv')) for s in symb['Symbol']: param = {'q': s, 'i': p[n][0], 'x': "TSE", 'p': p[n][1]} df = gf.get_price_data(param) df['T'] = s df['HiLo'] = 100 * (df['Close'] - df['Open']) / df['Open'] df['GoR'] = df['Close'] > df['Open'] df_all.append(df) dfg = pd.DataFrame() dfr = pd.DataFrame() num = len(df_all) for s in range(num): i = len(df_all[s].index) - 1 if i < 10: continue nGreen, nRed, vGreen, vRed = 0, 0, 0, 0 hGreen, hRed, iGreen, iRed = 0, 0, True, True while iGreen or iRed: if iGreen: if df_all[s].values[i, 7]: nGreen += 1 if hGreen < df_all[s].values[i, 6]: hGreen = df_all[s].values[i, 6] else: iGreen = False if iRed: if not df_all[s].values[i, 7]: nRed += 1 if hRed > df_all[s].values[i, 6]: hRed = df_all[s].values[i, 6] else: iRed = False i -= 1 if i < 0: break vAvg20 = pd.Series(df_all[s]['Volume']).rolling(window=20).mean() df_all[s]['U'] = round(hGreen, 2) df_all[s]['D'] = round(-hRed, 2) df_all[s]['gBars'] = int(nGreen) df_all[s]['rBars'] = int(nRed) df_all[s]['Vg'] = vGreen / vAvg20 df_all[s]['Vr'] = vRed / vAvg20 dUp = df_all[s][['T', 'Close', 'gBars', 'U', 'Vg', 'Volume']] dDn = df_all[s][['T', 'Close', 'rBars', 'D', 'Vr', 'Volume']] if dfg.empty: dfg = dUp.tail(1) else: dfg = dfg.append(dUp.tail(1)) if dfr.empty: dfr = dDn.tail(1) else: dfr = dfr.append(dDn.tail(1)) dfg6 = dfg.sort_values('gBars', ascending=False).head(6) dfr6 = dfr.sort_values('rBars', ascending=False).head(6) return dfg6, dfr6 if __name__ == "__main__": app = wx.App() win = Frame() win.Show() app.MainLoop()try your best to finish, and come back if you get stuck.[/s][/s][/s][/s][/s][/s][/s][/s][/s][/s][/s][/s][/s][/s][/s][/s]