def __init__(self):
tk.Tk.__init__(self)
tk.Tk.wm_title(self, "Smart Trader System")
if os.name == "nt":
tk.Tk.iconbitmap(self, default="app_icon.ico")
self.configure(background = StColors.dark_grey)
set_app_style()
# Top section (header)
title = ttk.Label(self, text="Smart Trader Portal", font=("Tahoma", 25, 'bold'))
title.pack()
# Lower section (tabs area)
notebook = ttk.Notebook(self)
notebook.pack()
# Create Controllers and add their views
explore = ExploreController(self)
train = TrainingController(self)
backtest= BacktestController(self)
forecast= ForecastController(self)
for view_frame in (explore.view, train.view, backtest.view, forecast.view):
view_frame.grid(row=0, column=0, sticky="nsew")
notebook.add(view_frame, text = view_frame.title)
python类Label()的实例源码
def __init__(self, panedwindow, sash_index, disallow_dragging=False, on_click=None, **kw):
image = kw.pop("image", None)
Frame.__init__(self, panedwindow, class_="Handle", **kw)
self._sash_index = sash_index
if image:
self._event_area = Label(self, image=image)
self._event_area.pack()
else:
self._event_area = self
self._center = int(self._event_area.winfo_reqwidth()/2), int(self._event_area.winfo_reqheight()/2)
if disallow_dragging:
if on_click:
self._event_area.bind('<Button-1>', lambda event: on_click())
else:
self._event_area.bind('<Button-1>', self._initiate_motion)
self._event_area.bind('<B1-Motion>', self._on_dragging)
self._event_area.bind('<ButtonRelease-1>', self.master._on_release)
def __init__(self, parent, title="", optional = False, opt_func = None, *args, **options):
Frame.__init__(self, parent, *args, **options)
self.expanded = IntVar()
self.expanded.set(0)
self.enabled = IntVar()
self.enabled.set(1)
self.header = ttk.Frame(self)
if optional:
title_line = ttk.Checkbutton(self.header, text=title, variable=self.enabled, command=opt_func)
else:
title_line = ttk.Label(self.header, text=" %s" % (title))
title_line.pack(side="top", fill=X)
self.toggle_button = ttk.Checkbutton(self.header, width=2, text='+',
command=self.toggle_expanded, variable=self.expanded, style='Toolbutton')
self.toggle_button.pack(side="left", fill=X)
self.header.pack(fill=X, expand=1)
self.sub_frame = Frame(self)
def __init__(self, parent, title="", *args, **options):
Frame.__init__(self, parent, *args, **options)
header = Frame(self, bg="white")
Label(header, text=title, font=("Helvetica", 16)).pack(side='top', anchor='nw', pady=4)
header.pack(side="top", anchor="nw", fill=X)
self.info = Frame(self)
self.info_label = StringVar()
Label(self.info, textvar=self.info_label).pack(side="top")
self.info.pack(side="right", anchor="nw", fill=BOTH)
self.list = Frame(self)
self.list.pack(side="left", anchor="nw", fill=BOTH)
self.info_frames = {}
self.active_item = None
self.active_info = None
def add(self, item):
item_label = Label(self.list, text=item["name"], justify="right", cursor="dotbox")
item_label.bind("<Button-1>", self._click)
item_label.pack(side="top", fill=X, anchor="nw", padx=(5,15))
info = Frame(self.info)
Label(info, text="Executed commands:").pack(side="top", anchor="nw", padx=(0,20))
steps = Text(info, bg="grey", fg="blue", font=("Courier", 12), height=len(item["steps"])+1)
steps.configure(state=NORMAL)
for step in item["steps"]:
steps.insert(END, " $ %s %s\n" % (step.split()[0].split("/")[-1], " ".join(step.split()[1:])))
steps.see(END)
steps.configure(state=DISABLED)
steps.pack(side="top", anchor="nw")
result_frame = Frame(info)
Label(result_frame, text="Results directory: ").pack(side="left", anchor="nw", padx=(0,20))
Label(result_frame, text=item["path"]).pack(side="left", anchor="nw", padx=(0,20))
Button(result_frame, text="Open", command=lambda p=item["path"]: open_in_file_browser(p) ).pack(side="left", anchor="nw", padx=(0,20))
result_frame.pack(side="top", anchor="nw")
Button(info, text="Delete run", command=lambda p=item: self.remove(item_label, info, p) ).pack(side="top", anchor="nw", padx=(0,20))
self.info_frames[str(item_label)] = info
def de_widget(self):
# Initialize widget
self.init_widget()
# strategy
self.strategy_label = ttk.Label(self.frame1.sliders, text = "Strategy")
self.strategy_option_menu = ttk.OptionMenu(self.frame1.sliders, self.strategy, self.strategy.get(),
*sorted(self.STRATOPT))
self.strategy_label.place(relx = 0, x = 0, y = 5, anchor = "nw")
self.strategy_option_menu.place(relx = 0, x = 70, y = 3, anchor = "nw")
# CR
self._label("Crossover probability", 2)
self._scale(0., 1., 0.01, self.CR, 2)
self._entry(self.CR, 2)
# F
self._label("Differential weight", 4)
self._scale(0., 2., 0.01, self.F, 4)
self._entry(self.F, 4)
def position_view(self):
params = self.app.get_agent_params(['Positions'])
positions = params['Positions']
pos_win = tk.Toplevel(self)
pos_frame = ScrolledFrame(pos_win)
fields = ['gateway', 'inst', 'currlong', 'currshort', 'locklong', 'lockshort', 'ydaylong', 'ydayshort']
for idx, field in enumerate(fields):
row_idx = 0
tk.Label(pos_frame.frame, text = field).grid(row=row_idx, column=idx)
for gway in positions.keys():
for inst in positions[gway]:
row_idx += 1
if field == 'inst':
txt = inst
elif field == 'gateway':
txt = str(gway)
else:
txt = positions[gway][inst][field]
tk.Label(pos_frame.frame, text = txt).grid(row=row_idx, column=idx)
def tradepos_view(self):
params = self.app.get_agent_params(['Risk.ppos'])
res = params['Risk']
sum_risk = {}
sum_risk['total'] = res['total']
strat_list = res['strats'].keys()
for strat_name in strat_list:
sum_risk[strat_name] = res['strats'][strat_name]
pos_win = tk.Toplevel(self)
tp_frame = ScrolledFrame(pos_win)
fields = ['inst', 'total'] + strat_list
for idx, field in enumerate(fields):
tk.Label(tp_frame.frame, text = field).grid(row=0, column=idx)
for idy, inst in enumerate(sum_risk['total'].keys()):
if field == 'inst':
txt = inst
else:
inst_risk = sum_risk[field].get(inst, {})
txt = str(inst_risk.get('ppos', 0))
tk.Label(tp_frame.frame, text = txt).grid(row=idy+1, column=idx)
def test_sashpos(self):
self.assertRaises(tkinter.TclError, self.paned.sashpos, None)
self.assertRaises(tkinter.TclError, self.paned.sashpos, '')
self.assertRaises(tkinter.TclError, self.paned.sashpos, 0)
child = ttk.Label(self.paned, text='a')
self.paned.add(child, weight=1)
self.assertRaises(tkinter.TclError, self.paned.sashpos, 0)
child2 = ttk.Label(self.paned, text='b')
self.paned.add(child2)
self.assertRaises(tkinter.TclError, self.paned.sashpos, 1)
self.paned.pack(expand=True, fill='both')
self.paned.wait_visibility()
curr_pos = self.paned.sashpos(0)
self.paned.sashpos(0, 1000)
self.assertNotEqual(curr_pos, self.paned.sashpos(0))
self.assertIsInstance(self.paned.sashpos(0), int)
def _setup_widgets(self):
themes_lbl = ttk.Label(self, text="Themes")
themes = self.style.theme_names()
self.themes_combo = ttk.Combobox(self, values=themes, state="readonly")
self.themes_combo.set(themes[0])
self.themes_combo.bind("<<ComboboxSelected>>", self._theme_sel_changed)
change_btn = ttk.Button(self, text='Change Theme',
command=self._change_theme)
theme_change_checkbtn = ttk.Checkbutton(self,
text="Change themes when combobox item is activated",
variable=self.theme_autochange)
themes_lbl.grid(ipadx=6, sticky="w")
self.themes_combo.grid(row=0, column=1, padx=6, sticky="ew")
change_btn.grid(row=0, column=2, padx=6, sticky="e")
theme_change_checkbtn.grid(row=1, columnspan=3, sticky="w", pady=6)
top = self.winfo_toplevel()
top.rowconfigure(0, weight=1)
top.columnconfigure(0, weight=1)
self.columnconfigure(1, weight=1)
self.grid(row=0, column=0, sticky="nsew", columnspan=3, rowspan=2)
def test_sashpos(self):
self.assertRaises(tkinter.TclError, self.paned.sashpos, None)
self.assertRaises(tkinter.TclError, self.paned.sashpos, '')
self.assertRaises(tkinter.TclError, self.paned.sashpos, 0)
child = ttk.Label(self.paned, text='a')
self.paned.add(child, weight=1)
self.assertRaises(tkinter.TclError, self.paned.sashpos, 0)
child2 = ttk.Label(self.paned, text='b')
self.paned.add(child2)
self.assertRaises(tkinter.TclError, self.paned.sashpos, 1)
self.paned.pack(expand=True, fill='both')
self.paned.wait_visibility()
curr_pos = self.paned.sashpos(0)
self.paned.sashpos(0, 1000)
self.assertNotEqual(curr_pos, self.paned.sashpos(0))
self.assertIsInstance(self.paned.sashpos(0), int)
def create_custom_frame(self):
self.custom_frame = ttk.Frame(self.mainframe)
self.custom_title = ttk.Label(self.custom_frame, text='Custom tags:')
self.artist_label = ttk.Label(self.custom_frame, text='Artist: ')
self.artist_input = Text(self.custom_frame, width=20, height=1, font=self.font)
self.title_label = ttk.Label(self.custom_frame, text='Title: ')
self.title_input = Text(self.custom_frame, width=20, height=1, font=self.font)
self.album_label = ttk.Label(self.custom_frame, text='Album: ')
self.album_input = Text(self.custom_frame, width=20, height=1, font=self.font)
self.cover_art = ttk.Button(self.custom_frame, text='Browse for cover art', command=self.cover_art_browse)
self.cover_art_path = Entry(self.custom_frame, width=20, font=self.font)
self.custom_submit = ttk.Button(self.custom_frame, text='Download using custom tags', command=self.custom)
self.custom_title.grid(row=0, columnspan=2)
self.artist_label.grid(column=0, row=1)
self.artist_input.grid(column=1, row=1)
self.title_label.grid(column=0, row=2)
self.title_input.grid(column=1, row=2)
self.album_label.grid(column=0, row=3)
self.album_input.grid(column=1, row=3)
self.cover_art.grid(column=0, row=4)
self.cover_art_path.grid(column=1, row=4)
self.custom_submit.grid(row=5, columnspan=2, sticky=EW, pady=10)
self.custom_frame.pack(pady=10)
def add_file(self):
try:
result = self.download_queue.get(0)
if result == 0:
self.error = ttk.Label(self.mainframe, text='Error: ffmpeg is not installed.', font=self.font, foreground='#ff0000')
self.error.pack()
else:
self.file = result.replace('/', '\\')
text = 'Open %s' % self.file
self.file_button = ttk.Button(self.mainframe, text=text, command=partial(self.open_file, self.file))
self.file_button.pack()
self.enable_search()
self.download_progress.pack_forget()
self.download_progress.destroy()
self.results_label.pack_forget()
self.results_label.destroy()
self.results_frame.pack_forget()
self.results_frame.destroy()
except Queue.Empty:
self.master.after(100, self.add_file)
def test_sashpos(self):
self.assertRaises(Tkinter.TclError, self.paned.sashpos, None)
self.assertRaises(Tkinter.TclError, self.paned.sashpos, '')
self.assertRaises(Tkinter.TclError, self.paned.sashpos, 0)
child = ttk.Label(self.paned, text='a')
self.paned.add(child, weight=1)
self.assertRaises(Tkinter.TclError, self.paned.sashpos, 0)
child2 = ttk.Label(self.paned, text='b')
self.paned.add(child2)
self.assertRaises(Tkinter.TclError, self.paned.sashpos, 1)
self.paned.pack(expand=True, fill='both')
self.paned.wait_visibility()
curr_pos = self.paned.sashpos(0)
self.paned.sashpos(0, 1000)
self.assertTrue(curr_pos != self.paned.sashpos(0))
self.assertTrue(isinstance(self.paned.sashpos(0), int))
def raise_message(log):
if "Label(s) %s are not present" in log.msg:
box = tk.Toplevel(root)
box.title('Error')
message = ttk.Label(box, text = log.msg % log.args)
labels = {}
for f in app.filenames:
labels[os.path.basename(f)] = " ".join(sorted(multiCIF._alllabels(f)))
advice = ttk.Label(box, text = "Valid labels are:\n{0}".format( "".join( ["{0:40s}: {1:30s}\n".format(p, labels[p]) for p in labels] )))
tip = ttk.Label(box, text="[ Tip: Regular expressions can also be used to centre labels ]")
button = ttk.Button(box, text='OK', command= lambda: box.destroy())
message.grid(row = 0, padx = 5, pady = 5)
advice.grid(row = 1, padx = 5, pady = 5)
tip.grid(row=2, padx=5, pady=5)
button.grid(row = 3, padx = 5, pady = 5)
root.wait_window(window=box)
else:
pass
#tkMessageBox.showerror('Error',log.msg)
def body(self, master):
"""
Generates the required text listing all elements that will be deleted.
Displays the "OK" and "Cancel" buttons.
"""
if len(self.id_tuples) == 0:
message_string = "No elements selected."
elif len(self.id_tuples) == 1:
message_string = 'Delete "{}"?'.format(self.tree.get_element(self.id_tuples[0][0]).name)
else:
message_string = "Delete the following items?\n"
for x, level in self.id_tuples:
if level == 0:
bullet = " " + u"\u25C6"
else:
bullet = " " * (level + 1) + u"\u25C7"
message_string += u"{bullet} {name}\n".format(bullet=bullet, name=self.tree.get_element(x).name)
message = ttk.Label(master, text=message_string, justify="left")
message.grid(row=0, sticky="w")
def body(self, master):
"""
Generates the required text listing all SeqLibs that will have their FASTQ options updated.
Displays the "OK" and "Cancel" buttons.
"""
if len(self.target_ids) == 0:
message_string = "No elegible SeqLibs selected."
elif len(self.target_ids) == 1:
message_string = 'Apply FASTQ filtering options from "{}" to "{}"?'.format(self.tree.get_element(self.source_id).name, self.tree.get_element(self.target_ids[0]).name)
else:
bullet = " " + u"\u25C6"
message_string = 'Apply FASTQ filtering options from "{}"" to the following?\n'.format(self.tree.get_element(self.source_id).name)
for x in self.target_ids:
message_string += u"{bullet} {name}\n".format(bullet=bullet, name=self.tree.get_element(x).name)
message = ttk.Label(master, text=message_string, justify="left")
message.grid(row=0, sticky="w")
def _set_queue(self, queue):
for child in self.queue.winfo_children():
child.destroy()
if queue != ["('None', 'running')"]:
for item in queue:
item, status = eval(item)
item = item.split('/')[-1]
queue_item = Frame(self.queue)
item_label = Label(queue_item, text="%s: %s" % (item, status))
item_label.pack(side="left", anchor="nw")
queue_item.pack(side='top', anchor='nw', fill=X)
def frame1_pop(self):
if not self.frame1.first_run:
self.frame1.pop.forget()
self.frame1.pop = ttk.Frame(self.frame1, borderwidth = 0)
self.frame1.pop.place(width = 170, height = 25, relx = 0.35, y = 30, anchor = "nw")
if self.solver_name.get() in self.EAOPT:
# popsize
popsize_label = ttk.Label(self.frame1.pop, text = "Population size")
popsize_spinbox = Spinbox(self.frame1.pop, from_ = 1, to_ = 999,
increment = 1, textvariable = self.popsize,
width = 3, justify = "right", takefocus = True)
# Layout
popsize_label.place(relx = 0, x = 0, y = 0, anchor = "nw")
popsize_spinbox.place(width = 60, relx = 0, x = 110, y = 0, anchor = "nw")
def _label(self, text, position, kwargs = {}):
label = ttk.Label(self.frame1.sliders, text = text, **kwargs)
if position == 1:
label.place(relx = 0, x = 0, y = 5, anchor = "nw")
elif position == 2:
label.place(relx = 0, x = 0, y = 50, anchor = "nw")
elif position == 3:
label.place(relx = 0.5, x = 0, y = 5, anchor = "nw")
elif position == 4:
label.place(relx = 0.5, x = 0, y = 50, anchor = "nw")
return label
def set_title(self, title):
ttk.Label(self.mainframe, text=title).grid(column=1, columnspan=4, row=0, sticky=(W,E))
def add_trace(self):
ttk.Label(self.mainframe, text="\n".join(self.trace),wraplength=1000).grid(column=5, row=0, rowspan = 5, sticky=N+W)
def telling(self, phrase):
for child in self.mainframe.winfo_children():
child.destroy()
self.add_emoji()
self.add_trace()
ttk.Label(self.mainframe, text=phrase, font=("Comic Sans MS", 20, "italic"), foreground="blue", wraplength=1000).grid(column=1, columnspan=4, row=0, sticky=N+S+E+W)
################################################
def set_title(self, title):
ttk.Label(self.mainframe, text=title).grid(column=1, columnspan=4, row=0, sticky=(W,E))
def add_trace(self):
ttk.Label(self.mainframe, text="\n".join(self.trace),wraplength=1000).grid(column=5, row=0, rowspan = 5, sticky=N+W)
def set_title(self, title):
ttk.Label(self.mainframe, text=title).grid(column=1, columnspan=4, row=0, sticky=(W,E))
def add_trace(self):
ttk.Label(self.mainframe, text="\n".join(self.trace),wraplength=1000).grid(column=5, row=0, rowspan = 5, sticky=N+W)
def telling(self, phrase):
for child in self.mainframe.winfo_children():
child.destroy()
self.add_emoji()
self.add_trace()
ttk.Label(self.mainframe, text=phrase, font=("Comic Sans MS", 20, "italic"), foreground="blue", wraplength=1000).grid(column=1, columnspan=4, row=0, sticky=N+S+E+W)
################################################
def qry_agent_histdata(self):
instfield = 'QryInst'
ent = self.entries[instfield]
inst = ent.get()
freqfield = 'HistFreq'
fent = self.entries[freqfield]
freq = fent.get()
data = self.app.get_hist_data(inst, freq, nlen = 20)
if len(data) == 0:
return
pos_win = tk.Toplevel(self)
pos_frame = ScrolledFrame(pos_win)
fields = data.dtype.names
for idx, field in enumerate(fields):
row_idx = 0
tk.Label(pos_frame.frame, text=field).grid(row=row_idx, column=idx)
for i in range(len(data)):
row_idx += 1
txt = data[field][i]
if type(txt).__name__ == "datetime64":
if field == "date":
txt = pd.to_datetime(str(txt)).strftime("%Y-%m-%d")
else:
txt = pd.to_datetime(str(txt)).strftime("%Y-%m-%d %H%M%S")
elif type(txt).__name__ in ['float', 'float64']:
txt = round(txt, 2)
tk.Label(pos_frame.frame, text=txt).grid(row=row_idx, column=idx)
def show_risks(self, root):
top_level = tk.Toplevel(root)
scr_frame = ScrolledFrame(top_level)
fields = ['Name', 'Underlying', 'Contract', 'Otype', 'Stike', 'Price', 'BidPrice', 'BidIV', 'AskPrice', 'AskIV', 'PV', 'Delta','Gamma','Vega', 'Theta']
for idx, field in enumerate(fields):
tk.Label(scr_frame.frame, text = field).grid(row=0, column=idx)
idy = 0
for i, cmth in enumerate(self.cont_mth):
for strike in self.strikes[i]:
for otype in ['C','P']:
key = (cmth, otype, strike)
if key in self.opt_dict:
idy += 1
inst = self.opt_dict[key]
for idx, field in enumerate(fields):
if idx == 0:
txt = inst
elif idx == 1:
txt = self.underliers[i]
elif idx in [2, 3, 4]:
txt = key[idx-2]
else:
factor = 1
if field in ['delta', 'gamma', 'BidIV', 'AskIV']:
factor = 100
txt = self.curr_insts[inst][field]*factor
tk.Label(scr_frame.frame, text = keepdigit(txt,3)).grid(row=idy, column=idx)