def pack_windows(root): main_paned_window = PanedWindow(root) main_paned_window.pack(fill=BOTH, expand=True) tone_paned_window=PanedWindow(relief=tk.GROOVE,bd=3,orient=tk.VERTICAL) main_paned_window.add(tone_paned_window) sub_tone_paned_window=PanedWindow(tone_paned_window) tone_paned_window.add(sub_tone_paned_window) plot_window=PanedWindow() main_paned_window.add(plot_window) plot_window=ImageViewer(plot_window) plot_window.canvas.get_tk_widget().pack(fill=tk.BOTH,expand=True) tone_window=ToneCurveViewer(sub_tone_paned_window,plot_window) tone_window.canvas.get_tk_widget().pack(fill=tk.BOTH,expand=True) space_frame=Frame() tone_paned_window.add(space_frame) button=Button(space_frame,text="something") button.pack() def quit_app(): root.quit() root.destroy() quitbutton=Button(space_frame,text="exit",command=quit_app) quitbutton.pack()
def __init__(self, master=None): Frame.__init__(self, master) self.pack(expand=1, fill='both') self.master.geometry('1440x900') paned_window = PanedWindow(self) self.treeview_kspelements = TreeviewKSPElements(self) self.treeview_kspobjects = TreeviewKSPObjects(self) paned_window.pack(expand=1, fill='both') paned_window.add(self.treeview_kspelements) paned_window.add(self.treeview_kspobjects) menubar = Menu(self) filemenu = Menu(self) filemenu.add_command(label='Open', command=self._open) filemenu.add_command(label='Save', command=self._save) filemenu.add_command(label='Save As', command=self._save_as) filemenu.add_separator() filemenu.add_command(label='Exit', command=self.master.destroy) menubar.add_cascade(menu=filemenu, label='File') insertmenu = Menu(self) insertmenu.add_command(label='KSP Element', command=self._insert_element, state='disabled') insertmenu.add_command(label='KSP Object', command=self._insert_object) menubar.add_cascade(menu=insertmenu, label='Insert') self.master.config(menu=menubar)
def __init__(self, tk: Tk): tk.title("Layered Polygons") menubar = Menu(tk) menu_file = Menu(menubar, tearoff=0) menu_file.add_command(label="New...", command=self._new_scene) menu_file.add_command(label="Open...", command=self._open_scene) menu_file.add_separator() menu_file.add_command(label="Save", command=self._save_scene) menu_file.add_command(label="Save As...", command=self._save_scene_as) menu_file.add_separator() menu_export = Menu(menu_file, tearoff=0) menu_export.add_command(label="Wavefront (.obj)...", command=self._export_obj) menu_file.add_cascade(label="Export As", menu=menu_export) menu_file.add_separator() menu_file.add_command(label="Quit", command=self._quit_app) menubar.add_cascade(label="File", menu=menu_file) tk.config(menu=menubar) paned = PanedWindow(tk, relief=RAISED) paned.pack(fill=BOTH, expand=1) frame = Frame(paned) paned.add(frame) self._canvas = LayPolyCanvas(frame) bar_x = Scrollbar(frame, orient=HORIZONTAL) bar_x.pack(side=BOTTOM, fill=X) bar_x.config(command=self._canvas.xview) bar_y = Scrollbar(frame, orient=VERTICAL) bar_y.pack(side=RIGHT, fill=Y) bar_y.config(command=self._canvas.yview) self._canvas.config(xscrollcommand=bar_x.set, yscrollcommand=bar_y.set) self._canvas.pack(side=LEFT, expand=True, fill=BOTH) # Thanks to the two guys on Stack Overflow for that! # ( http://stackoverflow.com/a/7734187 ) self._layer_list = Listbox(paned, selectmode=SINGLE) paned.add(self._layer_list) self._scene = None self._current_layer = None self._is_drawing_polygon = False self._tk = tk self._canvas.bind("<Button-1>", self._canvas_left_click) self._canvas.bind("<Button-3>", self._canvas_right_click) self._canvas.bind("<Motion>", self._canvas_mouse_moved) self._layer_list.bind("<<ListboxSelect>>", self._layer_change) self._current_path = None
def main(): root=tk.Tk() #top frame configuration fig,ax=plt.subplots() xs=np.arange(-np.pi,np.pi,0.001) ys=np.sin(xs) ax.plot(xs,ys) plot_window=PanedWindow(root) canvas=FigureCanvasTkAgg(fig,master=plot_window) canvas.get_tk_widget().pack(side=TOP,fill=BOTH,expand=True) toolbar = NavigationToolbar2TkAgg(canvas, plot_window) toolbar.update() top_frame=Frame(root,) left_frame=Frame(root, relief=tk.SUNKEN,bd=4) bottom_frame=Frame(root) left_frame.pack(side=LEFT,fill=BOTH,expand=False) plot_window.pack(side=TOP,fill=BOTH,expand=True) top_frame.pack(side=TOP,fill=X,expand=False) bottom_frame.pack(side=TOP,fill=X,expand=False) Button(top_frame,text="top left button").pack(side=LEFT, fill=X, expand=True) Button(top_frame,text="top right button").pack(side=LEFT,fill=X,expand=True) #left frame configuration Button(left_frame,text="left button 1").pack(side=TOP,ipady=90,fill=X,anchor=tk.N, expand=True) Button(left_frame,text="left button 2").pack(side=TOP,ipady=90,fill=X,anchor=tk.N, expand=True) #right frame configuratioion Button(bottom_frame,text="right button 1").pack(side=TOP, fill=BOTH, expand=True) Button(bottom_frame,text="right button 2").pack(side=TOP, fill=BOTH, expand=True) root.mainloop()
class DatabaseView: def __init__(self, root, config_save, rest_client_factory): self.config = config_save.get_configuration() self.root = root application_folder = BrowserConfiguration.get_application_directory_and_create_if_necessary() self.database = XnatDatabase(rest_client_factory.create_rest_client(self.config), self.config, application_folder) self.database_models = XnatModelFactory(self.database) self.config_save = config_save self.master_paned_window = PanedWindow(root) self.master_paned_window.pack(fill=BOTH, expand=1) self._project_listbox = LabeledListBox(self.master_paned_window, self.database_models.project_list_model, 'Project:') self.master_paned_window.add(self._project_listbox) self._subject_listbox = LabeledListBox(self.master_paned_window, self.database_models.subject_list_model, 'Subject:') self.master_paned_window.add(self._subject_listbox) self._scan_listbox = LabeledProgressListBox(self.master_paned_window, self.database_models.scan_list_model, "Scans:") self.master_paned_window.add(self._scan_listbox) def close(self): self.master_paned_window.destroy()
def main(): root=tk.Tk() main_paned_window = PanedWindow(root) main_paned_window.pack(fill=BOTH, expand=1) tone_curve_paned_window=PanedWindow(main_paned_window) main_paned_window.add(tone_curve_paned_window) tone_curve_window=PanedWindow(tone_curve_paned_window,relief=tk.GROOVE,bd=3,orient=tk.VERTICAL) mlp_tone_curve_window=MatplotlibWindow2(tone_curve_window) mlp_tone_curve_window.canvas.get_tk_widget().pack(fill=tk.BOTH,expand=True) #text_panel_left = Text(main_paned_window, height=6, width =15,relief=tk.GROOVE,bd=2) #main_paned_window.add(text_panel_left) sub_paned_window = PanedWindow(main_paned_window, orient=tk.VERTICAL) #plot sin curve plot_paned_window=PanedWindow(sub_paned_window,relief=tk.GROOVE,bd=3,orient=tk.VERTICAL) mlp_window=MatplotlibWindow(plot_paned_window) mlp_window.canvas.get_tk_widget().pack(fill=tk.BOTH,expand=True) main_paned_window.add(sub_paned_window) bottom_pane_text = Text(sub_paned_window, height=3, width =3, relief=tk.SUNKEN,bd=2) sub_paned_window.add(plot_paned_window) sub_paned_window.add(bottom_pane_text) button=Button(root,text="Hello") button.pack() root.mainloop()
def __init__(self, master): self.master = PanedWindow() master.title("Nonogram") m1 = PanedWindow() m1.pack(fill=BOTH, expand=1) left = Label(m1, text="left pane") m1.add(left) m2 = PanedWindow(m1, orient=VERTICAL) m1.add(m2) self.new_button = Button(m2, text="New puzzle", command=self.new_puzzle) self.new_button.pack() self.save_button = Button(m2, text="Save puzzle", command=self.save_puzzle) self.save_button.pack() bottom = Label(m2, text="bottom pane") m2.add(bottom)
def __init__(self, controller, width, height, *args, **kwargs): BaseWindow.__init__(self, controller, *args, **kwargs) self.controller = controller self.controller.configure_toplevel(self) self.resizable(True, True) self.attributes('-topmost', False) #Remove the toplevel priority self.set_exit_function(self.exit) self.set_title("Canvas") self.file = None self.width = int(width) self.height = int(height) self.geometry(f"{WIDTH}x{HEIGHT}") self.bind("<Escape>", self.exit) self.top_bar.pack(side = "top", fill = "x", pady = (2,0)) self.magnifying_glass_image = load_tk_image_from_bytes_array(magnifying_glass_bytes) self.floppy_image = load_tk_image_from_bytes_array(floppy_bytes) self.bytes_image= load_tk_image_from_bytes_array(export_to_bytes_bytes) self.horizontal_flip_image = load_tk_image_from_bytes_array(flip_horizontal_bytes) self.vertical_flip_image = load_tk_image_from_bytes_array(flip_vertical_bytes) self.rotate_left_image = load_tk_image_from_bytes_array(rotate_left_bytes) self.rotate_right_image = load_tk_image_from_bytes_array(rotate_right_bytes) self.to_grayscale_image = load_tk_image_from_bytes_array(to_grayscale_bytes) self.selection_options_image = load_tk_image_from_bytes_array(selection_options_bytes) self.layers_symbol_image = load_tk_image_from_bytes_array(layers_symbol_bytes) self.folder_options_symbol = load_tk_image_from_bytes_array(folder_options_symbol_bytes) self.effects_wand_symbol = load_tk_image_from_bytes_array(effects_wand_symbol_bytes) self.copy_options_symbol = load_tk_image_from_bytes_array(copy_options_symbol_bytes) self.undo_symbol = load_tk_image_from_bytes_array(undo_symbol_bytes) self.redo_symbol = load_tk_image_from_bytes_array(redo_symbol_bytes) self.drawtips_references = [] self.project = PixelProject(self.width, self.height) panes = PanedWindow(self, orient = "horizontal", sashpad=3, sashrelief ="sunken") panes.pack(fill = "both", expand = True) panes.config(borderwidth = 0) self.left_side_frame = Frame(panes) self.left_side_frame.pack(fill = "both", expand = False, side = "left") panes.add(self.left_side_frame) tool_buttons = [] self.gif_tool_bar = ToolBar(tool_buttons, self.left_side_frame) self.gif_tool_bar.pack(side = "top", fill = "x", pady = (0,2)) save_options_button = Label(self.gif_tool_bar, image = self.floppy_image, font = "bold") save_options_button.pack(side = "left") save_menu = Menu(self, tearoff=0) save_menu.add_command(label="Export Gif", command=self.export_gif) save_menu.add_command(label="Export Selected Frame", command=self.export_selected_layer) save_menu.add_command(label="Export Selected Layer", command=self.export_selected_frame) # gif_menu.add_command(label="Export Project as Zip", command=self.export_zip) # gif_menu.add_command(label="Export Project as .lpixel", command=self.flip_selection_horizontal) # gif_menu.add_command(label="Load Folder as Layers in Current Frame", command=self.load_folder_as_layers) bind_popup("<Button-1>", save_options_button, save_menu) load_options_button = Label(self.gif_tool_bar, image = self.folder_options_symbol, font = "bold") load_options_button.pack(side = "left") load_options_menu = Menu(self, tearoff=0) load_options_menu.add_command(label="Import Gif as Frames", command=self.import_gif) load_options_menu.add_command(label="Load Folder as Frames", command=self.load_folder_as_frames) load_options_menu.add_command(label="Load Folder as Layers in Selected Frame", command=self.load_folder_as_layers) bind_popup("<Button-1>", load_options_button, load_options_menu) preview_options_button = Label(self.gif_tool_bar, image = self.magnifying_glass_image, font = "bold") preview_options_button.pack(side = "left") preview_options_menu = Menu(self, tearoff=0) preview_options_menu.add_command(label="Inspect Selected Frame", command=self.inspect_frame) preview_options_menu.add_command(label="Inspect Selected Layer", command=self.inspect_layer) bind_popup("<Button-1>", preview_options_button, preview_options_menu) panes2 = PanedWindow(self.left_side_frame, orient = "vertical", sashpad=3, sashrelief ="sunken") panes2.pack(fill = "both", expand = True, padx = 4, pady = (0,4)) panes2.config(borderwidth = 0) self.gif_view = LayerViewer(self.project, self.width, self.height, panes2) self.gif_view.pack(fill = "both", expand = True) panes2.add(self.gif_view) self.frame_manager = LayerManager(self, self.project, panes2) self.frame_manager.pack(side = "left", fill = "both", expand = True, pady = 0) panes2.add(self.frame_manager) self.right_side_frame = Frame(panes) self.right_side_frame.pack(fill = "both", expand = True, side = "right") panes.add(self.right_side_frame) tool_buttons = [ (self.vertical_flip_image, self.flip_vertical), (self.horizontal_flip_image, self.flip_horizontal), (self.rotate_left_image, self.rotate_left), (self.rotate_right_image, self.rotate_right), ] self.tool_bar = ToolBar(tool_buttons, self.right_side_frame) self.tool_bar.pack(side = "top", fill = "x") layer_menu = Menu(self, tearoff = 0) layer_menu.add_command(label = "Rename Current Layer", command = self.rename_selected_layer) layer_menu.add_command(label = "Export Current Layer", command = self.save) layer_menu.add_command(label = "Export Current Layer as Bytes (Console)", command = self.export_selected_layer_as_bytes) layer_menu.add_command(label = "Delete Current Layer", command = self.delete_selected_layer) layer_menu.add_command(label = "Duplicate Current Layer", command = self.copy_selected_layer) layer_menu.add_command(label = "Promote Current Layer", command = self.promote_selected_layer) layer_menu.add_command(label = "Demote Current Layer", command = self.demote_selected_layer) layer_menu.add_command(label = "Merge Layer Down", command = self.merge_selected_layer_down) layer_menu.add_separator() layer_menu.add_command(label = "Rename Current Frame", command = self.rename_selected_frame) layer_menu.add_command(label = "Export Current Frame", command = self.save_selected_frame) layer_menu.add_command(label = "Export Current Frame as Bytes (Console)", command = self.export_selected_frame_as_bytes) layer_menu.add_command(label = "Delete Current Frame", command = self.delete_selected_frame) layer_menu.add_command(label = "Duplicate Current Frame", command = self.copy_selected_frame) layer_menu.add_command(label = "Promote Current Frame", command = self.promote_selected_frame) layer_menu.add_command(label = "Demote Current Frame", command = self.demote_selected_frame) layer_menu.add_command(label = "New Layer in Current Frame", command = self.new_layer_in_selected_frame) layer_menu.add_command(label = "New Layer from Image in Current Frame", command = self.new_layer_from_image_in_selected_frame) self.layer_options_menu_button = Label(self.tool_bar, image = self.layers_symbol_image, font = "bold") self.layer_options_menu_button.pack(side = "left") bind_popup("<Button-1>", self.layer_options_menu_button, layer_menu) selection_menu = Menu(self, tearoff=0) selection_menu.add_command(label = "Flood Fill Selection", command = self.fill_selection) selection_menu.add_command(label = "Flip Selection Vertical", command = self.flip_selection_vertical) selection_menu.add_command(label = "Flip Selection Horizontal", command = self.flip_selection_horizontal) selection_menu.add_command(label = "Rotate Selection Right", command = self.rotate_selection_right) selection_menu.add_command(label = "Rotate Selection Left", command = self.rotate_seletion_left) selection_menu.add_command(label = "Export Selection", command = self.export_selection) selection_menu.add_command(label = "Export Selection as Bytes (Console)", command = self.export_selection_as_bytes) selection_menu.add_separator() selection_menu.add_command(label = "Copy Selection to Clipboard", command = self.copy_selection_to_clipboard) selection_menu.add_command(label = "New Layer from Selection", command = self.new_layer_image_from_selection) selection_menu.add_separator() selection_menu.add_command(label = "Apply Blur Filter to Selection", command = self.effect_blur_selection) selection_menu.add_command(label = "Apply Contour Filter to Selection", command = self.effect_contour_selection) selection_menu.add_command(label = "Apply Detail Filter to Selection", command = self.effect_detail_selection) selection_menu.add_command(label = "Apply Edge Enhance Filter to Selection", command = self.effect_edge_enhance_selection) selection_menu.add_command(label = "Apply Edge Enhance More Filter to Selection", command = self.effect_edge_enhance_more_selection) selection_menu.add_command(label = "Apply Emboss Filter to Selection", command = self.effect_emboss_selection) selection_menu.add_command(label = "Apply Find Edges Filter to Selection", command = self.effect_find_edges_selection) selection_menu.add_command(label = "Apply Sharpen Filter to Selection", command = self.effect_sharpen_selection) selection_menu.add_command(label = "Apply Smooth Filter to Selection", command = self.effect_smooth_selection) selection_menu.add_command(label = "Apply Smooth More Filter to Selection", command = self.effect_smooth_more_selection) selection_menu.add_command(label = "Apply Gaussian Filter to Selection", command = self.effect_gaussian_selection) selection_menu.add_command(label = "Apply Box Blur Filter to Selection", command = self.effect_box_blur_selection) selection_menu.add_command(label = "Apply Median Filter to Selection", command = self.effect_median_filter_selection) selection_menu.add_command(label = "Apply Min Filter to Selection", command = self.effect_min_filter_selection) selection_menu.add_command(label = "Apply Max Filter to Selection", command = self.effect_max_filter_selection) selection_menu.add_command(label = "Apply Mode Filter to Selection", command = self.effect_mode_filter_selection) self.selections_options_menu_button = Label(self.tool_bar, image = self.selection_options_image, font = "bold") self.selections_options_menu_button.pack(side = "left") bind_popup("<Button-1>", self.selections_options_menu_button, selection_menu) effects_menu = Menu(self, tearoff=0) effects_menu.add_command(label = "Apply Blur Filter", command = self.effect_blur_layer) effects_menu.add_command(label = "Apply Contour Filter", command = self.effect_contour_layer) effects_menu.add_command(label = "Apply Detail Filter", command = self.effect_detail_layer) effects_menu.add_command(label = "Apply Edge Enhance Filter", command = self.effect_edge_enhance_layer) effects_menu.add_command(label = "Apply Edge Enhance More Filter", command = self.effect_edge_enhance_more_layer) effects_menu.add_command(label = "Apply Emboss Filter", command = self.effect_emboss_layer) effects_menu.add_command(label = "Apply Find Edges Filter", command = self.effect_find_edges_layer) effects_menu.add_command(label = "Apply Sharpen Filter", command = self.effect_sharpen_layer) effects_menu.add_command(label = "Apply Smooth Filter", command = self.effect_smooth_layer) effects_menu.add_command(label = "Apply Smooth More Filter", command = self.effect_smooth_more_layer) effects_menu.add_command(label = "Apply Gaussian Filter", command = self.effect_gaussian_layer) effects_menu.add_command(label = "Apply Box Blur Filter", command = self.effect_box_blur_layer) effects_menu.add_command(label = "Apply Median Filter", command = self.effect_median_filter_layer) effects_menu.add_command(label = "Apply Min Filter", command = self.effect_min_filter_layer) effects_menu.add_command(label = "Apply Max Filter", command = self.effect_max_filter_layer) effects_menu.add_command(label = "Apply Mode Filter", command = self.effect_mode_filter_layer) self.effects_options_menu_button = Label(self.tool_bar, image = self.effects_wand_symbol, font = "bold") self.effects_options_menu_button.pack(side = "left") bind_popup("<Button-1>", self.effects_options_menu_button, effects_menu) copy_options_menu = Menu(self, tearoff=0) copy_options_menu.add_command(label = "Copy Current Layer to Clipboard", command = self.copy_selected_layer_to_clipboard) copy_options_menu.add_command(label = "Copy Current Frame to Clipboard", command = self.copy_selected_frame_to_clipboard) copy_options_menu.add_command(label = "Copy Selection to Clipboard", command = self.copy_selection_to_clipboard) copy_options_menu.add_separator() copy_options_menu.add_command(label = "Paste As New Layer in Current Frame", command = self.paste_as_new_layer_in_current_frame) copy_options_menu.add_command(label = "Paste As New Layer in New Frame", command = self.paste_as_new_layer_in_new_frame) copy_options_button = Label(self.tool_bar, image = self.copy_options_symbol, font = "bold") copy_options_button.pack(side = "left") bind_popup("<Button-1>", copy_options_button, copy_options_menu) undo_button = Label(self.tool_bar, image = self.undo_symbol) undo_button.pack(side = "left") undo_button.bind("<Button-1>", self.undo) redo_button = Label(self.tool_bar, image = self.redo_symbol) redo_button.pack(side = "left") redo_button.bind("<Button-1>", self.redo) self.canvas_frame = ttk.LabelFrame(self.right_side_frame, text = "") self.canvas_frame.pack(fill = "both", expand = True, anchor = "n", padx = 3) inner_frame = Frame(self.canvas_frame) inner_frame.pack(fill = "both", expand = True, side = "top", anchor = "n", padx = 4, pady = 4) self.canvas = LyfeCanvas(self.project, inner_frame) force_aspect(self.canvas, inner_frame, float(self.width)/float(self.height)) self.footer = Frame(self.right_side_frame) self.footer.pack(side = "bottom", fill = "x", expand = False, padx = 3) self.footer_var = StringVar() self.footer_label = Label(self.footer, textvariable = self.footer_var) self.footer_label.pack(side = "left", expand = False, fill = "x") self.grip = ttk.Sizegrip(self) self.grip.place(relx=1.0, rely=1.0, anchor="se") self.grip.bind("<ButtonPress-1>", self.on_press) self.grip.bind("<B1-Motion>", self.on_resize) self.grip.bind("<ButtonRelease-1>", self.on_release) self.canvas.bind_middle(self.eyedrop) self.canvas.bind_movement(self.on_mouse_move) self.canvas.canvas.bind("<ButtonPress-1>", self.on_canvas_click) self.canvas.canvas.bind("<B1-Motion>", self.on_canvas_drag) self.canvas.canvas.bind("<ButtonRelease-1>", self.on_canvas_release) self.canvas.canvas.bind("<ButtonPress-3>", self.on_erase_start) self.canvas.bind_right_drag(self.on_erase) self.canvas.canvas.bind("<ButtonRelease-3>", self.on_erase_end) self.canvas.after_idle(self.refresh)
def __init__(self, controller): ttk.Frame.__init__(self) self.controller = controller self.window = self._nametowidget(self.winfo_parent()) self.window.bind("<Escape>", self.exit) self.window.title("LyfePixel") self.window.protocol("WM_DELETE_WINDOW", self.exit) self.controller.configure_toplevel(self.window) self.window.overrideredirect(0) self.place(relwidth=1, relheight=1) self.state = TOOLCONST.DRAW self.window.resizable(True, True) self.project = PixelProject(8, 8) self.pallet = self.project.selected_frame.selected_layer self.pallet.selection = [ f"{self.pallet.width - 1}x{self.pallet.height - 1}" ] self.alpha = 255 menubar = Menu(self.window) menubar.add_command(label="New", command=self.open_start_window) menubar.add_separator() menubar.add_command(label="Help", command=lambda: HelpWindow(self.controller)) menubar.add_separator() # display the menu self.window.config(menu=menubar) panes = PanedWindow(self, orient="vertical", sashpad=3, sashrelief="sunken") panes.pack(fill="both", expand=True) panes.config(borderwidth=0) canvas_frame = Frame(panes) canvas_frame.pack(fill="both", expand=True, side="top", anchor="n") panes.add(canvas_frame) panes.paneconfigure(canvas_frame, height=150) self.pallet_box = LyfeCanvas(self.project, canvas_frame) force_aspect(self.pallet_box, canvas_frame, 1.0) colors = get_gradient(8) colors.extend(get_rainbow(56)) for id in self.pallet_box.itterate_canvas(): self.pallet.set_pixel_color(id, hex_to_rgba(colors.pop())) self.pallet_box.bind_left(self.select_color) self.pallet_box.bind_double_left(self.change_color) self.pallet_box.bind("<Configure>", self.on_configure) self.pallet_box.configure() outer_frame = Frame(panes) outer_frame.pack(fill="both", expand=True, padx=4) panes.add(outer_frame) panes.paneconfigure(outer_frame, height=250) color_label_frame = Frame(outer_frame) self.color_label_text_var = StringVar() self.color_label_text_var.set(ToolController.get_color()) color_label = Label(color_label_frame, textvariable=self.color_label_text_var) color_label.pack(side="bottom", fill="x", expand=True) color_label_frame.pack(fill="x", expand=True) self.alpha_scale = Scale(outer_frame, orient="horizontal", from_=0, to=255, command=self.set_alpha) self.alpha_scale.set(self.alpha) self.alpha_scale.pack(fill="x", expand=True, pady=2) div_1 = ttk.Separator(outer_frame) div_1.pack(fill="x", expand=True, pady=2) self.toolbox = ToolBox(outer_frame) self.toolbox.pack(fill="both", expand=True, pady=2) self.grip = ttk.Sizegrip(self) self.grip.place(relx=1.0, rely=1.0, anchor="se") self.grip.bind("<ButtonPress-1>", self.on_press) self.grip.bind("<B1-Motion>", self.on_resize) self.grip.bind("<ButtonRelease-1>", self.on_release) self.clipboard_box = ClipBoardBox(self.controller, panes) self.clipboard_box.pack(fill="both", expand=True) panes.add(self.clipboard_box) self.window.minsize(250, 400) self.window.geometry(f"250x720") self.pallet_box.after_idle(self.refresh) color = self.pallet.array[self.pallet.width - 1][self.pallet.height - 1] ToolController.set_color(color) self.alpha = color[3] self.alpha_scale.set(self.alpha) self.pallet.start_selection = id self.pallet.end_selection = id self.update()
class PyEd(Frame): def __init__(self, file=None, parent=None): Frame.__init__(self, parent, name="base") self.file = file self.make_menu() self.pw = PanedWindow(self, orient=VERTICAL) self.pw.pack(side=TOP, expand=YES) self.text = Text(self.pw) self.pw.add(self.text) self.output = Text(self.pw) self.pw.add(self.output) if self.file: self.master.title(self.file) self.settext() else: self.master.title("Untitled") self.text.focus() self.makestatus() self.update_status_msg("Welcome") self.bind_all("<Control-n>", self.new) self.bind_all("<Control-s>", self.save) self.bind_all("<Control-q>", self.quit) self.text.bind("<KeyPress>", self.update_pos) def make_menu(self): self.menubar = Frame(self) self.menubar.pack(side=TOP) filebtn = Menubutton(self.menubar, text='File') filebtn.pack(side=LEFT) file = Menu(filebtn, tearoff=0) file.add_command(label='New', command=self.new, accelerator="Ctrl+N") file.add_command(label='Save', command=self.save, accelerator="Ctrl+S") file.add_command(label='Quit', command=self.quit, accelerator="Ctrl+Q") filebtn.config(menu=file) editbtn = Menubutton(self.menubar, text='Edit') editbtn.pack(side=LEFT) edit = Menu(editbtn, tearoff=0) edit.add_command(label='Cut', command=self.cut) edit.add_command(label='Copy', command=self.copy) edit.add_command(label='Paste', command=self.paste) editbtn.config(menu=edit) if self.file: self.make_file_type_menu(self.menubar) def make_file_type_menu(self, menubar): _, e = os.path.splitext(self.file) ext = e[1:] if ext == "py": pybtn = Menubutton(menubar, text='Python', name=ext) pybtn.pack(side=LEFT) py = Menu(pybtn, tearoff=0) py.add_command(label='Compile', command=self.compile_python, accelerator="Ctrl+F5") py.add_command(label='Run', command=self.run_python, accelerator="F5") pybtn.config(menu=py) self.bind_all("<Control-F5>", self.compile_python) self.bind_all("<F5>", self.run_python) elif ext == "tcl": tclbtn = Menubutton(menubar, text='TCL', name=ext) tclbtn.pack(side=LEFT) tcl = Menu(tclbtn, tearoff=0) tcl.add_command(label='Run', command=self.run_tcl, accelerator="F5") tclbtn.config(menu=tcl) self.bind_all("<F5>", self.run_tcl) def makestatus(self): statusbar = Frame(self, name="status") statusbar.pack(side=BOTTOM) msg = Label(statusbar, name="msg") msg.pack(side=LEFT) pos = Label(statusbar, name="pos") pos.pack(side=RIGHT) def update_pos(self, event): index = self.text.index(INSERT) l = self.nametowidget("status.pos") l.config(text=index) def update_status_msg(self, message): l = self.nametowidget("status.msg") l.config(text=message) self.after(5000, self.clear_status_msg) def clear_status_msg(self): l = self.nametowidget("status.msg") l.config(text="") def settext(self): if os.path.exists(self.file): txt = self.read_file(self.file) self.text.insert('1.0', txt) def quit(self, event=None): Frame.quit(self) def save(self, event=None): txt = self.text.get('1.0', END + '-1c') if not self.file: self.file = asksaveasfilename() self.master.title(self.file) self.make_file_type_menu(self.menubar) self.write_to_file(self.file, txt) self.update_status_msg("Saved") def new(self, event=None): _, e = os.path.splitext(self.file) ext = e[1:] b = self.menubar.children.get(ext) if b: b.destroy() self.file = None self.master.title("Untitled") self.text.delete('1.0', END) def write_to_file(self, file, txt): with open(file, 'w') as f: f.write(txt) def read_file(self, file): with open(file, 'r+') as f: txt = f.read() return txt def cut(self): txt = self.text.get(SEL_FIRST, SEL_LAST) self.text.delete(SEL_FIRST, SEL_LAST) self.clipboard_clear() self.clipboard_append(txt) def copy(self): txt = self.text.get(SEL_FIRST, SEL_LAST) self.clipboard_clear() self.clipboard_append(txt) def paste(self): txt = self.selection_get(selection='CLIPBOARD') self.text.insert(INSERT, txt) def run_python(self, event=None): p = subprocess.run([sys.executable, self.file], stdout=subprocess.PIPE, stderr=subprocess.PIPE) self.output.insert('end', p.stdout) self.output.insert('end', p.stderr) self.output.see(END) def compile_python(self, event=None): try: py_compile.compile(self.file, doraise=True) self.output.insert('end', "%s compiled successfully\n" % self.file) except py_compile.PyCompileError as pyce: lere = re.compile('\s*File \".*\", line(\d*)') r = lere.match(pyce.msg) lineno = r.group(1) print(lineno) def run_tcl(self, event=None): p = subprocess.run(["tclsh8.7", self.file], stdout=subprocess.PIPE, stderr=subprocess.PIPE) self.output.insert('end', p.stdout) self.output.insert('end', p.stderr) self.output.see(END)
class MainWindow(Frame): GRAPH_TYPES = OrderedDict([("Prime Graph", graphs.PrimeGraph), ("Fast Graph", graphs.FastGraph)]) def __init__(self, **kw): Frame.__init__(self, **kw) self.winfo_toplevel().minsize(width=600, height=400) width = min(self.winfo_screenwidth(), 1280) height = min(self.winfo_screenheight(), 720) self.winfo_toplevel().geometry("{}x{}".format(width, height)) self.pack(expand=True, fill='both') self._init_variables() self._init_components() self._init_menu() def _init_components(self): self._panes = PanedWindow(self, orient='horizontal', sashrelief="raised") self._panes.pack(expand=True, fill='both') self._left_pane = Frame(self._panes, padx=10, pady=5) self._right_pane = PanedWindow(self._panes) self._panes.add(self._left_pane, sticky='n') self._panes.add(self._right_pane) self._group_select = GroupSelect(self._left_pane) self._group_select.pack(expand=True, fill='x') # spacer Frame(self._left_pane, height=10).pack() graph_controls = LabelFrame(self._left_pane, text="Graph options", padx=10, pady=5) graph_controls.columnconfigure(1, weight=1) graph_controls.pack(expand=True, fill='x') self._show_graph_checkbutton = CheckBox(graph_controls, text='Show graph') self._show_graph_checkbutton.select() self._show_graph_checkbutton.grid(row=0, columnspan=2, sticky='w') Label(graph_controls, text='Algorithm').grid(row=1, sticky='w') self._graph_type = OptionList(graph_controls, values=tuple( MainWindow.GRAPH_TYPES.keys())) self._graph_type.config(width=15) self._graph_type.grid(row=1, column=1, sticky='we') # spacer Frame(self._left_pane, height=10).pack() self._go_button = Button(self._left_pane, text='Go', command=self._go) self._go_button.pack() def _init_variables(self): # init default properties self.setvar("graphframeview", "onlyone") self.setvar("vertexlabelposition", "auto") def _init_menu(self): toplevel = self.winfo_toplevel() self._menu = Menu(toplevel) toplevel['menu'] = self._menu view = Menu(self._menu, tearoff=0) self._menu.add_cascade(label="View", menu=view) graph_view = Menu(view, tearoff=0) view.add_cascade(label="View graphs", menu=graph_view) graph_view.add_radiobutton(variable="graphframeview", label="Only one", value="onlyone") # graph_view.add_radiobutton(label="In a row", value="row", # variable=graph_view_var) graph_view.add_radiobutton(variable="graphframeview", label="In separate window", value="window") def _go(self): view = self.getvar("graphframeview") if view == "onlyone": for child in self._right_pane.winfo_children(): child.destroy() #if view in ("onlyone", "row"): container = FrameWithCloseButton(self._right_pane) self._right_pane.add(container, minsize=600) else: container = Toplevel() graph_class = MainWindow.GRAPH_TYPES[self._graph_type.variable.get()] facade = Facade(container, self._group_select.selected_group, show_graph=self._show_graph_checkbutton.is_selected(), graph_class=graph_class) facade.pack(expand=True, fill='both')
class Program: def __init__(self): self.root = Tk() self.frame = Frame() self.frame.pack(side="top") self.title = Label(self.frame, text=TITLE) self.canvas = Canvas(self.root, width=WIDTH, height=HEIGHT, borderwidth=0, highlightthickness=0, bg="black") self.painel = PanedWindow(orient="horizontal") self.list_money = [] self.ents = [] self.num_itens = 0 self.wallet = 0 self.loss = 0 self.typ = "" def create_form(self): entries = [] fields = ["Wallet", "Loss", "Coin"] for field in fields: row = Frame(self.painel) lab = Label(self.painel, width=15, text=field, anchor='w') ent = Entry(self.painel) entries.append((row, lab, ent)) return entries def create_money(self): values_list = [ 100.0, 50.0, 20.0, 10.0, 5.0, 2.0, 1.0, 0.5, 0.25, 0.1, 0.05, 0.01 ] change = self.wallet - self.loss count = 0 while change > 0.0: if change - values_list[count] >= 0.0: change -= values_list[count] change = round(change, 2) print(change) money = Money(values_list[count], self.typ) self.list_money.append(money) else: count += 1 def render_notes(self): print(self.list_money) place = [0, 0] for each in self.list_money: img = each.render_money() imge = Label(self.canvas, image=img) imge.image = img imge.place(x=place[0], y=place[1]) if place[0] >= 1000: place[1] += 150 place[0] = 0 continue place[0] += 150 def fetch(self): count = 0 self.list_money = [] self.canvas.delete("all") self.canvas.update() for entry in self.ents: count += 1 text = entry.get() if count == 1: self.wallet = float(text) if count == 2: self.loss = float(text) if count == 3: self.typ = str(text) print("WALLET: {}\nLOSS: {}\nTyp: {}".format(self.wallet, self.loss, self.typ)) self.create_money() self.render_notes() self.canvas.update() def create_painel(self): ents = self.create_form() for row, lab, ent in ents: self.painel.add(row) self.painel.add(lab) self.painel.add(ent) self.ents.append(ent) self.painel.add(Button(self.painel, text="submit", command=self.fetch)) def main(self): self.canvas.pack() self.painel.pack() self.title.pack(side="top") self.create_painel() self.root.mainloop()
profiles_adjust_ROI_text.pack(side=LEFT, padx=(70,0)) global profiles_redefine_film_ROI_frame profiles_redefine_film_ROI_frame = tk.Frame(profiles_choose_profile_canvas) profiles_redefine_film_ROI_frame.pack(side=LEFT, padx=(0,100)) profiles_redefine_film_ROI_frame.config(bg='#ffffff') global profiles_adjust_button_left global profiles_adjust_button_right global profiles_adjust_button_down global profiles_adjust_button_up global profiles_film_panedwindow profiles_film_panedwindow = PanedWindow(profiles_view_film_doseplan_ROI, orient='vertical') profiles_film_panedwindow.pack() profiles_film_panedwindow.configure(sashrelief = RAISED, showhandle=True) #global profiles_film_tab_parent #profiles_film_tab_parent = ttk.Notebook(profiles_film_notebook_canvas) #profiles_film_tab_parent.borderWidth=0 #profiles_film_tab_parent.pack() #global profiles_film_tab_image #profiles_film_tab_image = ttk.Frame(profiles_film_tab_parent) #profiles_film_tab_image.config(relief=FLAT) #global profiles_film_tab_dose
from tkinter import Tk, Label, PanedWindow, BOTH, VERTICAL master = Tk() m1 = PanedWindow(master) m1.pack(fill=BOTH, expand=1) left = Label(m1, text="left pane") m1.add(left) m2 = PanedWindow(m1, orient=VERTICAL) m1.add(m2) top = Label(m2, text="top pane") m2.add(top) bottom = Label(m2, text="bottom pane") m2.add(bottom) master.mainloop()
class TotvsService3(Tk): log = logController topMenu = TopMenu timeInterval = int() timeIntervalIsRun = False bottomPanels = BottomPanels linhaDeSeparacao = PanedWindow GroupsOfServices = list() def configTotvsServiceLayout(self): self.title('Totvs Services 3') self.log = logController() self.log.clearLog() self.log.consoleLogAdd(self.menssageInit()) self.Positioninthecenter() self["bg"] = "#616161" self.iconbitmap(self.resource_path("icon.ico")) self.LoadPainels() self.bind("<Configure>", self.callback) self.readCsv() def menssageInit(self): TextIni = '' TextIni += "##################### Totvs Service 3 ############################\n" TextIni += "### Autor: Gabriel Da Silva Souza ###\n" TextIni += "### Descrição: App para controlar serviços do Windows, voltado ###\n" TextIni += "### para Serviços do Protheus ###\n" TextIni += "### Versão: 3.0 15/07/2020 ###\n" TextIni += "##################################################################" return TextIni def iniScheduleAtuService(self): self.timeIntervalIsRun = True self.timeInterval = 5 schedule = Thread(target=self.scheduleAtuService, args=[]) schedule.start() def scheduleAtuService(self): while (self.timeIntervalIsRun): self.AtuService() sleep(self.timeInterval) def AtuService(self): for Group in self.bottomPanels.interior.winfo_children(): Group.AtuServices() def closingApp(self): self.timeIntervalIsRun = False def Positioninthecenter(self): largura = 650 altura = 600 largura_tela = self.winfo_screenwidth() altura_tela = self.winfo_screenheight() posx = largura_tela / 2 - largura / 2 posy = altura_tela / 2 - altura / 2 self.geometry("%dx%d+%d+%d" % (largura, altura, posx, posy)) self.minsize(650, 600) def LoadPainels(self): self.topMenu = TopMenu(self) self.topMenu.AdButtons() self.topMenu["bg"] = "#616161" self.topMenu.pack() self.linhaDeSeparacao = PanedWindow() self.linhaDeSeparacao["bg"] = "#9E9E9E" self.linhaDeSeparacao.pack() self.bottomPanels = BottomPanels(self) self.bottomPanels["bg"] = "#616161" self.bottomPanels.pack() self.configPainels() def callback(self, event): self.configPainels() def ReloadBottonPanel(self): self.bottomPanels.ClearServicesGroups() self.update() self.readCsv() def resource_path(self, relative_path): try: base_path = sys._MEIPASS except Exception: base_path = os.path.abspath("./icons") return os.path.join(base_path, relative_path) def configPainels(self): self.topMenu["height"] = self.winfo_height() * 0.12 self.topMenu["width"] = self.winfo_width() self.linhaDeSeparacao["height"] = 4 self.linhaDeSeparacao["width"] = self.winfo_width() self.bottomPanels["height"] = self.winfo_height() * 0.88 self.bottomPanels["width"] = self.winfo_width() #Lê o CSV e cria os criar os Grupos de Serviços especificado no CSV def readCsv(self): linha = '' groupName = '' groupIndex = 0 StringErro = '' self.GroupsOfServices.clear() try: with open('services.csv', 'r') as arquivo_csv: leitor = reader(arquivo_csv, delimiter=';') for linha in leitor: if (linha[0] == 'Group'): if (len(linha) > 2): self.GroupsOfServices.append( [linha[1], int(linha[2]), []]) groupName = linha[1] else: self.GroupsOfServices.append([linha[1], 1, []]) groupName = linha[1] groupIndex += 1 else: if (groupName == ''): groupName = 'Grupo Nulo' self.GroupsOfServices.append(['Grupo Nulo', 1, []]) groupIndex += 1 self.GroupsOfServices[groupIndex - 1][2].append( [linha[0], linha[1]]) self.bottomPanels.AddGroupsAndServices(self.GroupsOfServices) except Exception as e: StringErro += '###########################################################\n' StringErro += "Erro no CSV: \t" + str(e) + "\n" StringErro += '###########################################################\n' self.log.consoleLogAdd(StringErro)
class entermenu: def reset(self): for i in self.treeview.get_children(): self.treeview.delete(i) def searchfun(self): search = self.menuText.get() cur = con.cursor() query = 'select * from menu where name like "' + search + '%"' cur.execute(query) self.data = cur.fetchall() self.insertData() def insertData(self): self.reset() for i in range(0, len(self.data)): self.treeview.insert("", i, values=self.data[i]) # ''''''''FRAME1'''' def __init__(self): self.window = Tk() self.window.config(bg="lightcyan", highlightthickness=8, highlightbackground="navy", highlightcolor="navy") self.frame1 = PanedWindow(self.window) self.enter = Label(self.frame1, text="ENTER MENU", bg="lightcyan", fg="red", font=("Harlow Solid Italic", 40, "italic", "bold")) self.menuText = Entry(self.frame1) self.searchbttn = Button(self.frame1, text="Search", command=self.searchfun) self.enter.grid(row=0, column=0) self.menuText.grid(row=0, column=1) self.searchbttn.grid(row=0, column=2) # ''''''''FRAME 2'''' self.frame2 = PanedWindow(self.window) self.treeview = Treeview(self.frame2, columns=("menuid", "name", "description", "price")) self.treeview.heading("menuid", text="MENU ID") self.treeview.heading("name", text="NAME") self.treeview.heading("description", text="DESCRIPTION") self.treeview.heading("price", text="PRICE") # for table color style = Style() style.configure("Treeview.Heading", font=("Script MT Bold", 16)) style.configure("Treeview", font=("calibri", 13)) self.treeview["show"] = "headings" self.treeview.pack() self.frame1.pack() self.frame2.pack() self.window.mainloop() #obj=entermenu()
class App: def __init__(self, win): self.video = Capture() self.win = win self.imgcount = 1 self.win['bg'] = 'white' Label(self.win, bg='white', fg='black', text="Attendance Registration", font=('times new roman', 25)).pack() # master pane contains the seperation self.m1 = PanedWindow(self.win, bd=5, background="black") self.m1.pack(fill=BOTH, expand=1) # leftpane self.leftpane = PanedWindow(self.m1, orient=VERTICAL, bd=1, background="white") self.m1.add(self.leftpane) pic = Image.open('resources/emptyFace.jpg') self.ima = ImageTk.PhotoImage(pic) self.P1 = Label(self.leftpane, image=self.ima, borderwidth=2, relief="solid", height=150, width=180) self.P1.pack(padx=(2, 2), pady=(2, 2)) self.P1.image = self.ima self.P2 = Label(self.leftpane, image=self.ima, borderwidth=2, relief="solid", height=150, width=180) self.P2.pack(padx=(2, 2), pady=(2, 2)) self.P2.image = self.ima self.P3 = Label(self.leftpane, image=self.ima, borderwidth=2, relief="solid", height=150, width=180) self.P3.pack(padx=(2, 2), pady=(2, 2)) self.P3.image = self.ima # rightpane self.rightpane = PanedWindow(self.m1, orient=VERTICAL, bd=2, background="white") self.m1.add(self.rightpane) h, w = 480, 640 self.frame2 = Frame(self.rightpane, bg='cyan') self.frame2.pack(expand=TRUE) self.canvas = Canvas(self.frame2, width=w, height=h, bd=2) self.canvas.grid(row=0, column=0) self.frame3 = Frame(self.rightpane, bg='white') self.frame3.pack(fill=X) # inside frame 3 self.suid = StringVar(value="Enter UID") self.Uid = Entry(self.frame3, textvariable=self.suid, font=('times new roman', 13), borderwidth=2, relief="solid", fg='black').grid(row=0, column=1, padx=80, pady=5) Button(self.frame3, text="CAPTURE", font=('times new roman', 12), fg='black', bg='green', height=1, width=10, command=lambda: [self.activate_threads()]).grid(row=0, column=2, padx=10, pady=5) Button(self.frame3, text="SUBMIT", font=('times new roaman', 12), fg='black', bg='red', height=1, width=10, command=self.details).grid(row=0, column=3, padx=10, pady=5) self.updates() self.win.mainloop() def preview(self): s = self.suid.get() list_of_faces = os.listdir("dataset/" + s + "/") size_of_faces = len(list_of_faces) if size_of_faces >= 3: temp_list = list_of_faces[size_of_faces - 3:] else: temp_list = list_of_faces path = 'dataset/' + s + '/' + temp_list[-1] if os.path.exists(path): image1 = ImageTk.PhotoImage(Image.open(path)) self.P1.config(image=image1) self.P1.image = image1 if len(temp_list) > 1: path = 'dataset/' + s + '/' + temp_list[-2] if os.path.exists(path): image2 = ImageTk.PhotoImage(Image.open(path)) self.P2.config(image=image2) self.P2.image = image2 if len(temp_list) > 2: path = 'dataset/' + s + '/' + temp_list[-3] if os.path.exists(path): image3 = ImageTk.PhotoImage(Image.open(path)) self.P3.config(image=image3) self.P3.image = image3 def activate_threads(self): self.thread_var = True self.threads() def updates(self): r, f = self.video.get_frame() if r: self.img = ImageTk.PhotoImage(image=Image.fromarray(f)) self.canvas.create_image(0, 0, image=self.img, anchor=NW) self.win.after(6, self.updates) def threads(self): if self.thread_var: if self.check_fields(): print("threads started..") self.video.create_dataset(self.suid.get(), self.imgcount) self.imgcount += 1 else: from tkinter import messagebox messagebox.showerror("Error", "Enter valid details! and try again.") t3 = threading.Thread(target=self.preview) t3.start() def check_fields(self): uid = self.suid.get() if uid == "Enter UID": return False else: return True def details(self): if not self.check_fields: from tkinter import messagebox messagebox.showerror("Error", "Enter valid UID!") else: # call for post print(self.suid.get()) def close_btn(self): try: self.win.destroy() except: pass
total_time = (end_time - begin_time).total_seconds() if total_time == 0: total_time = 2.23E-308 # 当begin_time和end_time相等时,将total_time设为IEEE 745标准中规定的最小浮点数 bytes_per_second = total_bytes / total_time / 1024 # bytes_per_second = total_bytes / ((end_time - begin_time).total_seconds()) / 1024 status_bar.set('已经发送了%d个%s数据包, 已经发送了%d个字节,发送速率: %0.2fK字节/秒', n, packet_proto, total_bytes, bytes_per_second) def create_welcome_page(root): welcome_string = 'simple protocol sender \n IPv6 will come soon\n ICMPv6 also on the road' Label( root, justify=CENTER, padx=10, pady=150, text=welcome_string, font=('隶书', '30', 'bold')).pack() if __name__ == '__main__': # 创建协议导航树并放到左右分隔窗体的左侧 main_panedwindow.add(create_protocols_tree()) # 将协议编辑区窗体放到左右分隔窗体的右侧 main_panedwindow.add(protocol_editor_panedwindow) # 创建欢迎界面 create_welcome_page(protocol_editor_panedwindow) main_panedwindow.pack(fill=BOTH, expand=1) # 启动消息处理 tk.mainloop()
from tkinter import (PanedWindow, mainloop, BOTH, Entry, VERTICAL, Scale, Button, HORIZONTAL) pw1 = PanedWindow() pw1.pack(fill=BOTH, expand=1) ent1 = Entry(master=pw1, bd=5) pw1.add(ent1) pw2 = PanedWindow(master=pw1, orient=VERTICAL) pw1.add(pw2) sc1 = Scale(master=pw2, orient=HORIZONTAL) pw2.add(sc1) bt1 = Button(master=pw2, text="OK") pw2.add(bt1) mainloop()
class treeview: def clearTreeData(self): for x in self.treeview.get_children(): self.treeview.delete(x) def fullDataFetchQuery(self): cur = con.cursor() query = "select * from menu" cur.execute(query) self.data = cur.fetchall() print(self.data) def showFullData(self): self.fullDataFetchQuery() for i in range(0, len(self.data)): self.treeview.insert("", i, values=self.data[i]) def deleteCommand(self): v = self.treeview.focus() c = self.treeview.item(v) v1 = c['values'] if len(v1) > 0: ''' GET DATA FROM TREEVIEW''' self.treeData = self.treeview.item(self.treeview.focus())['values'] print(self.treeData) print(self.treeData[0]) ''' ASK YES NO CONFIRMATION ''' confirm = askyesno("ARE YOU SURE YOU WANT TO DELETE") if confirm == True: cur = con.cursor() query = "delete from menu where menuid=" + str( self.treeData[0]) print(query) cur.execute(query) con.commit() message = "Data Deleted for MenuId:" + str( self.treeData[0]) + " with Menu Item:" + str( self.treeData[1]) showinfo("Message", message) self.clearTreeData() self.showFullData() else: showinfo('', 'select any menu first') def __init__(self): self.window = Toplevel() self.window.config(bg="lightcyan", highlightthickness=8, highlightbackground="navy", highlightcolor="navy") # *******************FRAME 1 Tree view*************************** #DATA QUERY self.frame1 = PanedWindow(self.window) self.treeview = Treeview(self.frame1, columns=("menu", "name", "description", "price")) self.treeview.heading("menu", text="Menu Item") self.treeview.heading("name", text="Name") self.treeview.heading("description", text="Description") self.treeview.heading("price", text="Price") self.treeview["show"] = "headings" # for table color style = Style() style.configure("Treeview.Heading", font=("Script MT Bold", 16)) style.configure("Treeview", font=("calibri", 13)) self.treeview.pack() #*********EVENT BIND TREEVIW************** self.frame1.pack() self.showFullData() # ***************FRAME 2******************** self.frame2 = PanedWindow(self.window) self.delBtn = Button(self.frame2, text="Delete", command=self.deleteCommand) self.delBtn.grid(row=0, column=1) self.frame2.pack() self.window.mainloop()
class Interface: root = Tk() chosenFolder = "" edited_list_songs = [] count = 0 def __init__(self): logging.basicConfig( format='%(asctime)s %(levelname)s : %(funcName)s %(message)s', level=logging.INFO) self.config = ConfigParser() self.config.read(os.path.abspath('themes/default.ini')) self.root.title('Cover CD v1.6') self.root.minsize(600, 500) self.root.config(background=self.config['color']['rootBackground']) self.setup() def setup(self): logging.info("Start application") self.displayMenuBar() #Panel Choix Dossier & Liste Mp3 self.main_pane = PanedWindow(self.root, orient=HORIZONTAL, bg=self.config["color"]["paneBackground"]) self.main_pane.pack(side=TOP) self.Paned2 = PanedWindow(self.root, orient=HORIZONTAL, bg=self.config["color"]["paneBackground"]) self.Paned2.pack() self.root.protocol("WM_DELETE_WINDOW", self.on_closing) self.root.mainloop() def displayMenuBar(self): menu_bar = Menu(self.root) self.root.config(menu=menu_bar) self.menu_fichier = Menu(menu_bar, tearoff=0) menu_bar.add_cascade(label="File", menu=self.menu_fichier) self.menu_fichier.add_command(label="Open folder", command=self.openDirectory) self.menu_fichier.add_command(label="Save tracklist", command=self.generate, state="disabled") self.menu_fichier.add_separator() self.menu_fichier.add_command(label="Quit", command=self.root.destroy) # Bouton choisir un dossier def openDirectory(self): logging.info("start") # La fenetre de selection de dossier apparait self.chosenFolder = filedialog.askdirectory(initialdir=getLastPath(), title='Choose a folder') logging.info("self.chosenfolder : {}".format(self.chosenFolder)) self.chosenFolder = os.path.abspath(self.chosenFolder) if self.chosenFolder: try: self.deleteFigletTitle() self.deletePathFolder() self.deleteNameFolder() self.deleteFontScrollableList() self.deleteSongsLabels() self.deleteSongsList() self.deleteSaveButton() self.labelSucess.destroy() except AttributeError: pass try: # Affichage du label du path complet self.path = StringVar() self.path.set(self.chosenFolder) # declaration des objets self.C = Mp3Processing(self.chosenFolder) self.B = BuildCover(self.C) # reinitialise les objets lors de l'ouverture d'un nouveau dossier if self.count > 0: self.C.__init__(self.chosenFolder) self.B.__init__(self.C) self.count += 1 self.menu_fichier.entryconfig(1, state="active") self.displayFigletTitle() self.displayPathFolder() self.displayNameFolder(self.C.getDefautCDName()) self.displayFontScrollableList() self.displaySongsLabels() self.displaySongsList(self.C.list_mp3) self.displaySaveButton() except HeaderNotFoundError: print("Aucun fichier .mp3 trouvé !") def displayFigletTitle(self): f = Figlet(font=self.B.default_font) text = str(f.renderText(self.B.defaut_CD_title)) self.figlet_title = Label(self.main_pane, text=text, font=self.config["font"]["FigletTitle"], justify=LEFT, bg=self.config["color"]["paneBackground"]) self.figlet_title.pack() def deleteFigletTitle(self): try: self.figlet_title.destroy() except AttributeError: pass def displayPathFolder(self): logging.info("start") self.labelPathCD = Label(self.main_pane, textvariable=self.path, width=60, bg=self.config["color"]["paneBackground"]) self.labelPathCD.pack() def deletePathFolder(self): try: self.labelPathCD.destroy() except AttributeError: pass def displayNameFolder(self, nameCD): logging.info("start") self.CDtitre = StringVar() self.CDtitre.set(nameCD) self.entryTitreCD = Entry(self.main_pane, textvariable=self.CDtitre, width=20, justify=CENTER, bg=self.config["color"]["paneBackground"], relief="solid") self.entryTitreCD.pack() self.edited_list_songs = [] def deleteNameFolder(self): try: self.entryTitreCD.destroy() logging.info("OK") except AttributeError: pass def displaySongsLabels(self): logging.info("start") # Déclaration des Labels i = 0 self.labeltitre = Label(self.Paned2, text="Title", bg=self.config["color"]["paneBackground"]) self.labeltitre.grid(row=i, column=0) self.labelduree = Label(self.Paned2, text="Length", bg=self.config["color"]["paneBackground"]) self.labelduree.grid(row=i, column=1) self.labelbpm = Label(self.Paned2, text="Key", bg=self.config["color"]["paneBackground"]) self.labelbpm.grid(row=i, column=2) self.labelkey = Label(self.Paned2, text="Tempo", bg=self.config["color"]["paneBackground"]) self.labelkey.grid(row=i, column=3) def deleteSongsLabels(self): try: self.labeltitre.destroy() self.labelbpm.destroy() self.labelduree.destroy() self.labelkey.destroy() logging.info("OK") except AttributeError: pass def displaySongsList(self, mp3_dict): logging.info("start") i = 1 logging.info('edited_list_songs'.format(self.edited_list_songs)) self.edited_list_songs.clear() logging.info('edited_list_songs'.format(self.edited_list_songs)) logging.info('mp3_dict items'.format(mp3_dict.items())) for key, value in sorted(mp3_dict.items()): temp = [] temp.append(list(mp3_dict.keys())[i - 1]) titre = StringVar(self.Paned2, value=value['display_title']) bpm = StringVar(self.Paned2, value=value['tempo']) key = StringVar(self.Paned2, value=value['key']) duree = StringVar(self.Paned2, value=value['length']) # Affichage des titres entryTitre = Entry(self.Paned2, textvariable=titre, width=55, bg=self.config['color']['paneBackground'], relief="solid") if len(value["display_title"]) > self.B.title_limit: entryTitre.configure( background=self.config['color']['exceedLimitLength']) entryTitre.grid(row=i, column=0) temp.append(entryTitre) entryDuree = Entry( self.Paned2, textvariable=duree, width=8, state='disabled', disabledbackground=self.config["color"]["paneBackground"], disabledforeground="black", relief="solid") entryDuree.grid(row=i, column=1) temp.append(entryDuree) entryKey = Entry(self.Paned2, textvariable=key, width=8, bg=self.config["color"]["paneBackground"], relief="solid") entryKey.grid(row=i, column=2) temp.append(entryKey) entryBpm = Entry(self.Paned2, textvariable=bpm, width=8, bg=self.config["color"]["paneBackground"], relief="solid") entryBpm.grid(row=i, column=3) temp.append(entryBpm) self.edited_list_songs.append(list(temp)) i += 1 def displaySaveButton(self): logging.info("start") self.saveButton = Button(self.Paned2, text='Save', command=self.save, padx=5, pady=5, bg=self.config["color"]["paneBackground"], relief="solid") self.saveButton.grid() def deleteSaveButton(self): try: self.saveButton.destroy() logging.info("OK") except AttributeError: pass def deleteSongsList(self): try: for sons in self.edited_list_songs: for a in sons[1:]: a.get() a.destroy() logging.info("OK") except AttributeError: pass def displayFontScrollableList(self): logging.info("start") self.varFont = StringVar(self.Paned2) self.varFont.set(self.B.default_font) self.spinBoxFont = OptionMenu(self.main_pane, self.varFont, *self.B.list_font) self.spinBoxFont.config( bg=self.config["color"]["paneBackground"], activebackground=self.config["color"]["paneBackground"], padx=1, pady=1, relief="solid", highlightthickness=0, highlightcolor=self.config["border"]["scrollableList"], borderwidth=1) self.spinBoxFont.pack() def deleteFontScrollableList(self): try: self.spinBoxFont.destroy() logging.info("OK") except AttributeError: pass # Enregistre les valeurs des Entry def save(self): logging.info("start") # On recupere la fonte choisie (defaut : standard) self.B.default_font = self.varFont.get() # On récupere le Titre du CD self.B.defaut_CD_title = self.CDtitre.get() for elem in self.edited_list_songs: self.B.mp3_dict[elem[0]]["display_title"] = str(elem[1].get()) self.B.mp3_dict[elem[0]]["length"] = str(elem[2].get()) self.B.mp3_dict[elem[0]]["key"] = str(elem[3].get()) self.B.mp3_dict[elem[0]]["tempo"] = str(elem[4].get()) self.generate() try: self.saveButton.destroy() except AttributeError: pass # Suppression de l'entry titre du CD self.deleteFigletTitle() self.deleteNameFolder() self.deletePathFolder() self.deleteSongsLabels() self.deleteSongsList() self.deleteFontScrollableList() self.B.buildHeader() self.B.buildListSongs() self.displayFigletTitle() self.displayPathFolder() self.displayNameFolder(self.B.defaut_CD_title) self.displayFontScrollableList() self.displaySongsLabels() self.displaySongsList(self.B.mp3_dict) self.displaySaveButton() # Genere la cover def generate(self): logging.info("start") try: self.labelSucess.destroy() except AttributeError: pass self.B.buildListSongs() self.B.writeTemplate() self.labelSucess = Label(self.root, text="Tracklist générée", bg=self.config["label"]["generateBackground"]) self.labelSucess.pack(side="bottom") def on_closing(self): logging.info("start") if messagebox.askokcancel("Quit", "Do you want to quit?"): self.root.destroy()
def refreshWidget(self) : #print "refresh" self.card_win.pack_forget() import unicodedata #Card window self.card_win = PanedWindow(self.card_win.master, orient=VERTICAL) self.card_win.pack(side=TOP, expand=True, fill=BOTH, pady=2, padx=2) #Create the name zone name_zone=PanedWindow(self.card_win, orient=HORIZONTAL) name = StringVar() name.set(self.name) def modifName(*args) : try : assert('"' not in name.get()) name.get().encode('ascii') except Exception as e: print ("error on name") name.set(self.name) return old = self.name in Card.blocked_creature self.name=name.get() if old or self.name in Card.blocked_creature : self.refreshWidget() name.trace("w", modifName) name_wid=Entry(name_zone, width=30,textvariable=name) name_wid.pack() name_zone.add(name_wid) #Create the cost ad star stringvar #print int(floor(self.getCost())) self.cost=StringVar() self.stars=StringVar() cost_wid=Label(None, textvariable=self.cost, background='red',width=5, anchor=W) star_wid=Label(None, textvariable=self.stars, background='blue', anchor=E) self.cost.set(str(int(floor(self.getCost())))) self.stars.set("*"*self.getStars()) #Add them in name zone name_zone.add(cost_wid) name_zone.add(star_wid) #Create an Image Zone image_zone=Button(self.card_win, command=self.choosePhoto) if hasattr(self,"photofile") and self.photofile : print ("Image: ",self.photofile) try : pilImage=Image.open(self.photofile) img=PhotoImage(pilImage,master=image_zone) except : decomp=self.photofile.split('/') for i in range(1,6) : try : fname="/".join(decomp[-i:]) print ("try to open",fname) pilImage = Image.open(fname) img=PhotoImage(pilImage,master=image_zone) self.photofile=fname break except : self.photofile=None if self.photofile : w, h = img.width(), img.height() print('wh',w,h) if h>400 : print("reduction") img=PhotoImage(pilImage.resize((w//2,h//2), Image.ANTIALIAS),master=image_zone) image_zone=Button(self.card_win,image=img, command=self.choosePhoto) image_zone.image=img #image_zone.configure(image=image_zone.image,width=50,height=50,compound=RIGHT) #image_zone.pack() #print "IMAGE CHANGED" else : from os import path fname=self.name.replace(" ","_") if path.isfile("Cards/"+fname+".png") : image_zone.config(text='image can be taken from\n'+"Cards/"+fname+".png",background='white',anchor=CENTER) else : image_zone.config(text='clic to choose image',background='white',anchor=CENTER) #image_zone.pack() # POWER ZONE power_zone=PanedWindow(self.card_win, orient=VERTICAL) #fenetre=self.card_win.master def removePowerCreator(px) : def removePower(*args) : #print 'avant',list_pow self.bonus.remove(px) #print 'apres',list_pow #self.card_win.pack_forget() self.refreshWidget() return removePower for p in self.bonus : powline = PanedWindow(self.card_win, orient=HORIZONTAL) pow_wid=p.initWidget(powline) powline.add(pow_wid) removepow=Button(powline, text="X", command=removePowerCreator(p), anchor=E) removepow.pack() powline.add(removepow) power_zone.add(powline) def addPower(*args) : if addBonus.get()!= "add bonus": name=addBonus.get() else: name=add_cost_alteration.get() print ("added :",name) import CardPowers self.bonus+=[eval('CardPowers.'+name+'()')] self.bonus[-1].parent=self.bonus self.bonus[-1].card=self #self.card_win.pack_forget() self.refreshWidget() #Add bonus Option menu addBonus = StringVar(power_zone) addBonus.set("add bonus") # default value if not self.pv: addBonus_wid = Spell.getSpellMenu(power_zone, addBonus) else: addBonus_wid = getBonusMenu(power_zone, addBonus) addBonus.trace('w', addPower) if self.pv>0 or len(self.bonus)==0 or all([b.is_cost_alterator for b in self.bonus]): addBonus_wid.pack() #Add this to power zone power_zone.add(addBonus_wid) #Create save zone save_zone = PanedWindow(self.card_win, orient=HORIZONTAL) if self.monster_type != "all" and not(self.name in Card.blocked_creature) : save_wid = Button(save_zone, text="Save", command=self.postAndSave) elif self.monster_type != "all" : save_wid = Button(save_zone, text="creature in campaign", command=None) else: save_wid = Button(save_zone, text="nead type", command=None) save_wid.pack() #Create the open button save_zone.pack() if Card.monster_list.keys(): self.opening = StringVar(save_zone) self.opening.set("Open") choice = [na for na in Card.monster_list.keys() if na not in Card.blocked_creature] choice.sort() #print all_monsters.keys() open_wid = OptionMenu(save_zone, self.opening,*choice) self.opening.trace('w', self.Open) open_wid.pack() save_zone.add(open_wid) if Card.monster_list.keys(): self.delete = StringVar(save_zone) self.delete.set("Delete") choice = [na for na in Card.monster_list.keys() if na not in Card.blocked_creature] choice.sort() delete_wid = OptionMenu(save_zone, self.delete,*choice) self.delete.trace('w', self.clicDelete) delete_wid.pack() save_zone.add(delete_wid) #Create the type button self.category = StringVar(save_zone) self.category.set(self.monster_type) choice = [file2name(t,"_monsters.sav") for t in glob.glob("CardFiles/*_monsters.sav")] if "recup" in choice: choice.remove("recup") #print all_monsters.keys() category_wid = OptionMenu(save_zone, self.category,*choice) self.category.trace('w', self.setFile) category_wid.pack() #Add it to save zone save_zone.add(save_wid) save_zone.add(category_wid) #Create a new Strength zone for att and pv strength_zone=PanedWindow(self.card_win, orient=HORIZONTAL) att=StringVar() att.set(str(self.att)) pv=StringVar() ; pv.set(str(self.pv)) def modifiedAttPv(*args) : print ("modifiedAttPv") self.pv=int(pv.get()) if self.pv<1 and self.is_spell==False : if len(self.bonus)==0 : self.is_spell=True self.refreshWidget() else : self.pv=1 self.refreshWidget() if self.pv>0 and self.is_spell==True : if len(self.bonus)==0 : self.is_spell=False self.refreshWidget() else : self.pv=0 self.refreshWidget() self.att=int(att.get()) self.getCost() att_wid = Spinbox(strength_zone, from_=0, to=1000,textvariable=att,command=modifiedAttPv) att_wid.pack() strength_zone.add(att_wid) strength_zone.add(Label(strength_zone, text=' ', background='white', anchor=CENTER)) pv_wid = Spinbox(strength_zone, from_=0, to=1000,textvariable=pv,command=modifiedAttPv) pv_wid.pack() strength_zone.add(pv_wid) #Put it all in window self.card_win.add(name_zone) self.card_win.add(image_zone) self.card_win.add(power_zone) self.card_win.add(strength_zone) self.card_win.add(save_zone) self.card_win.pack()
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.title("i.MX Smart-Boot Tool") self.wm_minsize(600, 450) # Top separator ttk.Frame(self).pack(fill='x', pady=4) # -------------------------------------------------------------------------------------------------------------- # Device selection drop-box with scan button # -------------------------------------------------------------------------------------------------------------- frame = ttk.Frame(self) frame.pack(fill='x', padx=5) self.devices_box = ttk.Combobox(frame, state='readonly') self.devices_box.pack(side='left', fill='x', expand=True, padx=2, pady=3) self.scan_button = ttk.Button(frame, text="Scan", command=self.on_scan_button_clicked) self.scan_button.pack(side='right', padx=2, pady=2) # -------------------------------------------------------------------------------------------------------------- # SMX File inbox with open button # -------------------------------------------------------------------------------------------------------------- frame = ttk.Frame(self) frame.pack(fill='x', padx=5) self.smx_path = ttk.Entry(frame) self.smx_path.pack(side='left', fill='x', expand=True, padx=2, pady=0) self.open_button = ttk.Button(frame, text="Open", command=self.on_open_button_clicked) self.open_button.pack(side='right', padx=2, pady=2) # -------------------------------------------------------------------------------------------------------------- # Body # -------------------------------------------------------------------------------------------------------------- pw = PanedWindow(self, orient='vertical') pw.pack(fill='both', expand=True, padx=6, pady=2) frame = ttk.Frame() frame.pack(fill='x', padx=4) self.script_view = ttk.Treeview(frame, height=5, columns=('num', 'name', 'desc'), show="headings") self.script_view.heading('num', text='-') self.script_view.heading('name', text='Name') self.script_view.heading('desc', text='Description') self.script_view.column('num', minwidth=25, width=25, anchor='center', stretch='no') self.script_view.column('name', minwidth=160, width=160, anchor='center', stretch='no') self.script_view.column('desc', width=100, anchor='w') self.script_view.pack(side='left', fill='both', expand=True) vsb1 = ttk.Scrollbar(frame, orient="vertical", command=self.script_view.yview) vsb1.pack(side='right', fill='y') self.script_view.configure(yscrollcommand=vsb1.set) pw.add(frame) pw.paneconfig(frame, minsize=95, height=95) frame = ttk.Frame() frame.pack(fill='both', padx=4) self.log_view = ttk.Treeview(frame, height=5, columns=('desc',), show='', selectmode='none') self.log_view.column('desc', anchor='w') self.log_view.pack(side='left', fill='both', expand=True) vsb2 = ttk.Scrollbar(frame, orient="vertical", command=self.log_view.yview) vsb2.pack(side='right', fill='y') self.log_view.configure(yscrollcommand=vsb2.set) pw.add(frame) pw.paneconfig(frame, minsize=85) self.progressbar = ttk.Progressbar(self, orient="horizontal", mode="determinate") self.progressbar["maximum"] = PGRANGE self.progressbar.pack(fill='x', padx=6, pady=2) # -------------------------------------------------------------------------------------------------------------- # Buttons # -------------------------------------------------------------------------------------------------------------- frame = ttk.Frame(self) frame.pack(fill='x', side='bottom', padx=4, pady=5) self.about_button = ttk.Button(frame, text="About", command=self.on_about_button_clicked) self.about_button.pack(side='left', padx=2, pady=2) self.info_button = ttk.Button(frame, text="DevInfo", command=self.on_info_button_clicked, state='disabled') self.info_button.pack(side='left', padx=2, pady=2) self.exit_button = ttk.Button(frame, text="Exit", command=self.on_exit_button_clicked) self.exit_button.pack(side='right', padx=2, pady=2) self.start_button = ttk.Button(frame, text="Start", command=self.on_start_button_clicked, state='disabled') self.start_button.pack(side='right', padx=2, pady=2) self.queue = queue.Queue() # USB hotplug (Linux only) # self.hotplug.attach(self.scan_usb) # self.hotplug.start() # TODO: Fix USB hot-plug self.scan_usb()
class ServiceGroup(Frame): log = logController NameGroup = StringVar DelayTime = 1 lbServiceGroupName = Label progressBarProcessing = Progressbar progressBarStyle = Style progressNumber = DoubleVar btStarGroup = Button imagebtStarGroup = PhotoImage btStopGroup = Button imagebtStopGroup = PhotoImage linhaDeSeparacao = PanedWindow OrganizerButtons = PanedWindow StyleServiceGroup = StylesInterface def __init__(self, *args, **kw): Frame.__init__(self, *args, **kw) self.NameGroup = StringVar() self.log = logController() def SetInformationGroup(self, name="", delay=0): self.NameGroup.set(name) self.DelayTime = delay def resource_path(self, relative_path): try: base_path = sys._MEIPASS except Exception: base_path = os.path.abspath("./icons") return os.path.join(base_path, relative_path) def AtuServices(self): serviceTool = win32.lib.win32serviceutil for service in self.winfo_children(): if ('service' in service._name): StringMen = 'Atualizando Status do Serviço... ' + service.ServiceName self.log.consoleLogAdd(StringMen) Status = self.StringStatus( serviceTool.QueryServiceStatus(service.ServiceName)[1]) service.atuStatus(service.ServiceNameDisplay + "\n" + Status, Status) #Retorna a string de cada status do serviço def StringStatus(self, nService=0): if (nService == 1): return "STOPPED" elif (nService == 2): return "START PENDING" elif (nService == 3): return "STOP PENDING" elif (nService == 4): return "RUNNING" elif (nService == 5): return "CONTINUE PENDING" elif (nService == 6): return "PAUSE PENDING" elif (nService == 7): return "PAUSED" def ConfigComponents(self, NumberOfServices=0): self.lbServiceGroupName = Label(self) self.lbServiceGroupName["bg"] = "#616161" self.lbServiceGroupName["textvariable"] = self.NameGroup self.lbServiceGroupName["font"] = "Roboto 20" self.lbServiceGroupName["fg"] = "white" self.lbServiceGroupName.pack(pady=5) self.progressNumber = DoubleVar() self.progressBarStyle = Style() self.progressBarStyle.theme_use('clam') self.progressBarStyle.configure("Horizontal.TProgressbar", troughcolor='#616161', background="#34A853", lightcolor='#34A853', darkcolor="#34A853") self.progressBarProcessing = Progressbar( self, style="Horizontal.TProgressbar", variable=self.progressNumber, maximum=NumberOfServices) self.progressBarProcessing.pack(fill=X, padx=10, pady=10) self.OrganizerButtons = PanedWindow(self) self.OrganizerButtons["height"] = 80 self.OrganizerButtons["bg"] = "#616161" self.OrganizerButtons.pack(fill=X, padx=10) self.btStarGroup = Button(self.OrganizerButtons, command=self.StartGroup) self.btStarGroup["bg"] = "#616161" self.btStarGroup["bd"] = 0 self.btStarGroup["command"] = self.StartGroup self.imagebtStarGroup = PhotoImage( file=self.resource_path("btStartGroupIcon.png")) self.btStarGroup.config(image=self.imagebtStarGroup) self.btStarGroup.pack(fill=X, side=LEFT, padx=10) self.btStopGroup = Button(self.OrganizerButtons, command=self.StopGroup) self.btStopGroup["bg"] = "#616161" self.btStopGroup["bd"] = 0 self.btStopGroup["command"] = self.StopGroup self.imagebtStopGroup = PhotoImage( file=self.resource_path("btStopGroupIcon.png")) self.btStopGroup.config(image=self.imagebtStopGroup) self.btStopGroup.pack(fill=X, side=LEFT, padx=5) self.linhaDeSeparacao = PanedWindow(self) self.linhaDeSeparacao["height"] = 2 self.linhaDeSeparacao["bg"] = "#9E9E9E" self.linhaDeSeparacao.pack(fill=X, padx=20, pady=5) def StartGroup(self): taskStartServices = Thread(target=self.OptionRunGroup, args=[1]) taskStartServices.start() def StopGroup(self): taskStopServices = Thread(target=self.OptionRunGroup, args=[2]) taskStopServices.start() def OptionRunGroup(self, Tipo=0): self.progressNumber.set(0) for service in self.winfo_children(): if ('service' in service._name): if (Tipo == 1): service.StartService() updProgress = Thread(target=self.updateProgress, args=[]) updProgress.start() sleep(self.DelayTime) if (Tipo == 2): service.StopService() updProgress = Thread(target=self.updateProgress, args=[]) updProgress.start() sleep(self.DelayTime) self.progressNumber.set(0) def updateProgress(self): self.progressNumber.set(self.progressNumber.get() + 1)
class Facade(Frame): """This is a Frame that contains group info, group order, apex and prime graph. """ def __init__(self, parent, group, show_graph=True, graph_class=None, **kw): """ Parameters: show_graph: whether to create and show graph instantly or provide a button to do that lately graph_factory: callable accepting one argument - the Group instance and returning Graph instance. Note that __str__ method of the callable is used in the UI. """ Frame.__init__(self, parent, **kw) self._group = group # self._show_apex = True self._show_graph = show_graph self._graph_class = graph_class # self._init_variables() # TODO: fix vertex label automatic positioning self._init_menu() self._init_components() @property def group(self): return self._group @property def apex_list_container(self): return self._apex_container @property def graph_canvas(self): return self._graph_canvas def _show_graph_canvas(self): self._show_graph_button.forget() # TODO: add different layouts and other options graph_class = self._graph_class self.graph = graph_class(self._group) self._graph_canvas = GraphCanvas(self._right_pane, SpringLayout(self.graph), caption=str(graph_class)) self._graph_canvas.pack(expand=True, fill='both') self._graph_canvas.vertex_label_mode = self.getvar( name=self.winfo_name() + ".vertexlabelposition") self._iterations_plugin = IterationsPlugin() self._iterations_plugin.apply(self._graph_canvas) self.update_layout() def _init_components(self): self._panes = PanedWindow(self, orient='horizontal', sashrelief='raised') self._panes.pack(expand=True, fill='both') self._left_pane = Frame(self._panes, padx=2, pady=2) self._right_pane = Frame(self._panes) self._panes.add(self._left_pane, width=250) self._panes.add(self._right_pane) # group name group_name_pane = LabelFrame(self._left_pane, text="Group", padx=10, pady=5) group_name_pane.pack(fill='x') self._group_name = GroupNameLabel(group_name_pane, self._group) self._group_name.pack(expand=True, fill='both') # group order group_order_pane = LabelFrame(self._left_pane, text="Order", padx=10, pady=5) group_order_pane.pack(fill='x') self._group_order = IntegerContainer(group_order_pane, integer=self._group.order()) self._group_order.pack(expand=True, fill='both') # apex self._apex_pane = LabelFrame(self._left_pane, text="Apex", padx=10, pady=5) self._apex_pane.pack(expand=True, fill='both') self._apex_container = ApexListContainer(self._apex_pane, apex=self._group.apex()) self._apex_container.pack(expand=True, fill='both') # graph controls cocliques_frame = LabelFrame(self._left_pane, text="Cocliques", padx=10, pady=5) cocliques_frame.pack(fill='x') self._cocliques_button = Button(cocliques_frame, text="Calculate", command=self._show_cocliques) self._cocliques_button.pack(anchor='nw') self._cocliques_container = ListContainer(cocliques_frame) self._cocliques_list = Listbox(self._cocliques_container) self._cocliques_container.set_listbox(self._cocliques_list) # Button(graph_controls, text='Group equivalent vertices').pack(anchor='nw') # this is a button that show up instead of graph canvas if we uncheck 'Show graph' checkbox. self._show_graph_button = Button(self._right_pane, text='Show graph', command=self._show_graph_canvas) self._graph_canvas = None if self._show_graph: self._show_graph_canvas() else: self._show_graph_button.pack() def _init_variables(self): def set_default_var(name): """Sets widget-specific var with same value as root. """ default_var = self.getvar(name) local_var_name = self.winfo_name() + "." + name self.setvar(local_var_name, default_var) return local_var_name local_name = set_default_var("vertexlabelposition") tools.trace_variable(self, local_name, "w", self._change_vertex_label_position) def _change_vertex_label_position(self, name, *arg): # override default value self.setvar("vertexlabelposition", self.getvar(name)) if self._graph_canvas is not None: self._graph_canvas.vertex_label_mode = self.getvar(name) def _init_menu(self): """Init menu bar content. """ toplevel = self.winfo_toplevel() if toplevel['menu']: self._menu = self.nametowidget(name=toplevel['menu']) else: self._menu = Menu(toplevel) toplevel['menu'] = self._menu graph_options = Menu(self._menu, tearoff=0) self._menu.add_cascade(label="Graph", menu=graph_options) self._menu_index = self._menu.index("end") vertex_label_position_menu = Menu(graph_options, tearoff=0) graph_options.add_cascade(label="Label position", menu=vertex_label_position_menu) menu_var = self.winfo_name() + ".vertexlabelposition" vertex_label_position_menu.add_radiobutton(variable=menu_var, label="Auto", value="auto") vertex_label_position_menu.add_radiobutton(variable=menu_var, label="Center", value="center") graph_options.add_command(label="Save graph...", command=self.call_graph_save_dialog) self.bind("<Destroy>", self.__destroy_menu) #noinspection PyUnusedLocal def __destroy_menu(self, event): try: self._menu.delete(self._menu_index) except TclError: pass def _show_cocliques(self): cocliques = self.graph.max_cocliques() def select_coclique(*_): index = next(iter(self._cocliques_list.curselection()), None) if index is not None: selected = cocliques[int(index)] pick_state = self._graph_canvas.picked_vertex_state pick_state.clear() for value in selected: pick_state.pick(self._graph_canvas.get_vertex(value)) self._cocliques_list.insert(0, *[', '.join(map(str, coclique)) for coclique in cocliques]) self._cocliques_list.bind("<Double-Button-1>", select_coclique) self._cocliques_button.forget() self._cocliques_container.pack(expand=True, fill='both') def call_graph_save_dialog(self): file_name = filedialog.asksaveasfilename(defaultextension='.ps', filetypes=[('PostScript', '.ps')], parent=self.winfo_toplevel(), title="Save graph as image") if file_name: with codecs.open(file_name, 'w', encoding='utf-8') as f: f.write(self._graph_canvas.postscript()) def update_layout(self): try: self._iterations_plugin.iterate(50) except AttributeError: pass
def PanedWindow(root): pw = TKPanedWindow(root) pw.pack(expand=1) return pw
class Card : def __init__(self,name="Nom monstre",att=1,pv=1,bonus=None,photo='',monster_type="unknown") : self.name=name self.att = att self.pv = pv if not bonus : bonus=[] # a cause du fonctionnement etrange de python pour les valeurs d arguments [] par defaut self.bonus=bonus self.is_spell=(pv<1) self.photofile=photo self.dumping_file = os.path.join("CardFiles",monster_type+"_monsters.sav") self.monster_type = monster_type #global all_monsters name=self.name.replace(" ","_") self.content=self # try : # self.image = image.load(os.path.join("Card",name+".png")) # except : # self.image=None def equivalentto(self,other) : return self==other def show(self) : pass def constructor(self) : return ('Card("'+self.name+'",'+str(self.att)+","+str(self.pv)+ ",["+",".join([p.constructor() for p in self.bonus])+"],"+ repr(self.photofile)+",'"+self.monster_type+"')") def takePlace(self,*ar1,**ars) : pass def addBonus(self,bonus) : self.bonus.append(bonus) def getCost(self) : if self.pv > 0 : cost=self.att/2.+self.pv/2.+sum([p.getCost(self) for p in self.bonus]) else : #print self.bonus #if self.bonus : #print self.bonus[0].getCost #print self.bonus[0].getCost() #if len(self.bonus)>1 : print "** anomalie **" S = 0 for p in self.bonus: if p.is_cost_alterator: S += p.getCost(self) else: S += p.getCost() cost=S# +0.5*(len(self.bonus)-1): why? if cost < 0: cost = 0 if hasattr(self,"cost") and self.cost!=None : # pour les monstres du save, l attribut cost est None print ("cout=",cost," so ",int(floor(cost))) self.cost.set(int(floor(cost))) self.getStars() return cost def getStars(self): stars = sum([p.getStars() for p in self.bonus]) if stars>2 : stars=(stars-1)*2 if stars<0 : stars=0 if hasattr(self,"stars") and self.stars != None : # pour les monstres du save, l attribut stars existe = None self.stars.set('* '*stars) #print "stars=",stars return stars def getDescription(self): for b in reversed(self.bonus) : try : b.getDescription() except Exception : self.bonus.remove(b) return self.name +" ("+str(self.att)+" "+str(self.pv)+'\n'*bool(self.bonus)+'\n'.join( [b.getDescription() for b in self.bonus]) +" )" def getInlineDescription(self): for b in reversed(self.bonus) : try : b.getInlineDescription() except Exception : self.bonus.remove(b) return self.name +" ("+str(self.att)+" "+str(self.pv)+' '.join( [b.getInlineDescription() for b in self.bonus]) +" )" def postAndSave(self,*args): if self.name=="nom monstre" or self.name=="change name" or self.name in Card.blocked_creature : self.name="change name" self.refreshWidget() return if not self.verifyBonus() : return self.deleteCreature(self.name) temp=self.category.get() pygame.init() fenetre=self.card_win.master self.card_win.pack_forget() self.save(None) done=False while not done : for event in pygame.event.get() : if event.type == pygame.QUIT : done=True pygame.display.quit() self = Card("nom monstre",1,1) #card.pack_forget() self.initWidget(fenetre) self.category.set(temp) self.setFile("dummy_arg") def verifyBonus(self) : nb=[b.__class__.__name__ for b in self.bonus] if len(set(nb))!=len(nb) : showinfo("Not Allowed","You can't have twice the same bonus") return False for b1,b2 in [("Insaisissable","Provocation"),("Insaisissable","Inciblable"),("Errant","Incarnation"), ("Camouflage","Provocation"),("Camouflage","ChaqueTour"),("NePeutPasAttaquer","ALaPlaceDeLAttaque"), ("NePeutPasAttaquer","NePeutPasAttaquerLesHeros"),("NePeutPasAttaquerLesHeros","ALaPlaceDeLAttaque"), ("GardienDeVie","QuandIlEstBlesse"),("Charge","NePeutPasRisposter"),("Furie","ALaPlaceDeLAttaque"), ("NePeutPasRiposter","NePeutPasAttaquer"),("NePeutPasRiposter","CoutReduit"),("CriDeGuerre","Incarnation"), ("Charge","CriDeGuerrre"),("Insaisissable","InsensibleALaMagie"),("Charge","Errant"),("CriDeGuerre","Errant"), ("Errant","RaleDAgonie"),("AttaqueADistance","AvecAttaque"),("Errant","AuDebutDuProchainTour"), ("BonusParEnnemi","Determine"),("QuandIlEstBlesse","Incassable"),("Souffrant","QuandIlEstBlesse") ] : if b1 in nb and b2 in nb : showinfo("Not Allowed","You can't have this combination of powers: {0} and {1}".format(b1,b2)) return False total=self.constructor() if "QuandUnAllieEstTue" in nb and (("Spell.Invocation" in total) or ("CopieMain" in total) or ("PlaceCarteDansMain" in total)): showinfo("Not Allowed","You can't have anything to do with Invocation or card creation if you have QuandUnAllieEstTue") return False return True def save(self,*args): if (self.name in Card.blocked_creature) : return for b in self.bonus : # on veut que la plainte maudite soit en dernier if b.__class__.__name__=="PlainteMaudite" : self.bonus.remove(b) self.bonus.append(b) break image = self.createImage() print ("apres createImage") name=self.name.replace(" ","_") pygame.image.save(image,"Cards/"+name+".png") print ("save image done") # now new monster loaded_monsters=readMonsters(self.dumping_file) #print "Monsters from file = ",file_monsters #remove_widget(self) loaded_monsters[self.name] = self #print "Monsters from file (after) = ",file_monsters global all_monsters all_monsters.update(loaded_monsters) #print "window reinit done" with open(self.dumping_file,"wb") as savefile : savefile.write(bytes("\n".join([m.constructor() for k,m in sorted(loaded_monsters.items())]),'UTF-8')) # with open(self.dumping_file+".old","rb") as filepickle : # print "now in file", self.dumping_file,":",pickle.load(filepickle).keys() # filepickle.close() with open(os.path.join("CardFiles","all_monsters.sav"), "wb" ) as f : f.write(bytes("\n".join([m.constructor() for m in all_monsters.values()]),'UTF-8')) recupfile=os.path.join("CardFiles","recup_monsters.sav") if (not os.path.isfile(recupfile)) or len(all_monsters)>=len(open(recupfile,'r').readlines()): with open(recupfile, "wb" ) as f : f.write(bytes("\n".join([m.constructor() for k,m in sorted(all_monsters.items())]),'UTF-8')) print ("SAVED in all_monsters.sav and recup_monsters.sav") else: print ("WARNING : Recup monster file bigger than all monsters file") def initWidget(self,fenetre) : #print "init" self.card_win = PanedWindow(fenetre, orient=VERTICAL) fenetre.child=self self.refreshWidget() def Open(self,*args) : print ("open monster ", self.opening.get()) #deck_with_card = self.deck_check(self.opening.get()) creature = Card.monster_list[self.opening.get()] if not ( creature.name in Card.blocked_creature) : self.card_win.pack_forget() fenetre=self.card_win.master #for i in Card.monster_list.keys() : # print i, Card.monster_list[i].getInlineDescription() self = Card.monster_list[self.opening.get()] print (self.name +" loaded") if self.pv<1 : self.is_spell=True else : self.is_spell=False #self.card_win.pack_forget() for b in self.bonus: b.parent = self.bonus b.card = self self.initWidget(fenetre) else: showinfo("Sorry","You can't open this monsters because he comes from the campaign.") def clicDelete(self,*args) : #self.card_win.pack_forget() #fenetre=self.card_win.master """ for i in all_monsters.keys() : print i, all_monsters[i].getInlineDescription() """ creature= self.delete.get() if creature in Card.blocked_creature : print ("not possible : creature in campaign") self.delete.set('delete') return if askyesno('Beware!', 'Confirm the deletion of '+creature+"?"): self.deleteCreature(creature) self.card_win.pack_forget() #self.initWidget(fenetre) self.setFile(*args) def deleteCreature(self,creature) : dm=None global all_monsters if not creature in all_monsters : print (creature," is not in all_monsters") try : fm=os.path.join("CardFiles",self.category.get()+"_monsters.sav") dm = readMonsters(fm) except: print ("error reading file ",fm) else : print ("delete monster ", creature) try : fm = os.path.join("CardFiles",(all_monsters[creature].monster_type)+"_monsters.sav") dm = readMonsters(fm) except: print ("ERROR : no type for ",creature, " or read error") del all_monsters[creature] fall=os.path.join("CardFiles","all_monsters.sav") with open(fall,"wb") as savefile : savefile.write(bytes("\n".join([m.constructor() for m in all_monsters.values()]), 'UTF-8')) print ("deletion of monster ", creature, "done") shutil.copyfile(fall,"CardFiles/recup_monsters.sav") if dm and creature in dm : del dm[creature] with open(fm,"wb") as savefile : print('dmv',dm.values()) savefile.write(bytes("\n".join([m.constructor() for m in dm.values()]), 'UTF-8')) print ("deletion of monster ", creature, " in ",fm," done" ) else : print (creature," not found in dedicated file") def choosePhoto(self,*args) : from tkinter.filedialog import askopenfilename #Tk().withdraw() # we don't want a full GUI, so keep the root window from appearing filename = askopenfilename(defaultextension=".gif",filetypes=[ ("image",("*.jpg", "*.gif","*.png")),('PNG file','*.png'),('Jpg file','*.jpg'),('GIF file','*.gif')]) # show an "Open" dialog box and return the path to the selected file if filename: import os.path chem=os.path.dirname(os.path.realpath(__file__)).replace('\\','/')+'/' #print chem if chem in filename : filename=filename.replace(chem,'') print ("filename modif",filename) try : pilImage = Image.open(filename) PhotoImage(pilImage,master=None) #ImageTk.PhotoImage(monimage) self.photofile=filename print ("photo choosen !") except Exception : print ("echec ouverture image") raise self.refreshWidget() def setFile(self,*args): self.dumping_file = os.path.join("CardFiles",self.category.get()+"_monsters.sav") print ("Change dumping file to ",self.dumping_file) self.monster_type = self.category.get() Card.monster_list=readMonsters(self.dumping_file) #from cardPowers import * self.refreshWidget() def refreshWidget(self) : #print "refresh" self.card_win.pack_forget() import unicodedata #Card window self.card_win = PanedWindow(self.card_win.master, orient=VERTICAL) self.card_win.pack(side=TOP, expand=True, fill=BOTH, pady=2, padx=2) #Create the name zone name_zone=PanedWindow(self.card_win, orient=HORIZONTAL) name = StringVar() name.set(self.name) def modifName(*args) : try : assert('"' not in name.get()) name.get().encode('ascii') except Exception as e: print ("error on name") name.set(self.name) return old = self.name in Card.blocked_creature self.name=name.get() if old or self.name in Card.blocked_creature : self.refreshWidget() name.trace("w", modifName) name_wid=Entry(name_zone, width=30,textvariable=name) name_wid.pack() name_zone.add(name_wid) #Create the cost ad star stringvar #print int(floor(self.getCost())) self.cost=StringVar() self.stars=StringVar() cost_wid=Label(None, textvariable=self.cost, background='red',width=5, anchor=W) star_wid=Label(None, textvariable=self.stars, background='blue', anchor=E) self.cost.set(str(int(floor(self.getCost())))) self.stars.set("*"*self.getStars()) #Add them in name zone name_zone.add(cost_wid) name_zone.add(star_wid) #Create an Image Zone image_zone=Button(self.card_win, command=self.choosePhoto) if hasattr(self,"photofile") and self.photofile : print ("Image: ",self.photofile) try : pilImage=Image.open(self.photofile) img=PhotoImage(pilImage,master=image_zone) except : decomp=self.photofile.split('/') for i in range(1,6) : try : fname="/".join(decomp[-i:]) print ("try to open",fname) pilImage = Image.open(fname) img=PhotoImage(pilImage,master=image_zone) self.photofile=fname break except : self.photofile=None if self.photofile : w, h = img.width(), img.height() print('wh',w,h) if h>400 : print("reduction") img=PhotoImage(pilImage.resize((w//2,h//2), Image.ANTIALIAS),master=image_zone) image_zone=Button(self.card_win,image=img, command=self.choosePhoto) image_zone.image=img #image_zone.configure(image=image_zone.image,width=50,height=50,compound=RIGHT) #image_zone.pack() #print "IMAGE CHANGED" else : from os import path fname=self.name.replace(" ","_") if path.isfile("Cards/"+fname+".png") : image_zone.config(text='image can be taken from\n'+"Cards/"+fname+".png",background='white',anchor=CENTER) else : image_zone.config(text='clic to choose image',background='white',anchor=CENTER) #image_zone.pack() # POWER ZONE power_zone=PanedWindow(self.card_win, orient=VERTICAL) #fenetre=self.card_win.master def removePowerCreator(px) : def removePower(*args) : #print 'avant',list_pow self.bonus.remove(px) #print 'apres',list_pow #self.card_win.pack_forget() self.refreshWidget() return removePower for p in self.bonus : powline = PanedWindow(self.card_win, orient=HORIZONTAL) pow_wid=p.initWidget(powline) powline.add(pow_wid) removepow=Button(powline, text="X", command=removePowerCreator(p), anchor=E) removepow.pack() powline.add(removepow) power_zone.add(powline) def addPower(*args) : if addBonus.get()!= "add bonus": name=addBonus.get() else: name=add_cost_alteration.get() print ("added :",name) import CardPowers self.bonus+=[eval('CardPowers.'+name+'()')] self.bonus[-1].parent=self.bonus self.bonus[-1].card=self #self.card_win.pack_forget() self.refreshWidget() #Add bonus Option menu addBonus = StringVar(power_zone) addBonus.set("add bonus") # default value if not self.pv: addBonus_wid = Spell.getSpellMenu(power_zone, addBonus) else: addBonus_wid = getBonusMenu(power_zone, addBonus) addBonus.trace('w', addPower) if self.pv>0 or len(self.bonus)==0 or all([b.is_cost_alterator for b in self.bonus]): addBonus_wid.pack() #Add this to power zone power_zone.add(addBonus_wid) #Create save zone save_zone = PanedWindow(self.card_win, orient=HORIZONTAL) if self.monster_type != "all" and not(self.name in Card.blocked_creature) : save_wid = Button(save_zone, text="Save", command=self.postAndSave) elif self.monster_type != "all" : save_wid = Button(save_zone, text="creature in campaign", command=None) else: save_wid = Button(save_zone, text="nead type", command=None) save_wid.pack() #Create the open button save_zone.pack() if Card.monster_list.keys(): self.opening = StringVar(save_zone) self.opening.set("Open") choice = [na for na in Card.monster_list.keys() if na not in Card.blocked_creature] choice.sort() #print all_monsters.keys() open_wid = OptionMenu(save_zone, self.opening,*choice) self.opening.trace('w', self.Open) open_wid.pack() save_zone.add(open_wid) if Card.monster_list.keys(): self.delete = StringVar(save_zone) self.delete.set("Delete") choice = [na for na in Card.monster_list.keys() if na not in Card.blocked_creature] choice.sort() delete_wid = OptionMenu(save_zone, self.delete,*choice) self.delete.trace('w', self.clicDelete) delete_wid.pack() save_zone.add(delete_wid) #Create the type button self.category = StringVar(save_zone) self.category.set(self.monster_type) choice = [file2name(t,"_monsters.sav") for t in glob.glob("CardFiles/*_monsters.sav")] if "recup" in choice: choice.remove("recup") #print all_monsters.keys() category_wid = OptionMenu(save_zone, self.category,*choice) self.category.trace('w', self.setFile) category_wid.pack() #Add it to save zone save_zone.add(save_wid) save_zone.add(category_wid) #Create a new Strength zone for att and pv strength_zone=PanedWindow(self.card_win, orient=HORIZONTAL) att=StringVar() att.set(str(self.att)) pv=StringVar() ; pv.set(str(self.pv)) def modifiedAttPv(*args) : print ("modifiedAttPv") self.pv=int(pv.get()) if self.pv<1 and self.is_spell==False : if len(self.bonus)==0 : self.is_spell=True self.refreshWidget() else : self.pv=1 self.refreshWidget() if self.pv>0 and self.is_spell==True : if len(self.bonus)==0 : self.is_spell=False self.refreshWidget() else : self.pv=0 self.refreshWidget() self.att=int(att.get()) self.getCost() att_wid = Spinbox(strength_zone, from_=0, to=1000,textvariable=att,command=modifiedAttPv) att_wid.pack() strength_zone.add(att_wid) strength_zone.add(Label(strength_zone, text=' ', background='white', anchor=CENTER)) pv_wid = Spinbox(strength_zone, from_=0, to=1000,textvariable=pv,command=modifiedAttPv) pv_wid.pack() strength_zone.add(pv_wid) #Put it all in window self.card_win.add(name_zone) self.card_win.add(image_zone) self.card_win.add(power_zone) self.card_win.add(strength_zone) self.card_win.add(save_zone) self.card_win.pack() def createImage(self,black=False): width=189*2; height=277*2 screen = pygame.display.set_mode((width,height)) print ("Type = ",self.monster_type) if self.monster_type in all_backgrounds.keys(): try: bg = pygame.image.load(all_backgrounds[self.monster_type]) except: print ("error (? when load of bg") else: bg = pygame.image.load('gameAnimationImages/Card_face_avant.gif') #fond = PhotoImage(file =bg,master=fenetre) pilImage = Image.open( #ligne1 = canvas.create_line(75, 0, 75, 120) #ligne2 = canvas.create_line(0, 60, 150, 60) if self.photofile and not black: try : img=pygame.image.load(self.photofile) except : decomp=self.photofile.split('/') for i in range(1,6) : try : fname="/".join(decomp[-i:]) print ("try to open",fname) img=pygame.image.load(fname) self.photofile=fname break except: pass img = pygame.image.load(self.photofile) w, h = img.get_size() factor=max(150.*2./w,90.*2./h) img=pygame.transform.scale(img,(int(w*factor),int(h*factor))) #fenetre.photo=PhotoImage(file=self.photofile,master=canvas) #img=ImageTk.PhotoImage(img,master=fenetre) screen.blit(img,(width/2.-w*factor/2.,140.-h*factor/4.)) else : try : name=self.name.replace(" ","_") img=pygame.image.load("Cards/"+name+".png") print ("* Found for image ","Cards/"+name+".png") screen.blit(img,(0,0)) except : pass screen.blit(bg,(0,0)) pygame.font.init() #print pygame.font.get_fonts() if self.monster_type in white_font_types: color = (255,255,255) else: color = (0,0,0) centerText(screen,(width/2.+10.,33.*2.),self.name,36-(len(self.name)>11)*(len(self.name)-11)//3,color) #txt = canvas.create_text(101, 32, text=self.name, font=("Calibri",12-(len(self.name)>11)*(len(self.name)-11)/5,"bold"), anchor=CENTER) if not(self.is_spell): centerText(screen,(24*2.,258*2.),str(self.att),40,color) centerText(screen,(169*2.,255*2.),str(self.pv),40,color) else : centerText(screen,(width/2.,265*2.),"SPELL",30,color) #elif self.is_spell: # txt = canvas.create_text(100,265, text="SPELL", anchor=CENTER, font=("Calibri",14,'bold')) #txt = canvas.create_text(22,35, text=int(floor(self.getCost())), anchor=CENTER, font=("Calibri",18,'bold')) centerText(screen,(22*2.,35*2.),str(int(floor(self.getCost()))),50,color) #txt1 = canvas.create_text(92,257, text='*'*self.getStars(), anchor=CENTER, font=("Calibri",26,'bold')) centerText(screen,(92*2.,257*2.),'*'*self.getStars(),60,color) if not(self.monster_type == "unknown"): if self.monster_type in all_type_colors: Color = all_type_colors[self.monster_type] else: Color = "human" else: Color = "human" centerText(screen,(95*2.,142*2.),self.monster_type.capitalize(),26,Color) if len(self.bonus)>0 : powers = "e%96".join([b.getDescription() for b in self.bonus if b.getDescription()]) powers = [p.split("\n") for p in powers.split("e%96")] print ("powers are ",powers) else : powers ="" #print "POWERS = ", powers if powers: space=min([80., 160./sum([len(p)*3+2 for p in powers])]) print ("Space: ",space) line = 0 for i,b in enumerate(powers): if b!=[''] : print ("power",b) size = min([36.,500./max([len(p) for p in b]) * 2.]) for x,part in enumerate(b): centerText(screen,(90*2.,167*2.+line*space),part,int(size),color) line += 3 line += 2 #canvas.pack() #print "toto!" pygame.display.flip() return screen def init_as_invocation(self,master,spells=False): # monster widget in invocation widget #print "monster init_as_invocation" self.content=StringVar() self.content.set(self.name) self.content.trace("w", self.is_changed_as_invocation) l = [ m for m in Card.monster_list.keys() if (spells or all_monsters[m].pv>0) and not(m in Card.blocked_creature) and (spells or not "PlainteMaudite" in all_monsters[m].constructor()) and not any([b.__class__.__name__=="Charge" for b in all_monsters[m].bonus]) and not any([b.__class__.__name__=="Errant" for b in all_monsters[m].bonus]) and not any([b.__class__.__name__=="Essentiel" for b in all_monsters[m].bonus]) and not any([b.__class__.__name__=="Incarnation" for b in all_monsters[m].bonus]) #and not any([b.__class__.__name__=="AuDebutDuProchainTour" for b in all_monsters[m].bonus]) ] self.widget=OptionMenu(master,self.content,*l) return self.widget def init_as_card(self,master): # monster widget in invocation widget #print "monster init_as_invocation" self.content=StringVar() self.content.set(self.name) self.content.trace("w", self.is_changed_as_invocation) l = [ m for m in Card.monster_list.keys() if not(m in Card.blocked_creature) ] self.widget=OptionMenu(master,self.content,*l) return self.widget def is_changed_as_invocation(self,*args): print ("monster is_changed_as_invocation") if self.content.get()!= "Troll gris": new= Card.monster_list[self.content.get()] else: new = Card("Troll gris",4,4) #print self.content.get() if self.parent : #parent.spell=new #print "self.parent = True" self.parent.monster=new new.parent = self.parent new.card=self.card else : raise "ce cas existe ?! me dire comment" self.bonus[self.bonus.index(self)]=new #self.card_win.pack_forget() self.card.refreshWidget()
def __init__(self, config: Config = None): """Constructs the GUI element of the Validation Tool""" self.task = None self.config = config or Config() self._root = Tk() self._root.title(self.config.app_name) self._root.protocol("WM_DELETE_WINDOW", self.shutdown) if self.config.terms_link_text: menubar = Menu(self._root) menubar.add_command( label=self.config.terms_link_text, command=lambda: webbrowser.open(self.config.terms_link_url), ) self._root.config(menu=menubar) parent_frame = Frame(self._root) main_window = PanedWindow(parent_frame) main_window.pack(fill=BOTH, expand=1) control_panel = PanedWindow( main_window, orient=HORIZONTAL, sashpad=4, sashrelief=RAISED ) actions = Frame(control_panel) control_panel.add(actions) control_panel.paneconfigure(actions, minsize=250) if self.config.disclaimer_text or self.config.requirement_link_text: self.footer = self.create_footer(parent_frame) parent_frame.pack(fill=BOTH, expand=True) # profile start number_of_categories = len(self.config.category_names) category_frame = LabelFrame(actions, text="Additional Validation Categories:") category_frame.grid(row=1, column=1, columnspan=3, pady=5, sticky="we") self.categories = [] for x in range(0, number_of_categories): category_name = self.config.category_names[x] category_value = IntVar(value=0) category_value._name = "category_{}".format(category_name.replace(" ", "_")) # noinspection PyProtectedMember category_value.set(self.config.get_category_value(category_value._name)) self.categories.append(category_value) category_checkbox = Checkbutton( category_frame, text=category_name, variable=self.categories[x] ) ToolTip(category_checkbox, self.config.get_description(category_name)) category_checkbox.grid(row=x + 1, column=1, columnspan=2, sticky="w") settings_frame = LabelFrame(actions, text="Settings") settings_frame.grid(row=3, column=1, columnspan=3, pady=10, sticky="we") verbosity_label = Label(settings_frame, text="Verbosity:") verbosity_label.grid(row=1, column=1, sticky=W) self.verbosity = StringVar(self._root, name="verbosity") self.verbosity.set(self.config.default_verbosity(self.VERBOSITY_LEVELS)) verbosity_menu = OptionMenu( settings_frame, self.verbosity, *tuple(self.VERBOSITY_LEVELS.keys()) ) verbosity_menu.config(width=25) verbosity_menu.grid(row=1, column=2, columnspan=3, sticky=E, pady=5) report_format_label = Label(settings_frame, text="Report Format:") report_format_label.grid(row=2, column=1, sticky=W) self.report_format = StringVar(self._root, name="report_format") self.report_format.set(self.config.default_report_format) report_format_menu = OptionMenu( settings_frame, self.report_format, *self.config.report_formats ) report_format_menu.config(width=25) report_format_menu.grid(row=2, column=2, columnspan=3, sticky=E, pady=5) input_format_label = Label(settings_frame, text="Input Format:") input_format_label.grid(row=3, column=1, sticky=W) self.input_format = StringVar(self._root, name="input_format") self.input_format.set(self.config.default_input_format) input_format_menu = OptionMenu( settings_frame, self.input_format, *self.config.input_formats ) input_format_menu.config(width=25) input_format_menu.grid(row=3, column=2, columnspan=3, sticky=E, pady=5) self.halt_on_failure = BooleanVar(self._root, name="halt_on_failure") self.halt_on_failure.set(self.config.default_halt_on_failure) halt_on_failure_label = Label(settings_frame, text="Halt on Basic Failures:") halt_on_failure_label.grid(row=4, column=1, sticky=E, pady=5) halt_checkbox = Checkbutton( settings_frame, offvalue=False, onvalue=True, variable=self.halt_on_failure ) halt_checkbox.grid(row=4, column=2, columnspan=2, sticky=W, pady=5) directory_label = Label(actions, text="Template Location:") directory_label.grid(row=4, column=1, pady=5, sticky=W) self.template_source = StringVar(self._root, name="template_source") directory_entry = Entry(actions, width=40, textvariable=self.template_source) directory_entry.grid(row=4, column=2, pady=5, sticky=W) directory_browse = Button(actions, text="...", command=self.ask_template_source) directory_browse.grid(row=4, column=3, pady=5, sticky=W) validate_button = Button( actions, text="Validate Templates", command=self.validate ) validate_button.grid(row=5, column=1, columnspan=2, pady=5) self.result_panel = Frame(actions) # We'll add these labels now, and then make them visible when the run completes self.completion_label = Label(self.result_panel, text="Validation Complete!") self.result_label = Label( self.result_panel, text="View Report", fg="blue", cursor="hand2" ) self.underline(self.result_label) self.result_label.bind("<Button-1>", self.open_report) self.result_panel.grid(row=6, column=1, columnspan=2) control_panel.pack(fill=BOTH, expand=1) main_window.add(control_panel) self.log_panel = ScrolledText(main_window, wrap=WORD, width=120, height=20) self.log_panel.configure(font=font.Font(family="Courier New", size="11")) self.log_panel.pack(fill=BOTH, expand=1) main_window.add(self.log_panel) # Briefly add the completion and result labels so the window size includes # room for them self.completion_label.pack() self.result_label.pack() # Show report link self._root.after_idle( lambda: ( self.completion_label.pack_forget(), self.result_label.pack_forget(), ) ) self.config.watch( *self.categories, self.verbosity, self.input_format, self.report_format, self.halt_on_failure, ) self.schedule(self.execute_pollers) if self.config.terms_link_text and not self.config.are_terms_accepted: TermsAndConditionsDialog(parent_frame, self.config) if not self.config.are_terms_accepted: self.shutdown()
class UserInterface(UIfunctions): def __init__(self, filehandler, databasehandler, path=None): self.title = "OpenKeynote (BETA)" self._filehandler = filehandler self._databasehandler = databasehandler self.path = path self.itemlist = [] self.root = Tk() self.previeweditem = "" self.editeditem = "" self.case_selected = IntVar() self.parentname = "" self.autosave = IntVar() self._html_path = None self._default_title = self.title self.main_window() self.tree_view() self.frame_vertical_bar() self.bindings_and_menu() self.frame_setup() self.update_status() self.root.mainloop() def main_window(self, *args): self.mainframe = Frame(self.root) self.mainframe.grid(column=0, row=0, sticky=E+W+N+S) self.bottomframe = Frame(self.root) self.bottomframe.grid(column=0, row=1, sticky=E+W) self.statusbar = Label( self.bottomframe, text=self._filehandler.statustext, anchor=W) self.statusbar.pack(fill=BOTH, padx=0, pady=0) self.root.columnconfigure(0, weight=1) self.root.rowconfigure(0, weight=1) self.root.rowconfigure(1, pad=10) self.pw = PanedWindow(self.mainframe, orient=HORIZONTAL) self.pw.pack(fill=BOTH, expand=1) self.pane_left = Frame(self.root) self.pw.add(self.pane_left) self.pane_right = Frame(self.root) self.pw.add(self.pane_right) self.frame_left = Frame(self.pane_left) self.frame_left.pack(fill=BOTH, expand=1, padx=3, pady=3) self.frame_center = Frame(self.pane_right) self.frame_center.grid(row=0, column=0, sticky=W+N, rowspan=4) self.frame_right = Frame(self.pane_right) self.frame_right.grid(row=0, column=1, sticky=W+E+N+S, padx=3, pady=3) self.pane_right.columnconfigure(1, weight=1) self.pane_right.rowconfigure(0, weight=1) self.sf1 = Text(self.frame_left, height=1, width=25, borderwidth=1, relief="solid", highlightthickness=0) self.sf1.insert(1.0, "TODO: Searchbar") self.sf1.grid(row=0, column=0, sticky=W+E+N+S, pady=5) self.sf1.config(state=DISABLED) self.cs = Button(self.frame_left, text="X", width=1) self.cs.grid(row=0, column=1) self.frame_left.columnconfigure(0, weight=1) def tree_view(self, *args): """ Tree view """ self.l1 = ttk.Treeview(self.frame_left, columns=["stuff"], show="tree") self.yscroll = Scrollbar(self.frame_left, orient=VERTICAL) self.yscroll.config(width=10) self.l1['yscrollcommand'] = self.yscroll.set self.yscroll['command'] = self.l1.yview self.l1.grid(row=1, column=0, columnspan=3, padx=30, pady=10, sticky=N+S+E+W) self.yscroll.grid(row=1, column=0, columnspan=3, sticky=N+S+E) self.l1.bind("<ButtonRelease-1>", self.change_selection) self.frame_left.rowconfigure(1, weight=1) def frame_vertical_bar(self, *args): self.vbs = [] middlebuttons = ("New Item", "New Subitem", "Delete", "Rename", "Change Parent","- Descriptions (BETA) -") middlefunctions = ( lambda: self.add_item(parent=self.parentname), lambda: self.add_item(parent=self.previeweditem), lambda: self.delete_item_dialog(), self.rename_item_dialog, self.change_parent_dialog, lambda: self.description_window(database_rows=self._databasehandler.view()) #lambda: self.save_keynote_to_database(title="title",keynote="KN10", entreprise="min entreprise", category="") #self.save_all_keynotes_to_database ) for a, button_text in enumerate(middlebuttons): self.vbs.append(ttk.Button(self.frame_center, text=button_text)) self.vbs[a].pack(fill=BOTH) self.vbs[a].config(command=middlefunctions[a], width=10) for x in [2, 3, 4]: self.vbs[x].config(state=DISABLED) self.tx1 = Label(self.frame_right, text="Preview", anchor=W) self.tx1.grid(row=0, column=0, columnspan=3, sticky=W+E) self.tx2 = Label(self.frame_right, text="Editing", anchor=W) self.tx2.grid(row=2, column=0, sticky=W+E) self.e1 = scrolledtext.ScrolledText(self.frame_right, fg="#555", font=("Courier", 13), padx=10, pady=10, highlightthickness=0, borderwidth=1, relief="solid") self.e1.grid(row=1, column=0, columnspan=3, sticky=N+S+E+W) # was Text before self.e2 = scrolledtext.ScrolledText(self.frame_right, font=("Courier", 13), borderwidth=1, relief="solid", padx=10, pady=10, highlightthickness=0) self.e2.grid(row=3, column=0, columnspan=3, sticky=E+W+S+N) # AUTOSAVE self.autosaveFrame = LabelFrame(self.frame_center, text=' Autosave ') self.autosaveFrame.pack(fill=BOTH) self.autosave.trace( 'w', lambda *args: print(f"Autosave: {self.autosave.get()}")) self.autosaveCheck = Checkbutton( self.autosaveFrame, text="Enabled", variable=self.autosave, anchor=W) self.autosaveCheck.select() self.autosaveCheck.pack(fill=BOTH) self.labelsFrame = LabelFrame(self.frame_center, text=' Change Case ') self.labelsFrame.pack(fill=BOTH) # CASE BUTTONS self.case_radiobuttons = [] self.case_selected.set(99) rbtns = ['No change', 'UPPERCASE', 'lowercase', 'First Letter'] for a, button_text in enumerate(rbtns): self.case_radiobuttons.append( Radiobutton(self.labelsFrame, text=button_text, variable=self.case_selected, value=a, command=self.change_case, width=10, anchor=W)) self.case_radiobuttons[a].grid(sticky="W", row=a) def change_case(self, *args): pass def bindings_and_menu(self, *args): """ Main key bindings """ if os.name == "nt": self.CTRL = "Control" self.MBTN = "3" else: self.CTRL = "Command" self.MBTN = "2" def bindings_key(event): if event.state == 8 or event.state == 12: return else: return("break") self.sf1.bind("<Tab>", lambda a: self.focus_on(target=self.l1)) self.sf1.bind("<Shift-Tab>", lambda a: self.focus_on(target=self.vb2)) self.e1.bind("<Key>", bindings_key) self.e1.bind("<Tab>", lambda a: self.focus_on(target=self.e2)) self.e1.bind( "<Shift-Tab>", lambda a: self.focus_on(target=self.vbs[-1])) self.e2.bind("<Tab>", lambda a: self.focus_on(target=self.vb1)) self.e2.bind("<Shift-Tab>", lambda a: self.focus_on(target=self.e1)) self.vb1 = ttk.Button(self.frame_right, text="Edit") self.vb1.grid(row=2, column=1) self.vb1.config(command=self.edit_item) self.vb2 = ttk.Button(self.frame_right, text="Save") self.vb2.grid(row=2, column=2) self.vb2.config(command=self.saveitem) self.frame_right.rowconfigure(1, weight=1) self.frame_right.rowconfigure(3, weight=1) self.frame_right.columnconfigure(0, weight=1) self.menu = Menu(self.root) self.root.config(menu=self.menu) file = Menu(self.menu, tearoff=0) # TODO is it a win thing? file.add_command(label='New File*', command=self.close_file) file.add_command( label='Open File...', accelerator=f"{self.CTRL}-o", command=self.open_file_dialog) file.add_command(label='Save File', accelerator=f"{self.CTRL}-s", command=self.save_file) file.add_command(label='Save File As...', command=self.save_file_dialog) file.add_command(label='Close file', command=self.close_file) file.add_command( label='Exit', accelerator=f"{self.CTRL}-q", command=self.client_exit) self.menu.add_cascade(label='File', menu=file) self.clickmenu = Menu(self.root, tearoff=0) self.clickmenu.add_command(label="Cut") self.clickmenu.add_command(label="Copy") self.clickmenu.add_command(label="Paste") self.root.bind_class( "Text", f"<Button-{self.MBTN}><ButtonRelease-{self.MBTN}>", lambda event=None: self.right_click_menu()) menu_edit = Menu(self.menu, tearoff=0) menu_edit.add_command(label='Select All', accelerator=f"{self.CTRL}-a", command=self.select_all) self.root.bind(f"<{self.CTRL}-a>", self.select_all) self.e1.bind(f"<{self.CTRL}-a>", self.select_all) self.e1.bind(f"<{self.CTRL}-c>", self.e1.event_generate("<<Copy>>")) self.e2.bind(f"<{self.CTRL}-a>", self.select_all) menu_edit.add_command(label='Cut', accelerator=f"{self.CTRL}-x", command=lambda: self.root.event_generate("<<Cut>>")) menu_edit.add_command(label='Copy', accelerator=f"{self.CTRL}-c", command=lambda: self.copy_text()) menu_edit.add_command(label='Paste', accelerator=f"{self.CTRL}-v", command=lambda: self.root.event_generate("<<Paste>>")) self.menu.add_cascade(label='Edit', menu=menu_edit) menu_help = Menu(self.menu, tearoff=0) menu_help.add_command(label='About', command=self.about) self.menu.add_cascade(label='Help', menu=menu_help) for i in "Up,Down,Right,Return,Left".split(","): self.root.bind("<"+i+">", self.change_selection) self.e1.bind("<F2>", self.rename_item_dialog) self.e1.bind(f"<{self.CTRL}-s>", None) self.e1.bind(f"<{self.CTRL}-o>", None) self.root.bind("<F2>", self.rename_item_dialog) self.root.bind(f"<{self.CTRL}-s>", self.save_file) self.root.bind(f"<{self.CTRL}-o>", self.open_file_dialog) def copy_text(self, event=None): w = self.root.focus_get() w.event_generate("<<Copy>>") def update_title(self, title=""): self.root.title(title) def frame_setup(self, *args): """ Misc UI functions """ # sharp fonts in high res (https://stackoverflow.com/questions/41315873/ # attempting-to-resolve-blurred-tkinter-text-scaling-on-windows-10-high-dpi-disp) if os.name == "nt": # TODO # self.root.protocol("WM_DELETE_WINDOW", self.client_exit) from ctypes import windll, pointer, wintypes try: windll.shcore.SetProcessDpiAwareness(1) except Exception: pass # this will fail on Windows Server and maybe early Windows # TODO: Put link to ico file on windows. try: iconpath = Path("icon.ico") self.root.iconbitmap(Path()) except: print("error with icon") else: # mac? self.root.createcommand('exit', self.client_exit) self.root.title(self.title) if self.path: self.open_file(path=self.path) """ TODO: ICON /Windows self.root.iconbitmap("/Users/msn/Dropbox/py/Git/OpenKeynote/images/ico.icns") img = Image( "photo", file="/Users/msn/Dropbox/py/Git/OpenKeynote/images/large.gif") self.root.iconphoto(True, img) # you may also want to try this. self.root.call('wm','iconphoto', self.root._w, img) """ self.width = min(int(self.root.winfo_screenwidth()-500), 1500) self.height = int(self.root.winfo_screenheight()-500) self.root.winfo_width() self.root.winfo_height() self.x = (self.root.winfo_screenwidth() // 2) - (self.width // 2) # self.x = 0 self.y = (self.root.winfo_screenheight() // 2) - (self.height // 2) # self.y = 50 self.root.geometry(f"{self.width}x{self.height}+{self.x}+{self.y}") self.root.update() self.root.after(0, self.fixUI) def right_click_menu(self, event=None): x, y = self.root.winfo_pointerxy() w = self.root.winfo_containing(x, y) # https://stackoverflow.com/a/8476726/11514850 # w = self.root self.clickmenu.entryconfigure("Cut", command=lambda: w.event_generate("<<Cut>>")) self.clickmenu.entryconfigure("Copy", command=lambda: w.event_generate("<<Copy>>")) self.clickmenu.entryconfigure("Paste", command=lambda: w.event_generate("<<Paste>>")) self.clickmenu.tk.call("tk_popup", self.clickmenu, w.winfo_pointerx(), w.winfo_pointery()) def update_status(self, event=None): """ Set statusbar in bottom of the window """ self.statusbar.config(text=self._filehandler.refresh_status()) self.root.after(100, self.update_status) def client_exit(self, *args): answer = messagebox.askyesnocancel('quit?', 'Save file first?') if answer == True: self.save_file() sys.exit() if answer == None: return if answer == False: exit()
def loadEvtHandler(): print("파일로 로드 ...") create_table() win = Tk() win.geometry('%dx%d+%d+%d' %(800, 600, 5, 5)) topFrame = Frame(win) topFrame.pack(side='top') topFrame.config(width=800, height=100, background="#eee") panedwindow=PanedWindow(relief="raised", bd=0) panedwindow.pack(expand=True) leftFrame = Frame(win) leftFrame.pack(side='left') leftFrame.config(width=200, height=400, background="#eee") rightFrame = Frame(win) rightFrame.pack(side='right') rightFrame.config(width=600, height=470, background="green") panedwindow.add(leftFrame) panedwindow.add(rightFrame) bottomFrame = Frame(win) bottomFrame.pack(side='bottom') bottomFrame.config(width=800, height=30, background="blue")
from tkinter import Tk, PanedWindow from tkinter.ttk import Label, Entry, Button win = Tk() lbl = Label(win, text="성명: ") entry = Entry(win) lbl.pack() entry.pack() penedwindow = PanedWindow(relief="raised", bd=0) penedwindow.pack() btn_ok = Button(penedwindow, text="확인") btn_cancel = Button(penedwindow, text="취소") penedwindow.add(btn_ok) penedwindow.add(btn_cancel) if __name__ == '__main__': win.mainloop()
def create_widgets(self): pane = PanedWindow(self.master, orient='vertical') pane.pack(expand=True, fill=tk.BOTH, side='left') self.frame = Frame(pane, bd=2, relief='ridge') pane.add(self.frame) # Main frame Label(self.frame, text='Theoritical d of Base:').grid(row=0, column=0, padx=10, pady=10) self.theoretical_d = Entry(self.frame, width=15) self.theoretical_d.grid(column=1, row=0) Label(self.frame, text='Å').grid(row=0, column=2) # Images of Base frame self.fm_base = Frame(pane, bd=2, relief='ridge', pady=20) pane.add(self.fm_base) Label(self.fm_base, text='○ Images of Base').grid(row=0, column=0) Label(self.fm_base, text='Images').grid(row=1, column=0, pady=100) Label(self.fm_base, text='Base Voltage[V]').grid(row=2, column=0, pady=20) self.fm_base_canvas = Canvas(self.fm_base, width=1000, highlightthickness=0) self.fm_base_canvas.grid(row=1, column=1, rowspan=2, sticky='news', padx=35) self.fm_base_bar = Scrollbar(self.fm_base, orient='horizontal', command=self.fm_base_canvas.xview) self.fm_base_bar.grid(row=3, column=1, sticky='ew', padx=35) self.fm_base_canvas.config(xscrollcommand=self.fm_base_bar.set) self.fm_base_canvas_frame = Frame(self.fm_base_canvas) self.fm_base_canvas.create_window((0, 20), window=self.fm_base_canvas_frame, anchor='nw') self.fm_base_btn = ttk.Button(self.fm_base, text='select images') self.fm_base_btn.config(command=lambda: self.select_file(isBase=True)) self.fm_base_btn.grid(row=0, column=1, sticky='w', padx=30) # Images of Molecules frame self.fm_mole = Frame(pane, bd=2, relief='ridge', pady=20) pane.add(self.fm_mole) Label(self.fm_mole, text='○ Images of Molecules').grid(row=0, column=0) Label(self.fm_mole, text='Images').grid(row=1, column=0, pady=100) Label(self.fm_mole, text='Base Voltage[V]').grid(row=2, column=0, pady=20) self.fm_mole_canvas = Canvas(self.fm_mole, width=1000, highlightthickness=0) self.fm_mole_canvas.grid(row=1, column=1, rowspan=2, sticky='news') self.fm_mole_bar = Scrollbar(self.fm_mole, orient='horizontal', command=self.fm_mole_canvas.xview) self.fm_mole_bar.grid(row=3, column=1, sticky='ew') self.fm_mole_canvas.config(xscrollcommand=self.fm_mole_bar.set) self.fm_mole_canvas_frame = Frame(self.fm_mole_canvas) self.fm_mole_canvas.create_window((0, 20), window=self.fm_mole_canvas_frame, anchor='nw') self.fm_mole_btn = ttk.Button(self.fm_mole, text='select images') self.fm_mole_btn.config(command=lambda: self.select_file(isBase=False)) self.fm_mole_btn.grid(row=0, column=1, sticky='w', padx=30) # Run blob detection self.fm_run = Frame(pane, bd=2, relief='ridge', pady=10) pane.add(self.fm_run) ttk.Button(self.fm_run, text='RUN', command=self.run).pack()
class Program: def __init__(self): self.root = Tk() self.frame = Frame() self.frame.pack(side='top') self.label = Label(self.frame, text=COMP.format(0)) self.label2 = Label(self.frame, text="") self.canvas = Canvas(self.root, width=WIDTH, height=HIEGHT, borderwidth=0, highlightthickness=0, bg="black") self.painel = PanedWindow(orient='vertical') self.list_of_no = [] self.list_of_vert = [] self.graph = [] self.x = [] self.y = [] self.components = 0 def __format_string(self, string): string = string.split(" ") neighbors = [int(no) for no in string[1:]] return (int(string[0]), neighbors) def __distance_no(self, x0, y0, x1, y1): return sqrt(((x0 * x1) + (y0 * y1))) def __create_circles(self, x, y, r): x0 = x - r y0 = y - r x1 = x + r y1 = y + r return self.canvas.create_oval(x0, y0, x1, y1, fill='red') def load_graph(self, path): graph = open(path, "r") text = "" for line in graph: formated_input = self.__format_string(line) no = No(formated_input[0]) no.neighbors = formated_input[1] text += GRAU.format(formated_input[0], len(formated_input[1])) self.graph.append(no) self.label2.configure(text=text) def create_points(self): r = RAIO for no in self.graph: x = randint(0, WIDTH) y = randint(0, HIEGHT) if no.id == 1: self.x.append(x) self.y.append(y) else: for point in range(len(self.x)): flag = True while flag: dist = self.__distance_no(self.x[point], self.y[point], x, y) if dist < r + 10.0: x = randint(0, WIDTH) y = randint(0, HIEGHT) else: flag = False self.x.append(x) self.y.append(y) def create_no(self): for i in range(len(self.x)): self.list_of_no.append( self.__create_circles(self.x[i], self.y[i], RAIO)) self.canvas.create_text(self.x[i], self.y[i], text=str(self.graph[i].id)) def create_line(self): for no in self.graph: x0 = self.x[no.id - 1] y0 = self.y[no.id - 1] for nei in no.neighbors: x1 = self.x[nei - 1] y1 = self.y[nei - 1] vert = self.canvas.create_line(x0, y0, x1, y1, fill='yellow') self.list_of_vert.append(vert) def load(self): filename = filedialog.askopenfilename() print(filename) self.load_graph(filename) def draw_graph(self): self.create_points() print(len(self.x)) self.create_line() self.create_no() def reset_graph(self): for no in self.graph: no.visited = False for item in self.list_of_no: self.canvas.itemconfig(item, fill="red") def change_color(self): for item in self.list_of_no: self.canvas.itemconfig(item, fill="blue") def use_bfs(self): self.components = 0 for no in self.graph: if no.visited is False: self.components += 1 self.canvas.update() self.canvas.after(500) if no.visited is False: no.visited = True self.canvas.itemconfig(self.list_of_no[no.id - 1], fill="blue") stack = no.neighbors for id in stack: if self.graph[id-1].visited is False: self.graph[id-1].visited = True self.canvas.update() self.canvas.after(500) self.canvas.itemconfig(self.list_of_no[id - 1], fill="blue") stack.extend(self.graph[id-1].neighbors) else: continue else: continue self.label.configure(text=COMP.format(self.components)) def create_painel(self): commands = ['load graph', 'draw graph', 'reset graph', 'change color', 'BFS'] callbacks = [self.load, self.draw_graph, self.reset_graph, self.change_color, self.use_bfs] for button in range(len(commands)): self.painel.add(Button(self.painel, text=commands[button], command=callbacks[button])) def main(self): self.canvas.pack(side='right') self.painel.pack(side='left') self.label2.pack(side='top') self.label.pack(side='top') self.create_painel() self.root.mainloop()
class NetGame(Game) : def __init__(self) : Game.__init__(self) import socket import tkinter self.local = self.host=socket.gethostbyname(socket.gethostname()) # Get local machine ip from tkinter import Tk,PanedWindow,StringVar,Entry,Button,VERTICAL,HORIZONTAL,Label fenetre=Tk() fenetre.title('Socket parameters') self.netgame_win = PanedWindow(fenetre, orient=VERTICAL) host_zone=PanedWindow(self.netgame_win, orient=HORIZONTAL) host=StringVar() host.set(self.local) def modifHost(*args) : self.host=host.get() if self.local==self.host : start_button.config(text="Create") else : start_button.config(text="Join") host.trace("w", modifHost) host_wid=Entry(host_zone, width=30,textvariable=host) host_wid.pack() host_label=Label(fenetre, text="Host (you are "+self.local+") :") host_zone.add(host_label) host_zone.add(host_wid) self.netgame_win.add(host_zone) port_zone=PanedWindow(self.netgame_win, orient=HORIZONTAL) port=StringVar() self.port=52333 port.set(str(self.port)) # adress_wid=Label(None, textvariable=self.cost, background='red',width=5, anchor=W) def modifPort(*args) : #print "modify port to",port.get() try : self.port=int(port.get()) except : port.set("") port.trace("w", modifPort) port_wid=Entry(fenetre, width=30,textvariable=port) #port_wid.grid(column=0, row=1) host_wid.focus() port_wid.pack() port_label=Label(fenetre, text="Port :") port_zone.add(port_label) port_zone.add(port_wid) self.netgame_win.add(port_zone) #Create the open button def start() : fenetre.destroy() start_button=Button(self.netgame_win,text="Create",command=start) self.netgame_win.add(start_button) self.netgame_win.pack() #fenetre.focus_set() #start_button.focus() fenetre.mainloop() # Import socket module self.soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # Reserve a port for your service. if self.local==self.host : self.soc.bind((self.host, self.port)) # Bind to the port print( "socket listening") self.soc.listen(5) # Now wait for client connection. self.soc, addr = self.soc.accept() # Establish connection with client. print( 'Got connection from', addr) #self.soc.send('Thank you for connecting') #c.close() # Close the connection self.firstplayer=choice([1,2]) print( "FIRST PLAYER IS",self.firstplayer) self.soc.send(str(3-self.firstplayer).encode('utf-8')) else : self.soc.connect((self.host, self.port)) print( "connect ok") p=self.soc.recv(1024).decode('utf-8') try : self.firstplayer=int(p) except : print( "error concerning first player, got ",p) self.remains="" #self.soc.close() # Close the socket when done def initialize(self) : if self.firstplayer==1 : # player1 doit etre le local print( "first player is local") self.player1.sendDeck() self.player2.receiveDeck() else : print( "first player is hosted") self.player2.receiveDeck() self.player1.sendDeck() Game.initialize(self) if self.player==self.player2 : self.endturn_button.update(self.player) def send(self,str): print("send :"+str) self.soc.send(str.encode('utf-8')) def random(self,n,intrange) : if self.local==self.host : jet=sample(list(range(intrange)),n) print( "send",jet) self.soc.send((" ".join(map(str,jet))+"\n" ).encode('utf-8')) else : print( "waiting ",n," random number in range",intrange) if self.remains : p=self.remains self.remains="" else : p=self.soc.recv(1024).decode('utf-8') print( "recv ",p) p=p.strip() if "\n" in p : self.remains,p = p.split("\n",1) jet=list(map(int,p.strip().split())) print( "got",jet) return jet
class staffTree: def reset(self): for i in self.treeview.get_children(): self.treeview.delete(i) def delItem(self): v = self.treeview.focus() c = self.treeview.item(v) v1 = c['values'] if len(v1) > 0: self.treeClick = self.treeview.item(self.treeview.focus())['values'] self.email = self.treeClick[1] self.mobile = str(self.treeClick[2]) confirm = askyesno("Confirmation Window", "Are You Sure To Delete?") if confirm: cur = con.cursor() query = 'delete from staff where email= '"+ self.email+"'' print(query) cur.execute(query) con.commit() self.insertData() showinfo("", "Item Deleted!") else: showinfo('','select any staff first') def fullDataFetchQuery(self): cur = con.cursor() query = "Select * from staff" cur.execute(query) self.data = cur.fetchall() def insertData(self): self.reset() self.fullDataFetchQuery() for i in range(0, len(self.data)): self.treeview.insert("", i, values=self.data[i]) def __init__(self): '''Treeview FUNCTION''' self.window=Tk() self.window.config(bg="lightcyan", highlightthickness=8, highlightbackground="navy", highlightcolor="navy") self.window.title("STAFF DETAILS TREE") self.frame1=PanedWindow(self.window) self.treeview = Treeview(self.frame1, columns=("Name", "Email","Mobile","Password","Type")) self.treeview.heading("Name", text="NAME") self.treeview.heading("Email", text="EMAIL") self.treeview.heading("Mobile", text="MOBILE") self.treeview.heading("Type", text="TYPE") # for table color self.treeview["show"] = "headings" style = Style() style.configure("Treeview.Heading", font=("Script MT Bold", 16)) style.configure("Treeview", font=("calibri", 13)) # # scroll=Scrollbar(self.frame1,orient="vertical",command=self.treeview.yview) # scroll.pack(side=RIGHT,fill=Y) # self.treeview.configure(yscrollcommand=scroll.set) self.treeview.pack() self.insertData() self.frame2=PanedWindow(self.window) delBtn=Button(self.frame2,text="Delete Item",command=self.delItem) delBtn.grid(row=0,column=0) self.frame1.pack() self.frame2.pack() self.window.mainloop() #obj=staffTree()
def createpage(self): result_bangming = [] result_yingyongming = [] result_yingyongtupian = [] result_xiazaidizhi = [] result_yingyongtupian,result_bangming,result_yingyongming,result_xiazaidizhi=self.get_memory() print(result_xiazaidizhi,result_yingyongtupian,result_yingyongming,result_bangming) # 主界面 top_1 = PanedWindow(orient="vertical") top_1.pack(fill='both', expand=1) # 右边界面 top_2 = PanedWindow(top_1) top_1.add(top_2) # 左边5项 top_3 = PanedWindow(top_2, orient="vertical") top_2.add(top_3) # 右边图片 top_4 = PanedWindow(top_2, orient="vertical") top_2.add(top_4) # 右边文字 top_5 = PanedWindow(top_2, orient="vertical") top_2.add(top_5) # 下方两个按钮 top_6 = PanedWindow(top_1, orient="horizontal") top_1.add(top_6) # 左边5标签 left1 = Label(top_1, text="1", height=5, width=15) top_3.add(left1) left2 = Label(top_1, text="2", height=5, width=15) top_3.add(left2) left3 = Label(top_1, text="3", height=5, width=15) top_3.add(left3) left4 = Label(top_1, text="4", height=5, width=15) top_3.add(left4) left5 = Label(top_1, text="5", height=5, width=15) top_3.add(left5) pic_size = 93 w_box = pic_size h_box = pic_size LP = [0, 0, 0, 0, 0] pil_image = [0, 0, 0, 0, 0] tk_image = [0, 0, 0, 0, 0] pil_image_resized = [0, 0, 0, 0, 0] k = 0 for i in result_yingyongtupian: response = request.urlopen(i) cat_img = response.read() with open('C:\\Users\\jaska\\Desktop\\cat_500_600' + str(k) + '.jpg', 'wb') as f: f.write(cat_img) f.close() pil_image[k] = Image.open(r'C:\Users\jaska\Desktop\cat_500_600' + str(k) + '.jpg') w, h = pil_image[k].size pil_image_resized[k] = self.resize(w, h, w_box, h_box, pil_image[k]) tk_image[k] = ImageTk.PhotoImage(pil_image_resized[k]) print(tk_image) LP[k] = Label(top_4, image=tk_image[k], height=w_box, width=h_box) top_4.add(LP[k]) k += 1 def button_1(): messagebox.showinfo(title="Download", message=result_xiazaidizhi[0]) def button_2(): messagebox.showinfo(title="Download", message=result_xiazaidizhi[1]) def button_3(): messagebox.showinfo(title="Download", message=result_xiazaidizhi[2]) def button_4(): messagebox.showinfo(title="Download", message=result_xiazaidizhi[3]) def button_5(): messagebox.showinfo(title="Download", message=result_xiazaidizhi[4]) def button_6(): top_1.destroy() Third(self.root) def button_7(): messagebox.showinfo(title="往后",message="可惜是最后了哟!") # 右边按钮 button1_1 = Button(top_2, text=result_yingyongming[0], height=5, width=30, command=button_1, highlightcolor="blue", activebackground="blue", justify="right", compound="right") top_5.add(button1_1) button1_2 = Button(top_2, text=result_yingyongming[1], height=5, width=30, command=button_2, highlightcolor="blue", activebackground="blue", justify="right", compound="right") top_5.add(button1_2) button1_3 = Button(top_2, text=result_yingyongming[2], height=5, width=30, command=button_3, highlightcolor="blue", activebackground="blue", justify="right", compound="right") top_5.add(button1_3) button1_4 = Button(top_2, text=result_yingyongming[3], height=5, width=30, command=button_4, highlightcolor="blue", activebackground="blue", justify="right", compound="right") top_5.add(button1_4) button1_5 = Button(top_2, text=result_yingyongming[4], height=5, width=30, command=button_5, highlightcolor="blue", activebackground="blue", justify="right", compound="right") top_5.add(button1_5) # 下方左右换页按钮 button1_6 = Button(top_6, text="←", height=2, width=30, command=button_6, highlightcolor="blue", activebackground="blue", justify="right", compound="right") top_6.add(button1_6) button1_7 = Button(top_6, text="→", height=2, width=30, command=button_7, highlightcolor="blue", activebackground="blue", justify="right", compound="right") top_6.add(button1_7) root.mainloop()