def createCanvas(self, kw): logging.info('MfxRoot: createCanvas') # bd = kw['bd'] kw['bd'] = 0 # relief = kw['relief'] del kw['relief'] # frame = Tkinter.Frame(self.frame, bd=bd, relief=relief) # frame.grid(row=0, column=0, sticky="news") ''' self.canvas = MfxCanvas(self.frame, **kw) self.frame.add_widget(self.canvas) self.parent.pushWork(self.frame) ''' self.canvas = MfxCanvas(self.parent, **kw) self.frame = self.canvas self.parent.pushWork('playground', self.frame) ''
class MfxScrolledCanvas(object): def __init__(self, parent, hbar=True, vbar=True, propagate=False, **kw): kwdefault(kw, highlightthickness=0, bd=1, relief='sunken') self.parent = parent # workarea = parent.getWork() print('MfxScrolledCanvas: parent=%s' % (parent)) super(MfxScrolledCanvas, self).__init__() self.createFrame(kw) self.canvas = None # do_scroll_x = None # do_scroll_y = None # self.hbar = None # self.vbar = None self.hbar_show = False self.vbar_show = False self.createCanvas(kw) # self.frame.grid_rowconfigure(0, weight=1) # self.frame.grid_columnconfigure(0, weight=1) # self.frame.grid_propagate(propagate) if hbar: self.createHbar() self.bindHbar() if vbar: self.createVbar() self.bindVbar() # self.canvas.focus_set() def destroy(self): logging.info('MfxRoot: destroy') self.unbind_all() self.canvas.destroy() self.frame.destroy() def pack(self, **kw): pass # self.frame.pack(**kw) def grid(self, **kw): pass # self.frame.grid(**kw) # # # def setTile(self, app, i, force=False): logging.info('MfxRoot: setTitle app=%s' % app) tile = app.tabletile_manager.get(i) print('setTile: (tile) %s, index=%s' % (tile, i)) if tile is None or tile.error: return False # print i, tile if i == 0: assert tile.color assert tile.filename is None else: assert tile.color is None assert tile.filename assert tile.basename if not force: if (i == app.tabletile_index and tile.color == app.opt.colors['table']): return False # print('setTile2: %s' % (tile.filename)) if not self.canvas.setTile( tile.filename, tile.stretch, tile.save_aspect): tile.error = True return False print( 'MfxScrolledCanvas: tile.color, app.top_bg %s, %s' % (tile.color, app.top_bg)) if i == 0: if force: tile.color = app.opt.colors['table'] self.canvas.config(bg=tile.color) else: if type(app.top_bg) is str: self.canvas.config(bg=app.top_bg) self.canvas.setTextColor(app.opt.colors['text']) return True # # # def deleteAllItems(self): logging.info('MfxRoot: deleteAllItems') # self.parent.getWork() # self.parent.popWork() # self.frame.clear_widgets() self.canvas.clear_widgets() def update_idletasks(self): logging.info('MfxRoot: update_idletasks') Clock.schedule_once(lambda x: self.canvas.canvas.ask_update) def unbind_all(self): unbind_destroy(self.hbar) unbind_destroy(self.vbar) unbind_destroy(self.canvas) unbind_destroy(self.frame) def createFrame(self, kw): logging.info('MfxRoot: createFrame') # width = kw.get("width") # height = kw.get("height") print('createFrame: kw=%s' % kw) # self.frame = Tkinter.Frame(self.parent, width=width, height=height) self.frame = LScrollFrame(size_hint=(1, 1)) print("createFrame: self.parent %s" % str(self.frame)) def createCanvas(self, kw): logging.info('MfxRoot: createCanvas') # bd = kw['bd'] kw['bd'] = 0 # relief = kw['relief'] del kw['relief'] # frame = Tkinter.Frame(self.frame, bd=bd, relief=relief) # frame.grid(row=0, column=0, sticky="news") ''' self.canvas = MfxCanvas(self.frame, **kw) self.frame.add_widget(self.canvas) self.parent.pushWork(self.frame) ''' self.canvas = MfxCanvas(self.parent, **kw) self.frame = self.canvas self.parent.pushWork('playground', self.frame) '' # self.canvas.pack(expand=True, fill='both') def createHbar(self): pass ''' self.hbar = Tkinter.Scrollbar(self.frame, takefocus=0, orient="horizontal") self.canvas["xscrollcommand"] = self._setHbar self.hbar["command"] = self.canvas.xview self.hbar.grid(row=1, column=0, sticky="we") self.hbar.grid_remove() ''' def createVbar(self): pass ''' self.vbar = Tkinter.Scrollbar(self.frame, takefocus=0) self.canvas["yscrollcommand"] = self._setVbar self.vbar["command"] = self.canvas.yview self.vbar.grid(row=0, column=1, sticky="ns") self.vbar.grid_remove() ''' def bindHbar(self, w=None): if w is None: w = self.canvas bind(w, "<KeyPress-Left>", self.unit_left) bind(w, "<KeyPress-Right>", self.unit_right) def bindVbar(self, w=None): if w is None: w = self.canvas bind(w, "<KeyPress-Prior>", self.page_up) bind(w, "<KeyPress-Next>", self.page_down) bind(w, "<KeyPress-Up>", self.unit_up) bind(w, "<KeyPress-Down>", self.unit_down) bind(w, "<KeyPress-Begin>", self.scroll_top) bind(w, "<KeyPress-Home>", self.scroll_top) bind(w, "<KeyPress-End>", self.scroll_bottom) # mousewheel support if WIN_SYSTEM == 'x11': bind(w, '<4>', self.mouse_wheel_up) bind(w, '<5>', self.mouse_wheel_down) # don't work on Linux # bind(w, '<MouseWheel>', self.mouse_wheel) def mouse_wheel(self, *args): pass def _setHbar(self, first, last): if self.canvas.busy: return sb = self.hbar if float(first) <= 0 and float(last) >= 1: sb.grid_remove() self.hbar_show = False else: if self.canvas.winfo_ismapped(): sb.grid() self.hbar_show = True sb.set(first, last) def _setVbar(self, first, last): if self.canvas.busy: return sb = self.vbar if float(first) <= 0 and float(last) >= 1: sb.grid_remove() self.vbar_show = False else: if self.canvas.winfo_ismapped(): sb.grid() self.vbar_show = True sb.set(first, last) def _xview(self, *args): if self.hbar_show: self.canvas.xview(*args) return 'break' def _yview(self, *args): if self.vbar_show: self.canvas.yview(*args) return 'break' def page_up(self, *event): return self._yview('scroll', -1, 'page') def page_down(self, *event): return self._yview('scroll', 1, 'page') def unit_up(self, *event): return self._yview('scroll', -1, 'unit') def unit_down(self, *event): return self._yview('scroll', 1, 'unit') def mouse_wheel_up(self, *event): return self._yview('scroll', -5, 'unit') def mouse_wheel_down(self, *event): return self._yview('scroll', 5, 'unit') def page_left(self, *event): return self._xview('scroll', -1, 'page') def page_right(self, *event): return self._xview('scroll', 1, 'page') def unit_left(self, *event): return self._xview('scroll', -1, 'unit') def unit_right(self, *event): return self._xview('scroll', 1, 'unit') def scroll_top(self, *event): return self._yview('moveto', 0) def scroll_bottom(self, *event): return self._yview('moveto', 1)