def test() -> None: """Test the GUI.""" from BEE2_config import GEN_OPTS from packages import find_packages, PACKAGE_SYS # Setup images to read from packages. print('Loading packages for images.') GEN_OPTS.load() find_packages(GEN_OPTS['Directories']['package']) img.load_filesystems(PACKAGE_SYS) print('Done.') left_frm = ttk.Frame(TK_ROOT) right_canv = tkinter.Canvas(TK_ROOT) left_frm.grid(row=0, column=0, sticky='NSEW', padx=8) right_canv.grid(row=0, column=1, sticky='NSEW', padx=8) TK_ROOT.rowconfigure(0, weight=1) TK_ROOT.columnconfigure(1, weight=1) slot_dest = [] slot_src = [] class TestItem: def __init__( self, name: str, pak_id: str, icon: str, group: str=None, group_icon: str=None, ) -> None: self.name = name self.dnd_icon = img.Handle.parse_uri(utils.PackagePath(pak_id, ('items/clean/{}.png'.format(icon))), 64, 64) self.dnd_group = group if group_icon: self.dnd_group_icon = img.Handle.parse_uri(utils.PackagePath(pak_id, 'items/clean/{}.png'.format(group_icon)), 64, 64) def __repr__(self) -> str: return '<Item {}>'.format(self.name) manager = Manager[TestItem](TK_ROOT, config_icon=True) def func(ev): def call(slot): print('Cback: ', ev, slot) return call for event in Event: manager.reg_callback(event, func(event)) PAK_CLEAN = 'BEE2_CLEAN_STYLE' PAK_ELEM = 'VALVE_TEST_ELEM' items = [ TestItem('Dropper', PAK_CLEAN, 'dropper'), TestItem('Entry', PAK_CLEAN, 'entry_door'), TestItem('Exit', PAK_CLEAN, 'exit_door'), TestItem('Large Obs', PAK_CLEAN, 'large_obs_room'), TestItem('Faith Plate', PAK_ELEM, 'faithplate'), TestItem('Standard Cube', PAK_ELEM, 'cube', 'ITEM_CUBE', 'cubes'), TestItem('Companion Cube', PAK_ELEM, 'companion_cube', 'ITEM_CUBE', 'cubes'), TestItem('Reflection Cube', PAK_ELEM, 'reflection_cube', 'ITEM_CUBE', 'cubes'), TestItem('Edgeless Cube', PAK_ELEM, 'edgeless_safety_cube', 'ITEM_CUBE', 'cubes'), TestItem('Franken Cube', PAK_ELEM, 'frankenturret', 'ITEM_CUBE', 'cubes'), TestItem('Repulsion Gel', PAK_ELEM, 'paintsplat_bounce', 'ITEM_PAINT_SPLAT', 'paints'), TestItem('Propulsion Gel', PAK_ELEM, 'paintsplat_speed', 'ITEM_PAINT_SPLAT', 'paints'), TestItem('Reflection Gel', PAK_ELEM, 'paintsplat_reflection', 'ITEM_PAINT_SPLAT', 'paints'), TestItem('Conversion Gel', PAK_ELEM, 'paintsplat_portal', 'ITEM_PAINT_SPLAT', 'paints'), TestItem('Cleansing Gel', PAK_ELEM, 'paintsplat_water', 'ITEM_PAINT_SPLAT', 'paints'), ] for y in range(8): for x in range(4): slot = manager.slot(left_frm, source=False, label=(format(x + 4*y, '02') if y < 3 else '')) slot.grid(column=x, row=y, padx=1, pady=1) slot_dest.append(slot) for i, item in enumerate(items): slot = manager.slot(right_canv, source=True, label=format(i+1, '02')) slot_src.append(slot) slot.contents = item def configure(e): manager.flow_slots(right_canv, slot_src) configure(None) right_canv.bind('<Configure>', configure) ttk.Button( TK_ROOT, text='Debug', command=lambda: print('Dest:', [slot.contents for slot in slot_dest]) ).grid(row=2, column=0) ttk.Button( TK_ROOT, text='Debug', command=lambda: print('Source:', [slot.contents for slot in slot_src]) ).grid(row=2, column=1) name_lbl = ttk.Label(TK_ROOT, text='') name_lbl.grid(row=3, column=0) def enter(slot): if slot.contents is not None: name_lbl['text'] = 'Name: ' + slot.contents.name def exit(slot): name_lbl['text'] = '' manager.reg_callback(Event.HOVER_ENTER, enter) manager.reg_callback(Event.HOVER_EXIT, exit) manager.reg_callback(Event.CONFIG, lambda slot: messagebox.showinfo('Hello World', str(slot.contents))) TK_ROOT.deiconify() TK_ROOT.mainloop()
self.refresh() def checked(self) -> Iterator[Item]: """Yields enabled check items.""" return (item for item in self.items if item.state_var.get()) def unchecked(self) -> Iterator[Item]: """Yields disabled check items.""" return (item for item in self.items if not item.state_var.get()) if __name__ == '__main__': from app import TK_ROOT test_inst = CheckDetails(parent=TK_ROOT, headers=['Name', 'Author', 'Description'], items=[ Item('Item1', 'Auth1', 'Blah blah blah'), Item('Item5', 'Auth3', 'Lorem Ipsum'), Item('Item3', 'Auth2', '.........'), Item('Item4', 'Auth2', '.........'), Item('Item6', 'Sir VeryLongName', '.....'), Item('Item2', 'Auth1', '...'), ]) test_inst.grid(sticky='NSEW') tk_tools.add_mousewheel(test_inst.wid_canvas, TK_ROOT) TK_ROOT.columnconfigure(0, weight=1) TK_ROOT.rowconfigure(0, weight=1) TK_ROOT.deiconify() TK_ROOT.mainloop()