def draw_automata(turing_machine=None): w = len(turing_machine.states) h = len(turing_machine.rules) root = Tk() frame = Frame(root, width=800, height=600) frame.grid(row=0, column=0) canvas = Canvas(frame, bg='#FFFFFF', width=800, height=600, scrollregion=(0, -h * 15, w * 100, h * 15*3)) hbar = Scrollbar(frame, orient=HORIZONTAL) hbar.pack(side=BOTTOM, fill=X) hbar.config(command=canvas.xview) vbar = Scrollbar(frame, orient=VERTICAL) vbar.pack(side=RIGHT, fill=Y) vbar.config(command=canvas.yview) canvas.config(width=800, height=600) canvas.config(xscrollcommand=hbar.set, yscrollcommand=vbar.set) canvas.pack(side=LEFT, expand=True, fill=BOTH) for position, state in enumerate(turing_machine.states): state_position[state] = position loop_occurrences[position] = 0 canvas_id = canvas.create_text(10 + 80 * position, 400, anchor="nw") canvas.itemconfig(canvas_id, text="state-") canvas.insert(canvas_id, 12, "%d" % state) counter = 1 for rule in turing_machine.rules: counter = draw_arrow(state_position[rule.current_state], state_position[rule.next_state], canvas, counter, rule) root.mainloop()
def show_source_tree(head): root = Tk() frame = Frame(root) frame.pack(fill = 'both') tree = tkinter.ttk.Treeview(frame) #insert root subroutine # @type head Node parent_id = tree.insert('', 'end', '', text = head.name) for child in head.children: child.insert_to_tree(tree, parent_id) #add scrollbar v_scrollbar = Scrollbar(frame, orient = VERTICAL, command = tree.yview) h_scrollbar = Scrollbar(frame, orient = HORIZONTAL, command = tree.xview) tree.configure(yscrollcommand = v_scrollbar.set, xscrollcommand = h_scrollbar.set) v_scrollbar.pack(side = 'right', fill = 'y') h_scrollbar.pack(side = 'bottom', fill = 'x') tree.pack(fill = 'both') root.geometry("600x600") root.mainloop()
class PyBooguNote(Frame): """Main class""" def __init__(self, parent): super().__init__(parent) self.parent = parent self.create_toolbar() self.sc = ScrolledCanvas(parent, bg="white", highlightthickness=0, takefocus=1) self.sc.frame.pack(expand=1, fill='both') def create_toolbar(self): self.toolbar = Frame(self.parent) self.btn_new = Button(self.toolbar, text='New', command=self.new_file) self.btn_new.grid(row=0, column=0) self.btn_open = Button(self.toolbar, text='Open', command=self.open_file) self.btn_open.grid(row=0, column=1) self.toolbar.pack(fill='both') def open_file(self): self.file_path = askopenfilename(filetypes=[('BooguNote Files', '.boo')]) self.dom = parse(self.file_path) curItem = None pyBt = PyBooguTree(self.sc.canvas, self.file_path, self.dom) def new_file(self): self.file_path = asksaveasfilename() print(self.file_path)
def __init__(self, master=None): # Avoiding to send it continuously. self.lock = False Frame.__init__(self, master) self.grid() self.master = master # Setting for ComboBox. self.url_lang_combobox_str = StringVar() self.url_lang_combobox_list = lang_list # UI components. self.receiver_email_text = Label(self, text="Receiver:") self.receiver_email_field = Entry(self, width=50) self.subject_text = Label(self, text='Subject:') self.subject_field = Entry(self, width=50) self.receiver_name_text = Label(self, text='Name:') self.receiver_name_field = Entry(self, width=50) self.url_lang_text = Label(self, text='Link lang:') self.url_lang_combobox = Combobox(self, textvariable=self.url_lang_combobox_str, values=self.url_lang_combobox_list, state='readonly') self.send_progressbar = Progressbar(self, orient='horizontal', length=500, mode='determinate', maximum=300) self.send_button = Button(self, text='Send', command=self._send_mail) self.quit_button = Button(self, text='Exit', command=self.__exit) self.log_msg_text = ScrolledText(self) # Attachment. self.mail_attachment_list = attachment_list[:] self.url_lang_link_title = None self.url_lang_link = copy.deepcopy(content_link) # Mailer self._mailer = None # Let Mailer can control components. Mailer.window_content = self self.__create_widgets()
def __init__(self, parent, n): Frame.__init__(self, parent) self.parent = parent; self.parent.maxsize(1200,720) self.parent.minsize(1200,720) self.initUI() self.placeWindow(n)
def __init__(self, parent, *args, **kw): Frame.__init__(self, parent, *args,**kw) self.e=Entry(self, text='Message') self.e.delete(0,'end') self.e.pack() self.makebuttons() self.pack(expand='true',fill='x')
def __init__(self, parent): """ This method creates a new, emtpy LpoView. """ Frame.__init__(self, parent) self.__parent = parent self.__initUI() self.__lpo = None
def create_instance_panel(self): frm_inst = Frame(self.ntbk) frm_inst.grid_columnconfigure(0, weight=1) frm_inst.grid_rowconfigure(0, weight=1) frm_inst.grid_columnconfigure(1, weight=3) frm_inst.grid_rowconfigure(1, weight=0) self.instance_list = Listbox(frm_inst, width=20) self.instance_list.bind('<<ListboxSelect>>', self.select_instance) self.instance_list.pack() self.instance_list.grid(row=0, column=0, sticky=(N, S, W, E)) self.instance_txt = Text(frm_inst, width=75) self.instance_txt.grid(row=0, column=1, rowspan=2, sticky=(N, S, W, E)) self.instance_txt.config(state=DISABLED) self.btninstframe = Frame(frm_inst, bd=1) self.btninstframe.grid(row=1, column=0, columnspan=1) self.btninstframe.grid_columnconfigure(0, weight=1) Button(self.btninstframe, text=ugettext("Launch"), width=25, command=self.open_inst).grid( row=0, column=0, columnspan=2, sticky=(N, S)) Button(self.btninstframe, text=ugettext("Modify"), width=10, command=self.modify_inst).grid(row=1, column=0, sticky=(N, S)) Button(self.btninstframe, text=ugettext("Delete"), width=10, command=self.delete_inst).grid(row=1, column=1, sticky=(N, S)) Button(self.btninstframe, text=ugettext("Save"), width=10, command=self.save_inst).grid(row=2, column=0, sticky=(N, S)) Button(self.btninstframe, text=ugettext("Restore"), width=10, command=self.restore_inst).grid(row=2, column=1, sticky=(N, S)) Button(self.btninstframe, text=ugettext("Add"), width=25, command=self.add_inst).grid( row=3, column=0, columnspan=2, sticky=(N, S)) self.ntbk.add(frm_inst, text=ugettext('Instances'))
def initUI(self): self.parent.title('PyZilla') self.padding = 5 self.pack(fill=BOTH, expand=1) # Create a menubar mnuMenu = Menu(self.parent) self.parent.config(menu=mnuMenu) # Create menubar mnuFileMenu = Menu(mnuMenu) # Add File menu items mnuFileMenu.add_command(label='Open', command=self.onBtnOpenFile) mnuFileMenu.add_command(label='Exit', command=self.quit) # Add File menu items to File menu mnuMenu.add_cascade(label='File', menu=mnuFileMenu) # Create frame for all the widgets frame = Frame(self) frame.pack(anchor=N, fill=BOTH) # Create file open dialog btnOpenFile = Button(frame, text="Load file", command=self.onBtnOpenFile) btnOpenFile.pack(side=RIGHT, pady=self.padding) # Create filename label self.lblFilename = Label(frame, text='No filename chosen...') self.lblFilename.pack(side=LEFT, pady=self.padding, padx=self.padding) # Create the text widget for the results self.txtResults = Text(self) self.txtResults.pack(fill=BOTH, expand=1, pady=self.padding, padx=self.padding)
def ua_win_tk(url, pipe = None): from tkinter import Tk, Frame, Label, Entry, StringVar, BOTH, Button, RIGHT import sys sys.stdout.flush() instructions = "Visit the following URL to authorize the application:" response = {"x": False} root = Tk() root.title("oAuth2 Authorization Required") webbox = Frame(root) instructions = Label(webbox, text = instructions) instructions.pack(padx = 5, pady = 5) urlstr = StringVar(value = url) urlbox = Entry(webbox, textvariable = urlstr, state = "readonly") urlbox.pack(padx = 5, pady = 5) def open_browser(): from subprocess import Popen p = Popen(["sensible-browser", url]) browserbutton = Button(webbox, text = "Open in web browser", command = open_browser) browserbutton.pack(padx = 5, pady = 5) webbox.pack(fill = BOTH, expand = 1) if pipe: def poll(): if pipe.poll(): root.destroy() #Mutability ftw... wat response["x"] = True else: root.after(300, poll) root.after(300, poll) cancelbutton = Button(root, text = "Cancel", command = root.destroy) cancelbutton.pack(side = RIGHT, padx = 5, pady = 5) root.mainloop() return response["x"]
def append_algorithm(self, algorithm): #To do: when algo is reset, the frm should be removed for algoName in self.__frameDict: self.__frameDict[algoName]['frame'].pack_forget() frm = Frame(self) frm.pack() paramInfo = {} params = algorithm['parameters'] for index, name in enumerate(params): param = params[name] paramitem = LabeledEntry(frm) paramitem.label_text = name paramitem.label_width = 5 paramitem.entry_width = 8 if self.balloon: tip = f'''{param.shortdesc} Type: {param.type.__name__}.''' self.balloon.bind_widget(paramitem.label, balloonmsg=tip) if param.type is int: paramitem.checker_function = self._app.gui.value_checker.check_int elif param.type is float: paramitem.checker_function = self._app.gui.value_checker.check_float paramitem.grid(row=index%self.__MAXROW, column=index//self.__MAXROW) #self.__params[param.name] = {'gui':paramitem, 'meta':param} paramInfo[param.name] = {'gui':paramitem, 'meta':param} self.__algo = algorithm #self.__frameDict[algorithm.meta.name] = frm self.__frameDict[algorithm['name']] = dict(frame=frm, paramInfo=paramInfo) self.__params = paramInfo
def __init__(self): Toplevel.__init__(self) self.focus_set() self.grab_set() self.result = None self.module_data = None self.mod_applis = None self.title(ugettext("Instance editor")) self.grid_columnconfigure(0, weight=1) self.grid_rowconfigure(0, weight=1) self.ntbk = ttk.Notebook(self) self.ntbk.grid(row=0, column=0, columnspan=1, sticky=(N, S, E, W)) self.frm_general = Frame(self.ntbk, width=350, height=150) self.frm_general.grid_columnconfigure(0, weight=0) self.frm_general.grid_columnconfigure(1, weight=1) self._general_tabs() self.ntbk.add(self.frm_general, text=ugettext('General')) self.frm_database = Frame(self.ntbk, width=350, height=150) self.frm_database.grid_columnconfigure(0, weight=0) self.frm_database.grid_columnconfigure(1, weight=1) self._database_tabs() self.ntbk.add(self.frm_database, text=ugettext('Database')) btnframe = Frame(self, bd=1) btnframe.grid(row=1, column=0, columnspan=1) Button(btnframe, text=ugettext("OK"), width=10, command=self.apply).grid( row=0, column=0, sticky=(N, S, E)) Button(btnframe, text=ugettext("Cancel"), width=10, command=self.destroy).grid( row=0, column=1, sticky=(N, S, W))
def _initjoincondpanel(self): frame = Frame(self) frame.grid(row=0, column=2, sticky=E + W + S + N, padx=5) label = Label(frame, text="Join Condition: ") label.grid(sticky=N + W) self.joincondlist = Listbox(frame) self.joincondlist.grid(row=1, rowspan=1, columnspan=3, sticky=E + W + S + N) vsl = Scrollbar(frame, orient=VERTICAL) vsl.grid(row=1, column=3, rowspan=1, sticky=N + S + W) hsl = Scrollbar(frame, orient=HORIZONTAL) hsl.grid(row=2, column=0, columnspan=3, sticky=W + E + N) self.joincondlist.config(yscrollcommand=vsl.set, xscrollcommand=hsl.set) hsl.config(command=self.joincondlist.xview) vsl.config(command=self.joincondlist.yview) newbtn = Button(frame, text="New", width=7, command=self._addjoincondition) newbtn.grid(row=3, column=0, padx=5, pady=5, sticky=E) delbtn = Button(frame, text="Delete", width=7, command=self._deletejoincondition) delbtn.grid(row=3, column=1, sticky=E) modbtn = Button(frame, text="Update", width=7, command=self._modifyjoincondition) modbtn.grid(row=3, column=2, padx=5, pady=5, sticky=W)
def _initfilepanel(self): frame = Frame(self) frame.grid(row=0, column=0, sticky=E + W + S + N) label = Label(frame, text="File List: ") label.grid(sticky=N + W) self.filelist = Listbox(frame, width=40) self.filelist.grid(row=1, column=0, rowspan=2, columnspan=3) vsl = Scrollbar(frame, orient=VERTICAL) vsl.grid(row=1, column=3, rowspan=2, sticky=N + S + W) hsl = Scrollbar(frame, orient=HORIZONTAL) hsl.grid(row=3, column=0, columnspan=3, sticky=W + E + N) self.filelist.config(yscrollcommand=vsl.set, xscrollcommand=hsl.set) self.filelist.bind('<<ListboxSelect>>', self._onfilelistselection) hsl.config(command=self.filelist.xview) vsl.config(command=self.filelist.yview) upbtn = Button(frame, text="Up", width=7, command=self._upfile) upbtn.grid(row=1, column=4, padx=5, pady=5) downbtn = Button(frame, text="Down", width=7, command=self._downfile) downbtn.grid(row=2, column=4, padx=5, pady=5) newbtn = Button(frame, text="New", width=7, command=self._addfile) newbtn.grid(row=4, column=1, pady=5, sticky=E + S) delbtn = Button(frame, text="Delete", width=7, command=self._deletefile) delbtn.grid(row=4, column=2, padx=5, pady=5, sticky=W + S)
def addPathFrame(self): frame=Frame(self) frame.pack(fill=tk.X,expand=0,side=tk.TOP,padx=8,pady=5) frame.columnconfigure(1,weight=1) #------------------Database file------------------ label=tk.Label(frame,text=dgbk('ting.sqlite文件:'),\ bg='#bbb') label.grid(row=0,column=0,\ sticky=tk.W,padx=8) self.db_entry=tk.Entry(frame) self.db_entry.grid(row=0,column=1,sticky=tk.W+tk.E,padx=8) self.db_button=tk.Button(frame,text=dgbk('打开'),command=self.openFile) self.db_button.grid(row=0,column=2,padx=8,sticky=tk.E) #--------------------Output dir-------------------- label2=tk.Label(frame,text=dgbk('导出到文件夹:'),\ bg='#bbb') label2.grid(row=2,column=0,\ sticky=tk.W,padx=8) self.out_entry=tk.Entry(frame) self.out_entry.grid(row=2,column=1,sticky=tk.W+tk.E,padx=8) self.out_button=tk.Button(frame,text=dgbk('选择'),command=self.openDir) self.out_button.grid(row=2,column=2,padx=8,sticky=tk.E)
def __init__(self, parent): Frame.__init__(self, parent, background="white") self.parent = parent self.parent.title("Centered window") self.pack(fill=BOTH, expand=1) self.centerWindow()
def __init__(self, master=None): Frame.__init__(self, master) self.creatures_names_list = [""] * 12 self.environment = StringVar() self.chance = StringVar() Label(self, text="Environment of the Encounter :").grid(row=0, column=0, columnspan=3) Label(self, text="Chance of the Encounter :").grid(row=1, column=0, columnspan=3) Label(self, text=" %").grid(row=1, column=4) Label(self, text="1 :").grid(row=2, column=0) Label(self, text="2 :").grid(row=3, column=0) Label(self, text="3 :").grid(row=4, column=0) Label(self, text="4 :").grid(row=5, column=0) Label(self, text="5 :").grid(row=6, column=0) Label(self, text="6 :").grid(row=7, column=0) Label(self, text="7 :").grid(row=2, column=4) Label(self, text="8 :").grid(row=3, column=4) Label(self, text="9 :").grid(row=4, column=4) Label(self, text="10 :").grid(row=5, column=4) Label(self, text="11 :").grid(row=6, column=4) Label(self, text="12 :").grid(row=7, column=4) Label(self, text="AC :").grid(row=3, column=7) Label(self, text="HP :").grid(row=4, column=7) Label(self, text="ATK :").grid(row=5, column=7) Label(self, text="DMG :").grid(row=6, column=7) Label(self, text="NUMBER :").grid(row=7, column=7) Label(self, text="SAVES:").grid(row=8, column=7) Label(self, text="ALIGN :").grid(row=9, column=7) Label(self, text="XP :").grid(row=10, column=7)
def __init__(self): """ Create the initial application GUI environment (tool bars, and other static elements) """ Frame.__init__(self, self.root) self.thread_entry_field = '' # Hold both search string, and drives autoRefresh logic self.menuBar = Menu() self.fileMenu = Menu(self.menuBar, tearoff=0) self.menuBar.add_cascade(label="File", menu=self.fileMenu, underline=1) self.fileMenu.add_command(label="Quit", command=self.root.destroy, underline=1) self.optionsMenu = Menu(self.menuBar, tearoff=0) self.menuBar.add_cascade(label="Options", menu=self.optionsMenu) self.optionsMenu.add_command(label="Settings", command=self.editSettings, underline=1) self.helpMenu = Menu(self.menuBar, tearoff=0) self.menuBar.add_cascade(label="Help", menu=self.helpMenu) self.helpMenu.add_command(label="Help", command=self.program_help, underline=1) self.helpMenu.add_command(label="About", command=self.program_about, underline=1) self.master.config(menu=self.menuBar) self.topFrame = Frame() self.thread_entry_box = Entry(self.topFrame) self.thread_entry_box.insert(0, self.DEFAULT_THREAD_TEXT) self.thread_entry_box.bind('<Return>', lambda event: self.add_thread_GUI()) # Bind needs to send the event to the handler self.thread_entry_box.pack(side='left', fill='x', expand='True', padx=5) self.add_thread_btn = Button(self.topFrame) self.add_thread_btn['text'] = 'Add New Thread' self.add_thread_btn['command'] = lambda: self.add_thread_GUI() self.add_thread_btn.pack(side='left', padx=0) self.topFrame.pack(fill='x') self.create_thread_frame()
class GUI(object): """ The base class for GUI builder """ __metaclass__ = ABCMeta def __init__(self, root): self.colorPicker = ColorPicker(root) self.topToolbar = Frame(root, bd=1, relief=RAISED) self.topToolbar.pack(side=TOP, fill=X) self.canvas = DrawingCanvas(root, self.colorPicker) self.canvas.pack(expand=YES, fill=BOTH) # Initializes IO and Draw commands. @abstractmethod def initButtons(self, ios, commands): pass # Event handler when users click on an IO command. @abstractmethod def onIOCommandClick(self, button, command): pass # Event handler when users click on a draw command. @abstractmethod def onDrawCommandClick(self, button, command): pass # Event handler when users change the selected color. @abstractmethod def onChangeColor(self, command): pass
class Example(Frame): def __init__(self, parent): Frame.__init__(self, parent) self.toolbar = Frame(self, bg="#eee") self.toolbar.pack(side="top", fill="x") self.bold = Button(self.toolbar, text="Bold", command=self.make_bold) self.bold.pack(side="left") self.clear = Button(self.toolbar, text="Clear", command=self.clear) self.clear.pack(side="left") # Creates a bold font. self.bold_font = Font(family="Helvetica", size=14, weight="bold") self.text = Text(self) self.text.insert("end", "Select part of text and then click 'Bold'...") self.text.focus() self.text.pack(fill="both", expand=True) # Configures a tag called BOLD. self.text.tag_configure("BOLD", font=self.bold_font) def make_bold(self): # tk.TclError exception is raised if not text is selected. try: self.text.tag_add("BOLD", "sel.first", "sel.last") except TclError: pass def clear(self): self.text.tag_remove("BOLD", "1.0", 'end')
def __init__(self, root): # create labels and frames with initial values and bind them self.root = root self.main = Frame(root) self.header = Frame(root) self.header_label = Label(self.header, text='2048 Game') self.score_label = Label(self.header) self.turn_label = Label(self.header, wraplength=150, height=3) self.reset = Button(self.header, text="Restart", command = self.new_board) self.reset.pack() self.header.pack() self.header_label.pack() self.score_label.pack() self.turn_label.pack() self.main.pack() self.root.bind('<Left>', self.game_play) self.root.bind('<Right>', self.game_play) self.root.bind('<Up>', self.game_play) self.root.bind('<Down>', self.game_play) self.new_board() # start tkinter gui self.root.mainloop()
class Wall(object): MIN_RED = MIN_GREEN = MIN_BLUE = 0x0 MAX_RED = MAX_GREEN = MAX_BLUE = 0xFF PIXEL_WIDTH = 50 def __init__(self, width, height): self.width = width self.height = height self._tk_init() self.pixels = [(0, 0, 0) for i in range(self.width * self.height)] def _tk_init(self): self.root = Tk() self.root.title("ColorWall %d x %d" % (self.width, self.height)) self.root.resizable(0, 0) self.frame = Frame(self.root, bd=5, relief=SUNKEN) self.frame.pack() self.canvas = Canvas(self.frame, width=self.PIXEL_WIDTH * self.width, height=self.PIXEL_WIDTH * self.height, bd=0, highlightthickness=0) self.canvas.pack() self.root.update() def set_pixel(self, x, y, hsv): self.pixels[self.width * y + x] = hsv def get_pixel(self, x, y): return self.pixels[self.width * y + x] def draw(self): self.canvas.delete(ALL) for x in range(len(self.pixels)): x_0 = (x % self.width) * self.PIXEL_WIDTH y_0 = (x / self.width) * self.PIXEL_WIDTH x_1 = x_0 + self.PIXEL_WIDTH y_1 = y_0 + self.PIXEL_WIDTH hue = "#%02x%02x%02x" % self._get_rgb(self.pixels[x]) self.canvas.create_rectangle(x_0, y_0, x_1, y_1, fill=hue) self.canvas.update() def clear(self): for i in range(self.width * self.height): self.pixels[i] = (0, 0, 0) def _hsv_to_rgb(self, hsv): rgb = colorsys.hsv_to_rgb(*hsv) red = self.MAX_RED * rgb[0] green = self.MAX_GREEN * rgb[1] blue = self.MAX_BLUE * rgb[2] return (red, green, blue) def _get_rgb(self, hsv): red, green, blue = self._hsv_to_rgb(hsv) red = int(float(red) / (self.MAX_RED - self.MIN_RED) * 0xFF) green = int(float(green) / (self.MAX_GREEN - self.MIN_GREEN) * 0xFF) blue = int(float(blue) / (self.MAX_BLUE - self.MIN_BLUE) * 0xFF) return (red, green, blue)
def startGui(): try: import_tk() except: logging.error("Error Starting GUI. Could Not Find Tkinter module" + "Please install the Python Tkinter module") return root = Tk() root.wm_title("Eagle V6 to KiCad Converter") root.wm_minsize(400, 200) frame = Frame(root, relief=RIDGE, bg="BLUE", borderwidth=2) frame.pack(fill=BOTH, expand=1) label = Label(frame, font=20, bg="BLUE", text="What Would You Like to Do:") label.pack(fill=X, expand=1) butBrd = Button(frame, text="Convert Board", command=convertBoardGUI) butBrd.pack(fill=X, expand=1) butLib = Button(frame, text="Convert Library", command=convertLibGUI) butLib.pack(fill=X, expand=1) butSch = Button(frame, text="Convert Schematic", command=convertSchGUI) butSch.pack(fill=X, expand=1) label = Label(frame, bg="BLUE", text="www.github.com/Trump211") label.pack(fill=X, expand=1) root.mainloop()
def __init__(self): ''' Constructor Initialise GameOfLife object Build the gui, bind events and initialise the display ''' # Encasing frame tk = Tk() Frame.__init__(self, master=tk) # Grid frame self._grid = GridWidget(self, X_SIZE, Y_SIZE) for row in self._grid.get_cells(): for cell in row: cell.bind('<Button-1>', self._cell_listener) # buttons self._next_button = NextButton(master=self) self._next_button.bind('<Button-1>', self._next_step_button_listener) # Set layout self._grid.grid(row=0, column=0) self._next_button.grid(row=0, column=1) # Game of life self._gol = GameOfLife(RuleSetStandard(), self._grid) self.pack() self._grid.pack() self._next_button.pack()
def __init__(self, parent): Frame.__init__(self, parent, background="white") self.parent = parent self.parent.title("Test title") self.fullscreen()
def initInterfaceZone(self): # Draw the play, step and loading buttons self.interfaceFrame = Frame(self, background="dark gray") self.playFrame = Frame(self.interfaceFrame, background="dark gray") self.loadFrame = Frame(self.interfaceFrame, background="dark gray") self.isPlaying = False #Do the run buttons playButton = Button(self.playFrame, text=">", command=self.playPress) playButton.grid(row=0,column=0) pauseButton = Button(self.playFrame, text="||", command=self.pausePress) pauseButton.grid(row=0,column=1) stepBackButton = Button(self.playFrame, text="|<", command=self.stepBackPress) stepBackButton.grid(row=1,column=0) stepForwardButton = Button(self.playFrame, text=">|", command=self.stepForwardPress) stepForwardButton.grid(row=1,column=1) self.playFrame.pack(side=LEFT, expand=1, fill=BOTH) #Do the load-y stuff self.boardInputField = Entry(self.loadFrame) self.boardInputField.grid(row=0, column=0) boardInputButton = Button(self.loadFrame, text="Load Board", command=self.loadBoardPress) boardInputButton.grid(row=0, column=1) self.moveInputField = Entry(self.loadFrame) self.moveInputField.grid(row=1,column=0) moveInputButton = Button(self.loadFrame, text="Load Moves", command=self.loadMovesPress) moveInputButton.grid(row=1, column=1) self.loadFrame.pack(side=LEFT, expand=1, fill=BOTH) self.interfaceFrame.pack(side=BOTTOM)
def __init__(self, bg='black', parent=None): Frame.__init__(self, bg='black', parent=None) #self.title("CTA Train Tracker ") self.driv = driver.Driver() self.pack() self.memory='' traintracker.make_widgets(self)
class ProgramWidget(Frame): def __init__(self, parent, client): super(ProgramWidget, self).__init__(parent) self.client = client self.client.onProgramChange = self.programChanged self.programLabel = Label(self, text = 'Program:') self.programLabel.grid(row = 0, column = 0) self.programEntry = Entry(self, text = 'Program name', state = 'readonly') self.programEntry.grid(row = 0, column = 1) self.buttonPanel = Frame(self) self.buttonPanel.grid(row = 1, column = 0, columnspan = 2, sticky = W) self.newButton = Button(self.buttonPanel, text='New', command = self.newProgram) self.newButton.pack(side = LEFT) def programChanged(self): self.__setProgramText(str(self.client.state)) def __setProgramText(self, text): self.programEntry.configure(state = NORMAL) self.programEntry.delete(0) self.programEntry.insert(0, text) self.programEntry.configure(state = 'readonly') def newProgram(self): self.client.makeNewProgram()
def __init__(self, parent): # super(createSets,self).__init__(parent) Frame.__init__(self, parent) self.parent = parent self.grid(row=0, column=0) self.parentWindow = 0 self.listBox = Listbox(self, selectmode=EXTENDED) self.listBox.grid(row=1, column=1) for item in ["one", "two", "three", "four"]: self.listBox.insert(END, item) self.buttonDel = Button(self, text="delite selected class", command=self.del_selected) # lambda ld=self.listBox:ld.delete(ANCHOR)) self.buttonDel.grid(row=0, column=0) self.entry = Entry(self, state=NORMAL) # self.entry.focus_set() self.entry.insert(0, "default") self.entry.grid(row=1, column=0) self.buttonInsert = Button(self, text="add new class", command=self.add) self.buttonInsert.grid(row=0, column=1) self.buttonDone = Button(self, text="done", command=self.done) self.buttonDone.grid(row=2, column=0)
def __init__(self, parent, title=None): Toplevel.__init__(self, parent) self.transient(parent) if title: self.title(title) self.parent = parent self.result = None body = Frame(self) self.initial_focus = self.body(body) body.pack(padx=5, pady=5) self.buttonbox() self.grab_set() if not self.initial_focus: self.initial_focus = self self.protocol("WM_DELETE_WINDOW", self.cancel) self.geometry("+%d+%d" % (parent.winfo_rootx() + 50, parent.winfo_rooty() + 50)) self.initial_focus.focus_set() self.wait_window(self)
def guiMain(settings=None): frames = {} mainWindow = Tk() mainWindow.wm_title("OoT Randomizer %s" % ESVersion) mainWindow.resizable(False, False) set_icon(mainWindow) notebook = ttk.Notebook(mainWindow) frames['rom_tab'] = ttk.Frame(notebook) frames['rules_tab'] = ttk.Frame(notebook) frames['logic_tab'] = ttk.Frame(notebook) frames['other_tab'] = ttk.Frame(notebook) frames['aesthetic_tab'] = ttk.Frame(notebook) frames['aesthetic_tab_left'] = Frame(frames['aesthetic_tab']) frames['aesthetic_tab_right'] = Frame(frames['aesthetic_tab']) adjustWindow = ttk.Frame(notebook) customWindow = ttk.Frame(notebook) notebook.add(frames['rom_tab'], text='ROM Options') notebook.add(frames['rules_tab'], text='Main Rules') notebook.add(frames['logic_tab'], text='Detailed Logic') notebook.add(frames['other_tab'], text='Other') notebook.add(frames['aesthetic_tab'], text='Cosmetics') ####################### # randomizer controls # ####################### # hold the results of the user's decisions here guivars = {} # hierarchy ############ #Rules Tab frames['open'] = LabelFrame(frames['rules_tab'], text='Open', labelanchor=NW) frames['world'] = LabelFrame(frames['rules_tab'], text='World', labelanchor=NW) frames['logic'] = LabelFrame(frames['rules_tab'], text='Shuffle', labelanchor=NW) # Logic tab frames['rewards'] = LabelFrame(frames['logic_tab'], text='Remove Specific Locations', labelanchor=NW) frames['tricks'] = LabelFrame(frames['logic_tab'], text='Specific expected tricks', labelanchor=NW) #Other Tab frames['convenience'] = LabelFrame(frames['other_tab'], text='Speed Ups', labelanchor=NW) frames['other'] = LabelFrame(frames['other_tab'], text='Misc', labelanchor=NW) #Aesthetics tab frames['cosmetics'] = LabelFrame(frames['aesthetic_tab'], text='General', labelanchor=NW) frames['tuniccolor'] = LabelFrame(frames['aesthetic_tab_left'], text='Tunic Color', labelanchor=NW) frames['navicolor'] = LabelFrame(frames['aesthetic_tab_right'], text='Navi Color', labelanchor=NW) frames['lowhp'] = LabelFrame(frames['aesthetic_tab_left'], text='Low HP SFX', labelanchor=NW) frames['navihint'] = LabelFrame(frames['aesthetic_tab_right'], text='Navi SFX', labelanchor=NW) # shared settingsFrame = Frame(mainWindow) settings_string_var = StringVar() settingsEntry = Entry(settingsFrame, textvariable=settings_string_var, width=25) def show_settings(event=None): settings = guivars_to_settings(guivars) settings_string_var.set(settings.get_settings_string()) # Update any dependencies for info in setting_infos: if info.gui_params and 'dependency' in info.gui_params: dep_met = info.gui_params['dependency'](guivars) if widgets[info.name].winfo_class() == 'Frame': for child in widgets[info.name].winfo_children(): if child.winfo_class() == 'TCombobox': child.configure( state='readonly' if dep_met else 'disabled') else: child.configure( state='normal' if dep_met else 'disabled') if child.winfo_class() == 'Scale': child.configure(fg='Black' if dep_met else 'Grey') else: if widgets[info.name].winfo_class() == 'TCombobox': widgets[info.name].configure( state='readonly' if dep_met else 'disabled') else: widgets[info.name].configure( state='normal' if dep_met else 'disabled') if widgets[info.name].winfo_class() == 'Scale': widgets[info.name].configure( fg='Black' if dep_met else 'Grey') if info.name in guivars and guivars[ info.name].get() == 'Custom Color': color = askcolor() if color == (None, None): color = ((0, 0, 0), '#000000') guivars[info.name].set('Custom (' + color[1] + ')') def show_settings_special(event=None): if guivars['logic_tricks'].get(): widgets['logic_man_on_roof'].select() widgets['logic_child_deadhand'].select() widgets['logic_dc_jump'].select() widgets['logic_windmill_poh'].select() widgets['logic_crater_bean_poh_with_hovers'].select() widgets['logic_zora_with_cucco'].select() widgets['logic_fewer_tunic_requirements'].select() else: widgets['logic_man_on_roof'].deselect() widgets['logic_child_deadhand'].deselect() widgets['logic_dc_jump'].deselect() widgets['logic_windmill_poh'].deselect() widgets['logic_crater_bean_poh_with_hovers'].deselect() widgets['logic_zora_with_cucco'].deselect() widgets['logic_fewer_tunic_requirements'].deselect() settings = guivars_to_settings(guivars) settings_string_var.set(settings.get_settings_string()) def import_settings(event=None): try: settings = guivars_to_settings(guivars) text = settings_string_var.get().upper() settings.seed = guivars['seed'].get() settings.update_with_settings_string(text) settings_to_guivars(settings, guivars) except Exception as e: messagebox.showerror(title="Error", message="Invalid settings string") label = Label(settingsFrame, text="Settings String") importSettingsButton = Button(settingsFrame, text='Import Settings String', command=import_settings) label.pack(side=LEFT, anchor=W, padx=5) settingsEntry.pack(side=LEFT, anchor=W) importSettingsButton.pack(side=LEFT, anchor=W, padx=5) fileDialogFrame = Frame(frames['rom_tab']) romDialogFrame = Frame(fileDialogFrame) baseRomLabel = Label(romDialogFrame, text='Base ROM') guivars['rom'] = StringVar(value='ZOOTDEC.z64') romEntry = Entry(romDialogFrame, textvariable=guivars['rom'], width=40) def RomSelect(): rom = filedialog.askopenfilename( filetypes=[("ROM Files", (".z64", ".n64")), ("All Files", "*")]) if rom != '': guivars['rom'].set(rom) romSelectButton = Button(romDialogFrame, text='Select ROM', command=RomSelect, width=10) baseRomLabel.pack(side=LEFT, padx=(38, 0)) romEntry.pack(side=LEFT, padx=3) romSelectButton.pack(side=LEFT) romDialogFrame.pack() fileDialogFrame.pack(side=TOP, anchor=W, padx=5, pady=(5, 1)) def open_output(): open_file(output_path('')) def output_dir_select(): rom = filedialog.askdirectory( initialdir=default_output_path(guivars['output_dir'].get())) if rom != '': guivars['output_dir'].set(rom) outputDialogFrame = Frame(frames['rom_tab']) outputDirLabel = Label(outputDialogFrame, text='Output Directory') guivars['output_dir'] = StringVar(value='') outputDirEntry = Entry(outputDialogFrame, textvariable=guivars['output_dir'], width=40) outputDirButton = Button(outputDialogFrame, text='Select Dir', command=output_dir_select, width=10) outputDirLabel.pack(side=LEFT, padx=(3, 0)) outputDirEntry.pack(side=LEFT, padx=3) outputDirButton.pack(side=LEFT) outputDialogFrame.pack(side=TOP, anchor=W, padx=5, pady=(5, 1)) if os.path.exists(local_path('README.html')): def open_readme(): open_file(local_path('README.html')) openReadmeButton = Button(outputDialogFrame, text='Open Documentation', command=open_readme) openReadmeButton.pack(side=LEFT, padx=5) outputDialogFrame.pack(side=TOP, anchor=W, pady=3) countDialogFrame = Frame(frames['rom_tab']) countLabel = Label(countDialogFrame, text='Generation Count') guivars['count'] = StringVar() countSpinbox = Spinbox(countDialogFrame, from_=1, to=100, textvariable=guivars['count'], width=3) countLabel.pack(side=LEFT) countSpinbox.pack(side=LEFT, padx=2) countDialogFrame.pack(side=TOP, anchor=W, padx=5, pady=(1, 1)) # build gui ############ widgets = {} for info in setting_infos: if info.gui_params: if info.gui_params['widget'] == 'Checkbutton': # determine the initial value of the checkbox default_value = 1 if info.gui_params[ 'default'] == "checked" else 0 # create a variable to access the box's state guivars[info.name] = IntVar(value=default_value) # create the checkbox widgets[info.name] = Checkbutton( frames[info.gui_params['group']], text=info.gui_params['text'], variable=guivars[info.name], justify=LEFT, wraplength=190, command=show_settings) widgets[info.name].pack(expand=False, anchor=W) if info.gui_params['widget'] == 'SpecialCheckbutton': # determine the initial value of the checkbox default_value = 1 if info.gui_params[ 'default'] == "checked" else 0 # create a variable to access the box's state guivars[info.name] = IntVar(value=default_value) # create the checkbox widgets[info.name] = Checkbutton( frames[info.gui_params['group']], text=info.gui_params['text'], variable=guivars[info.name], justify=LEFT, wraplength=190, command=show_settings_special) widgets[info.name].pack(expand=False, anchor=W) elif info.gui_params['widget'] == 'Combobox': # create the variable to store the user's decision guivars[info.name] = StringVar( value=info.gui_params['default']) # create the option menu widgets[info.name] = Frame(frames[info.gui_params['group']]) # dropdown = OptionMenu(widgets[info.name], guivars[info.name], *(info['options'])) if isinstance(info.gui_params['options'], list): info.gui_params['options'] = dict( zip(info.gui_params['options'], info.gui_params['options'])) dropdown = ttk.Combobox(widgets[info.name], textvariable=guivars[info.name], values=list( info.gui_params['options'].keys()), state='readonly', width=30) dropdown.bind("<<ComboboxSelected>>", show_settings) dropdown.pack(side=BOTTOM, anchor=W) # label the option if 'text' in info.gui_params: label = Label(widgets[info.name], text=info.gui_params['text']) label.pack(side=LEFT, anchor=W, padx=5) # pack the frame widgets[info.name].pack(expand=False, side=TOP, anchor=W, padx=3, pady=3) elif info.gui_params['widget'] == 'Radiobutton': # create the variable to store the user's decision guivars[info.name] = StringVar( value=info.gui_params['default']) # create the option menu widgets[info.name] = LabelFrame( frames[info.gui_params['group']], text=info.gui_params['text'] if 'text' in info.gui_params else info["name"], labelanchor=NW) if isinstance(info.gui_params['options'], list): info.gui_params['options'] = dict( zip(info.gui_params['options'], info.gui_params['options'])) # setup orientation side = TOP anchor = W if "horizontal" in info.gui_params and info.gui_params[ "horizontal"]: side = LEFT anchor = N # add the radio buttons for option in info.gui_params["options"]: radio_button = Radiobutton(widgets[info.name], text=option, value=option, variable=guivars[info.name], justify=LEFT, wraplength=190, indicatoron=False, command=show_settings) radio_button.pack(expand=True, side=side, anchor=anchor) # pack the frame widgets[info.name].pack(expand=False, side=TOP, anchor=W, padx=3, pady=3) elif info.gui_params['widget'] == 'Scale': # create the variable to store the user's decision guivars[info.name] = IntVar(value=info.gui_params['default']) # create the option menu widgets[info.name] = Frame(frames[info.gui_params['group']]) # dropdown = OptionMenu(widgets[info.name], guivars[info.name], *(info['options'])) minval = 'min' in info.gui_params and info.gui_params[ 'min'] or 0 maxval = 'max' in info.gui_params and info.gui_params[ 'max'] or 100 stepval = 'step' in info.gui_params and info.gui_params[ 'step'] or 1 scale = Scale(widgets[info.name], variable=guivars[info.name], from_=minval, to=maxval, tickinterval=stepval, resolution=stepval, showvalue=0, orient=HORIZONTAL, sliderlength=15, length=200, command=show_settings) scale.pack(side=BOTTOM, anchor=W) # label the option if 'text' in info.gui_params: label = Label(widgets[info.name], text=info.gui_params['text']) label.pack(side=LEFT, anchor=W, padx=5) # pack the frame widgets[info.name].pack(expand=False, side=TOP, anchor=W, padx=3, pady=3) elif info.gui_params['widget'] == 'Entry': # create the variable to store the user's decision guivars[info.name] = StringVar( value=info.gui_params['default']) # create the option menu widgets[info.name] = Frame(frames[info.gui_params['group']]) entry = Entry(widgets[info.name], textvariable=guivars[info.name], width=30) entry.pack(side=BOTTOM, anchor=W) # label the option if 'text' in info.gui_params: label = Label(widgets[info.name], text=info.gui_params['text']) label.pack(side=LEFT, anchor=W, padx=5) # pack the frame widgets[info.name].pack(expand=False, side=TOP, anchor=W, padx=3, pady=3) if 'tooltip' in info.gui_params: ToolTips.register(widgets[info.name], info.gui_params['tooltip']) # pack the hierarchy frames['logic'].pack(fill=BOTH, expand=True, anchor=N, side=RIGHT, pady=(5, 1)) frames['open'].pack(fill=BOTH, expand=True, anchor=W, side=TOP, pady=(5, 1)) frames['world'].pack(fill=BOTH, expand=True, anchor=W, side=BOTTOM, pady=(5, 1)) # Logic tab frames['rewards'].pack(fill=BOTH, expand=True, anchor=N, side=LEFT, pady=(5, 1)) frames['tricks'].pack(fill=BOTH, expand=True, anchor=N, side=LEFT, pady=(5, 1)) #Other Tab frames['convenience'].pack(fill=BOTH, expand=True, anchor=N, side=LEFT, pady=(5, 1)) frames['other'].pack(fill=BOTH, expand=True, anchor=N, side=LEFT, pady=(5, 1)) #Aesthetics tab frames['cosmetics'].pack(fill=BOTH, expand=True, anchor=W, side=TOP) frames['aesthetic_tab_left'].pack(fill=BOTH, expand=True, anchor=W, side=LEFT) frames['aesthetic_tab_right'].pack(fill=BOTH, expand=True, anchor=W, side=RIGHT) #Aesthetics tab - Left Side frames['tuniccolor'].pack(fill=BOTH, expand=True, anchor=W, side=TOP, pady=(5, 1)) frames['lowhp'].pack(fill=BOTH, expand=True, anchor=W, side=TOP, pady=(5, 1)) #Aesthetics tab - Right Side frames['navicolor'].pack(fill=BOTH, expand=True, anchor=W, side=TOP, pady=(5, 1)) frames['navihint'].pack(fill=BOTH, expand=True, anchor=W, side=TOP, pady=(5, 1)) notebook.pack(fill=BOTH, expand=True, padx=5, pady=5) multiworldFrame = LabelFrame(frames['rom_tab'], text='Multi-World Generation') countLabel = Label( multiworldFrame, wraplength=350, justify=LEFT, text= 'This is used for co-op generations. Increasing Player Count will drastically increase the generation time. For more information see:' ) hyperLabel = Label(multiworldFrame, wraplength=350, justify=LEFT, text='https://github.com/TestRunnerSRL/bizhawk-co-op', fg='blue', cursor='hand2') hyperLabel.bind( "<Button-1>", lambda event: webbrowser.open_new( r"https://github.com/TestRunnerSRL/bizhawk-co-op")) countLabel.pack(side=TOP, anchor=W, padx=5, pady=0) hyperLabel.pack(side=TOP, anchor=W, padx=5, pady=0) worldCountFrame = Frame(multiworldFrame) countLabel = Label(worldCountFrame, text='Player Count') guivars['world_count'] = StringVar() countSpinbox = Spinbox(worldCountFrame, from_=1, to=100, textvariable=guivars['world_count'], width=3) countLabel.pack(side=LEFT) countSpinbox.pack(side=LEFT, padx=2) worldCountFrame.pack(side=LEFT, anchor=N, padx=10, pady=(1, 5)) playerNumFrame = Frame(multiworldFrame) countLabel = Label(playerNumFrame, text='Player ID') guivars['player_num'] = StringVar() countSpinbox = Spinbox(playerNumFrame, from_=1, to=100, textvariable=guivars['player_num'], width=3) countLabel.pack(side=LEFT) countSpinbox.pack(side=LEFT, padx=2) playerNumFrame.pack(side=LEFT, anchor=N, padx=10, pady=(1, 5)) multiworldFrame.pack(side=TOP, anchor=W, padx=5, pady=(1, 1)) # didn't refactor the rest, sorry # create the option menu settingsFrame.pack(fill=BOTH, anchor=W, padx=5, pady=(10, 0)) def multiple_run(settings, window): orig_seed = settings.seed for i in range(settings.count): settings.update_seed(orig_seed + '-' + str(i)) window.update_title("Generating Seed...%d/%d" % (i + 1, settings.count)) main(settings, window) def generateRom(): settings = guivars_to_settings(guivars) if settings.count is not None: BackgroundTaskProgress(mainWindow, "Generating Seed...", multiple_run, settings) else: BackgroundTaskProgress(mainWindow, "Generating Seed...", main, settings) generateSeedFrame = Frame(mainWindow) generateButton = Button(generateSeedFrame, text='Generate Patched Rom', command=generateRom) seedLabel = Label(generateSeedFrame, text='Seed') guivars['seed'] = StringVar() seedEntry = Entry(generateSeedFrame, textvariable=guivars['seed'], width=25) seedLabel.pack(side=LEFT, padx=(55, 5)) seedEntry.pack(side=LEFT) generateButton.pack(side=LEFT, padx=(5, 0)) generateSeedFrame.pack(side=BOTTOM, anchor=W, padx=5, pady=10) guivars['checked_version'] = StringVar() if settings is not None: # load values from commandline args settings_to_guivars(settings, guivars) else: # try to load saved settings try: settingsFile = os.path.join( os.path.dirname(os.path.abspath(__file__)), 'settings.sav') with open(settingsFile) as f: settings = Settings(json.load(f)) settings.update_seed("") settings_to_guivars(settings, guivars) except: pass show_settings() def gui_check_version(): task = BackgroundTask(mainWindow, check_version, guivars['checked_version'].get()) while task.running: mainWindow.update() if task.status: dialog = Dialog(mainWindow, title="Version Error", question=task.status, oktext='Don\'t show again', canceltext='OK') if dialog.result: guivars['checked_version'].set(ESVersion) mainWindow.after(1000, gui_check_version) mainWindow.mainloop() # save settings on close with open('settings.sav', 'w') as outfile: settings = guivars_to_settings(guivars) json.dump(settings.__dict__, outfile)
def quit(self): """ Quits the application after requesting confirm """ if askyesno('Verify quit', 'Are you sure you want to quit?'): Frame.quit(self)
class BaseNode(Frame): '''Node view base class Has a 'title' at the left-top corner, and then a '+' button for adding attributes, and optional label on the right side with a word count ''' def __init__(self, controller, master=None, main=None, title='Title', right_label_text=None, allow_remove=True, number=1, **kwargs): ''' controller: a mentalist.controller.Controller instance master: the tkinter master of this view main: a mentalist.view.Main instance title: the title string to be displayed for this node right_label_text: an optional string to be displayed on the right-hand side (word count) allow_remove: False if attempting to remove this node gives an error message number: an integer starting with 1 identifying this node's position in the chain ''' Frame.__init__(self, master=master, **kwargs) self.controller = controller self.title = title self.main = main self.attrs = [] self.number = number self.allow_remove = allow_remove self.configure(borderwidth=1, relief=Tk.RAISED) self.upper_frame = Frame(self) self.upper_frame.configure(borderwidth=1, relief=Tk.RIDGE) self.lb_title = Tk.Label(self.upper_frame, text='{}. {}'.format(number, title)) self.lb_title.pack(fill="both", side="left", padx=10, pady=10) if right_label_text is not None: # this is the right-justified word count label self.right_label = Tk.Label(self.upper_frame, text=right_label_text, font=('Helvetica', '10', 'italic')) self.right_label.pack(fill="both", side="right", padx=10, pady=10) else: self.right_label = None self.upper_frame.pack(side="top", fill="x", expand=1) self.lower_frame = Frame(self) self.lower_frame.pack(side="bottom", fill="both") self.add_upper_button() if self.allow_remove: self.add_remove_button() self.pack(side="top", fill="both", padx=2, pady=2) @abstractmethod def add_upper_button(self): '''Creates the menubutton for adding attributes ''' pass def add_remove_button(self): '''Creates the button for removing the node ''' btn_add_file = Tk.Button(self.upper_frame, text=' - ') btn_add_file.pack(fill="both", side="right", padx=10, pady=5) btn_add_file.bind("<ButtonRelease-1>", partial(self.main.on_remove_node, self)) btn_add_file = Tk.Button(self.upper_frame, text=' ↑ ') btn_add_file.pack(fill="both", side="right", padx=10, pady=5) btn_add_file.bind("<ButtonRelease-1>", partial(self.main.move_node, self, 'up')) btn_add_file = Tk.Button(self.upper_frame, text=' ↓ ') btn_add_file.pack(fill="both", side="right", padx=10, pady=5) btn_add_file.bind("<ButtonRelease-1>", partial(self.main.move_node, self, 'down')) def update_number(self, num): '''Updates the node number displayed on the left-hand side ''' self.number = num self.lb_title.configure(text='{}. {}'.format(self.number, self.title)) def add_attr(self, attr_name, right_label_text=None, *args): '''Add attr to the lower frame with a '-' button & title attr_name: title to be shown on the left side right_label_text: label string to be shown on the right side, which is a word count or 'Calculating...' ''' if len(self.attrs) == 0: self.lower_frame = Frame(self) self.lower_frame.pack(side="bottom", fill="both") attr = LabeledFrame(self.lower_frame, title=attr_name) btn_add_file = Tk.Button(attr, text=' - ') btn_add_file.pack(fill="both", side="left", padx=10, pady=5) btn_add_file.bind("<ButtonRelease-1>", partial(self.on_remove_attr, attr)) lb_base_files = Tk.Label(attr, text=attr_name) lb_base_files.pack(fill="both", side="left", padx=10, pady=10) if right_label_text is not None: attr.right_label = Tk.Label(attr, text=right_label_text, font=('Helvetica', '10', 'italic')) attr.right_label.pack(fill="both", side="right", padx=10, pady=10) else: attr.right_label = None attr.pack(side="top", fill="both") self.attrs.append(attr) def on_remove_attr(self, attr, *args): '''The '-' button was pressed ''' self.controller.remove_attr(self, attr) def remove_attr(self, attr): '''Remove the attribute, updating the display ''' attr.destroy() self.attrs.remove(attr) if len(self.attrs) == 0: self.lower_frame.destroy() def get_values(self): '''Gets the list of attribute label strings ''' return [attr.get_value() for attr in self.attrs]
def __init__(self, master=None, title='', **kwargs): Frame.__init__(self, master=master, **kwargs) self.title = title
class View(): def __init__(self, master): self.width = 600 self.height = 600 self.root = master self.root.geometry("600x600") self.left_frame = Frame(self.root, width=600) self.left_frame.pack_propagate(0) self.left_frame.pack(fill='both', side='left', expand='True') self.retrieval_frame = Frame(self.root, bg='snow3') self.retrieval_frame.pack_propagate(0) self.retrieval_frame.pack(fill='both', side='right', expand='True') self.bg_frame = Frame(self.left_frame, bg='snow3', height=600, width=600) self.bg_frame.pack_propagate(0) self.bg_frame.pack(fill='both', side='top', expand='True') self.command_frame = Frame(self.left_frame, bg='snow3') self.command_frame.pack_propagate(0) self.command_frame.pack(fill='both', side='bottom', expand='True') # self.command_frame.grid(row=1, column=0,padx=0, pady=0) self.bg = Canvas(self.bg_frame, width=self.width, height=self.height, bg='gray') self.bg.place(relx=0.5, rely=0.5, anchor='center') self.mani = Canvas(self.retrieval_frame, width=1024, height=1024, bg='gray') self.mani.grid(row=0, column=0, padx=0, pady=42) self.SetCommand() def run(self): self.root.mainloop() def helloCallBack(self): category = self.set_category.get() messagebox.showinfo("Hello Python", category) def SetCommand(self): tmp = Label(self.command_frame, text="neutral", width=10, bg='snow3') tmp.grid(row=1, column=0, padx=10, pady=10) tmp = Label(self.command_frame, text="a photo of a", width=10, bg='snow3') tmp.grid(row=1, column=1, padx=10, pady=10) self.neutral = Text(self.command_frame, height=2, width=30) self.neutral.grid(row=1, column=2, padx=10, pady=10) tmp = Label(self.command_frame, text="target", width=10, bg='snow3') tmp.grid(row=2, column=0, padx=10, pady=10) tmp = Label(self.command_frame, text="a photo of a", width=10, bg='snow3') tmp.grid(row=2, column=1, padx=10, pady=10) self.target = Text(self.command_frame, height=2, width=30) self.target.grid(row=2, column=2, padx=10, pady=10) tmp = Label(self.command_frame, text="strength", width=10, bg='snow3') tmp.grid(row=3, column=0, padx=10, pady=10) self.alpha = Scale(self.command_frame, from_=-15, to=25, orient=HORIZONTAL, bg='snow3', length=250, resolution=0.01) self.alpha.grid(row=3, column=2, padx=10, pady=10) tmp = Label(self.command_frame, text="disentangle", width=10, bg='snow3') tmp.grid(row=4, column=0, padx=10, pady=10) self.beta = Scale(self.command_frame, from_=0.08, to=0.4, orient=HORIZONTAL, bg='snow3', length=250, resolution=0.001) self.beta.grid(row=4, column=2, padx=10, pady=10) self.reset = Button(self.command_frame, text='Reset') self.reset.grid(row=5, column=1, padx=10, pady=10) self.set_init = Button(self.command_frame, text='Accept') self.set_init.grid(row=5, column=2, padx=10, pady=10)
def create_gui(self): '''used to create GUI elements''' self.root.title("MangaReaDex v1.2 - By Nadhif") self.root.geometry("1000x1080") # Initialize the webdriver headless options = Options() options.add_argument("--headless") self.driver = webdriver.Firefox(options=options) # Make frame for every different GUI element self.header = Frame(self.root, height=100, width=900) self.lefthead = Frame(self.header, height=80, width=465, highlightbackground="green", highlightcolor="green", highlightthickness=1) self.righthead = Frame(self.header, height=80, width=465, highlightbackground="green", highlightcolor="green", highlightthickness=1) self.prighthead = Frame(self.righthead, height=35, width=465) self.body = Frame(self.root, height=900, width=930, highlightbackground="blue", highlightcolor="blue", highlightthickness=1) self.footer = Frame(self.root, height=20, width=930, highlightbackground="red", highlightcolor="red", highlightthickness=1) # Freeze the frame so it doesn't shrink self.header.pack_propagate(False) self.body.pack_propagate(False) self.lefthead.pack_propagate(False) self.righthead.pack_propagate(False) self.footer.pack_propagate(False) # Put all the frames inside the main window self.header.pack() self.body.pack() self.footer.pack() self.lefthead.grid(row=0, column=0) self.righthead.grid(row=0, column=1) self.prighthead.pack(side=BOTTOM) # Initialize the manga object (Canvas) self.manga = Manga(self.body, width=907, height=1200, scrollregion=(0, 0, 900, 1300), driver=self.driver) # Make labels and place them inside the window manga_label = Label(self.lefthead, text="Enter your manga title", font=(22)) chapter_label = Label(self.righthead, text="Pick your chapter", font=(14)) page_label = Label(self.prighthead, text="Page :", font=(14)) manga_label.pack() chapter_label.pack() # Make boxes as Manga's attribute and place them inside the window self.manga.manga_box = Combobox(self.lefthead, width=50) self.manga.chapter_box = Combobox(self.righthead, width=50, state='readonly') self.manga.page_box = Combobox(self.prighthead, width=10, state='readonly') self.manga.manga_box.pack() self.manga.chapter_box.pack() page_label.pack(side=LEFT) self.manga.page_box.pack(side=RIGHT) # Make buttons and place them inside the window left_button = Button(self.footer, text="<-", command=self.prev_page, width=51, font=(16)) right_button = Button(self.footer, text="->", command=self.next_page, width=51, font=(16)) search_button = Button(self.lefthead, text="Search", command=self.update_manga_list) left_button.pack(side=LEFT) right_button.pack(side=RIGHT) search_button.pack() # Make a scrollbar for the canvas and pack the canvas scrollbar = Scrollbar(self.body, orient=VERTICAL) self.manga.config(yscrollcommand=scrollbar.set) self.manga.pack(side=LEFT) # Create a title screen image and show it in the canvas img = ImageTk.PhotoImage(file="mangareadex.png") self.manga.image = self.manga.create_image(450, 650, image=img) self.manga.img = img # Pack the scrollbar scrollbar.config(command=self.manga.yview) scrollbar.pack(side=RIGHT, fill=Y) # Make the controls self.controller()
class MainGUI(): def __init__(self, root): self.root = root self.create_gui() # Create the main window def create_gui(self): '''used to create GUI elements''' self.root.title("MangaReaDex v1.2 - By Nadhif") self.root.geometry("1000x1080") # Initialize the webdriver headless options = Options() options.add_argument("--headless") self.driver = webdriver.Firefox(options=options) # Make frame for every different GUI element self.header = Frame(self.root, height=100, width=900) self.lefthead = Frame(self.header, height=80, width=465, highlightbackground="green", highlightcolor="green", highlightthickness=1) self.righthead = Frame(self.header, height=80, width=465, highlightbackground="green", highlightcolor="green", highlightthickness=1) self.prighthead = Frame(self.righthead, height=35, width=465) self.body = Frame(self.root, height=900, width=930, highlightbackground="blue", highlightcolor="blue", highlightthickness=1) self.footer = Frame(self.root, height=20, width=930, highlightbackground="red", highlightcolor="red", highlightthickness=1) # Freeze the frame so it doesn't shrink self.header.pack_propagate(False) self.body.pack_propagate(False) self.lefthead.pack_propagate(False) self.righthead.pack_propagate(False) self.footer.pack_propagate(False) # Put all the frames inside the main window self.header.pack() self.body.pack() self.footer.pack() self.lefthead.grid(row=0, column=0) self.righthead.grid(row=0, column=1) self.prighthead.pack(side=BOTTOM) # Initialize the manga object (Canvas) self.manga = Manga(self.body, width=907, height=1200, scrollregion=(0, 0, 900, 1300), driver=self.driver) # Make labels and place them inside the window manga_label = Label(self.lefthead, text="Enter your manga title", font=(22)) chapter_label = Label(self.righthead, text="Pick your chapter", font=(14)) page_label = Label(self.prighthead, text="Page :", font=(14)) manga_label.pack() chapter_label.pack() # Make boxes as Manga's attribute and place them inside the window self.manga.manga_box = Combobox(self.lefthead, width=50) self.manga.chapter_box = Combobox(self.righthead, width=50, state='readonly') self.manga.page_box = Combobox(self.prighthead, width=10, state='readonly') self.manga.manga_box.pack() self.manga.chapter_box.pack() page_label.pack(side=LEFT) self.manga.page_box.pack(side=RIGHT) # Make buttons and place them inside the window left_button = Button(self.footer, text="<-", command=self.prev_page, width=51, font=(16)) right_button = Button(self.footer, text="->", command=self.next_page, width=51, font=(16)) search_button = Button(self.lefthead, text="Search", command=self.update_manga_list) left_button.pack(side=LEFT) right_button.pack(side=RIGHT) search_button.pack() # Make a scrollbar for the canvas and pack the canvas scrollbar = Scrollbar(self.body, orient=VERTICAL) self.manga.config(yscrollcommand=scrollbar.set) self.manga.pack(side=LEFT) # Create a title screen image and show it in the canvas img = ImageTk.PhotoImage(file="mangareadex.png") self.manga.image = self.manga.create_image(450, 650, image=img) self.manga.img = img # Pack the scrollbar scrollbar.config(command=self.manga.yview) scrollbar.pack(side=RIGHT, fill=Y) # Make the controls self.controller() def controller(self): '''make the necessary keyboard and mouse controls''' # Bind the boxes to get elements self.manga.manga_box.bind('<Return>', self.update_manga_list) self.manga.manga_box.bind('<<ComboboxSelected>>', self.update_chapter_list) self.manga.chapter_box.bind('<<ComboboxSelected>>', self.update_page_list) self.manga.page_box.bind('<<ComboboxSelected>>', self.jump_to) # Bind the mouse controls self.root.bind('<MouseWheel>', self.mousewheel) self.manga.bind('<Button-1>', self.click) # Bind the keyboard controls self.root.bind('<Right>', self.next_page) self.root.bind('<Left>', self.prev_page) self.root.bind('<Up>', self.scroll_up) self.root.bind('<Down>', self.scroll_down) def mousewheel(self, event): '''event for mousewheel scroll''' self.manga.yview_scroll(-1 * (int(event.delta / 120)), 'units') def scroll_up(self, event): '''event for keyboard press up''' self.manga.yview_scroll(-1, 'units') def scroll_down(self, event): '''event for keyboard press down''' self.manga.yview_scroll(1, 'units') def update_manga_list(self, event=None): # Call find_manga in manga object and populate box self.title_dir = self.manga.find_manga(self.manga.manga_box.get()) self.manga.manga_box['values'] = [ title for title in self.title_dir.keys() ] def update_chapter_list(self, event): # Clear chapter and page box self.manga.chapter_box.set('') self.manga.page_box.set('') self.manga.page_box['values'] = [] title = self.manga.manga_box.get() href = self.title_dir[title] # Call find_chapter in manga object and populate the box self.chapter_dir = self.manga.find_chapter(href) self.manga.chapter_box['values'] = [ chapter for chapter in self.chapter_dir.keys() ] def update_page_list(self, event): # Set the page to be the first page self.manga.current_page = 1 self.manga.page_box.set(1) chapter = self.manga.chapter_box.get() cha_list = [chapter for chapter in self.chapter_dir.keys()] self.manga.current_chapter = cha_list.index(chapter) id = self.chapter_dir[chapter] # Call find_image in manga object and populate the box self.page_dir = self.manga.find_image(id) self.manga.page_box['values'] = [num for num in self.page_dir.keys()] def click(self, event): '''event for click on the page''' if int(event.x) < 465: self.prev_page() else: self.next_page() def next_page(self, event=None): '''event for keyboard press right''' try: self.manga.change_page(1) except Exception: pass def prev_page(self, event=None): '''event for keyboard press left''' try: self.manga.change_page(-1) except Exception: pass def jump_to(self, event): '''event for changing page via the page_box''' page = self.manga.page_box.get() self.manga.current_page = int(page) self.manga.change_image() def mainloop(self): # If you close the gui window self.root.protocol("WM_DELETE_WINDOW", self.quit) self.root.mainloop() def quit(self): # Destroy the driver and the root self.root.destroy() self.driver.quit()
class addexpense: def __init__(self): self.window = Tk() self.mainframe = Frame(self.window) self.instructionL = Label(self.mainframe, text="Please fill in the fields\nwith appropriate values. ") self.dateL = Label(self.mainframe, text="Date: ") self.electricityL = Label(self.mainframe, text="Electricity: ") self.gasL = Label(self.mainframe, text="Gas: ") self.waterL = Label(self.mainframe, text="Water: ") self.salaryL = Label(self.mainframe, text="Salary: ") self.rentL = Label(self.mainframe, text="Rent: ") self.costofgoodL = Label(self.mainframe, text="Cost of Goods: ") self.dateI = Entry(self.mainframe) self.electricityI = Entry(self.mainframe) self.gasI = Entry(self.mainframe) self.waterI = Entry(self.mainframe) self.salaryI = Entry(self.mainframe) self.rentI = Entry(self.mainframe) self.costofgoodI = Entry(self.mainframe) self.okayB = Button(self.mainframe, text="OKAY") self.cancelB = Button(self.mainframe, text="CANCEL", command=self.cancel) self.mainframe.grid(row = 0, column = 0, columnspan = 2, sticky = W + E + N +S) self.mainframe.propagate(0) self.instructionL.grid(row = 0, column = 0, columnspan = 2) self.dateL.grid(row = 1, column = 0) self.electricityL.grid(row = 2, column = 0) self.gasL.grid(row = 3, column = 0) self.waterL.grid(row = 4, column = 0) self.salaryL.grid(row = 5, column = 0) self.rentL.grid(row = 6, column = 0) self.costofgoodL.grid(row = 7, column = 0) self.dateI.grid(row=1, column=1) self.electricityI.grid(row=2, column=1) self.gasI.grid(row=3, column=1) self.waterI.grid(row=4, column=1) self.salaryI.grid(row=5, column=1) self.rentI.grid(row=6, column=1) self.costofgoodI.grid(row=7, column=1) self.okayB.grid(row = 8, column = 0) self.okayB.bind("<Button-1>", self.okayE) self.cancelB.grid(row = 8, column = 1) def cancel(self): self.window.destroy() # Date, Electricity, Gas, Water, Salary, Rent, CostofGood def okayE(self, event): info = [] date = self.dateI.get() electricity = self.electricityI.get() gas=self.gasI.get() water=self.waterI.get() salary=self.salaryI.get() rent=self.rentI.get() costofgood=self.costofgoodI.get() try: info.append(date) info.append(electricity) info.append(gas) info.append(water) info.append(salary) info.append(rent) info.append(costofgood) expense = tuple(info) QF.addExpense(expense) self.window.destroy() except: messagebox.showerror("Error", "Something is Wrong\nExpenses must be nonnegative numbers!\nCheck your input!") self.window.destroy()
def __init__(self, parent): Frame.__init__(self, parent) self.parent = parent self.initialize()
class AutoUploadPage(tk.Frame): # 继承Frame类 def __init__(self, parent, controller): tk.Frame.__init__(self, parent) self.controller = controller # 存储任务列表 self.task_dict = {} self.task_list = [] self.onduty_list = [] self.qb = '' self.is_rss_mode = False self.t = 'Recorde_rss' self.refresh_t = 'Recorde_task_list' # 布局组件的定义 self.var_link = StringVar() self.entry_link = tk.Entry(self, textvariable=self.var_link, width=58, borderwidth=3, font=('Helvetica', '12')) self.entry_link.bind('<Return>', self.enter_add) self.button_add = tk.Button(self, text='Add', font=('Helvetica', '12'), width=6, command=self.add_task_by_click) self.frame_m = Frame(self) self.scrollBar = Scrollbar(self.frame_m) self.tree = Treeview(self.frame_m, columns=('c1', 'c2', 'c3'), show="headings", yscrollcommand=self.scrollBar.set) self.btnDelete = tk.Button(self, text='删除任务', command=self.delete_task) self.btnRefresh = tk.Button(self, text='备份任务', command=self.bak_task) self.rsshandler = get_rss_info.RssLinkHandler() self.config_dl = self.controller.config_dl self.create_page() def create_page(self): # 添加种子部分 # LEFT self.entry_link.place(x=30, y=30, width=600, height=30) self.var_link.set('请输入种子详情链接:') self.entry_link.bind('<FocusIn>', self.on_entry_click) self.entry_link.bind('<FocusOut>', self.on_focus_out) self.entry_link.config(fg='grey') self.button_add.place(x=640, y=28, width=80, height=30) # 管理种子部分 self.frame_m.place(x=28, y=80, width=700, height=450) # 在Frame容器中创建滚动条 self.scrollBar.pack(side=RIGHT, fill=Y) # 在Frame容器中使用Treeview组件实现表格功能 # Treeview组件,三列,显示表头,带垂直滚动条 # 设置每列宽度和对齐方式 self.tree.column('c1', width=400, anchor='w') self.tree.column('c2', width=140, anchor='center') self.tree.column('c3', width=120, anchor='center') # 设置每列表头标题文本 self.tree.heading( 'c1', text='种子链接', command=lambda: self.treeview_sort_column(self.tree, 'c1', False)) self.tree.heading( 'c2', text='添加时间', command=lambda: self.treeview_sort_column(self.tree, 'c2', False)) self.tree.heading( 'c3', text='状态', command=lambda: self.treeview_sort_column(self.tree, 'c3', False)) # 左对齐,纵向填充 self.tree.pack(side=LEFT, fill=Y) self.tree.bind('<Double-1>', self.treeviewclick) # Treeview组件与垂直滚动条结合 self.scrollBar.config(command=self.tree.yview) # 删除按钮 self.btnDelete.place(x=160, y=550, width=120, height=30) # 刷新按钮 self.btnRefresh.place(x=460, y=550, width=120, height=30) def on_entry_click(self, event): """function that gets called whenever entry is clicked""" if self.var_link.get() == '请输入种子详情链接:': self.var_link.set('') # delete all the text in the entry self.entry_link.config(fg='black') def on_focus_out(self, event): if self.var_link.get() == '': self.var_link.set('请输入种子详情链接:') self.entry_link.config(fg='grey') # 添加下载任务 def add_task_by_click(self): detail_link = self.var_link.get() self.add_task_by_link(detail_link) # 重置界面 self.var_link.set('') self.entry_link.config(fg='grey') def all_time_refresh(self): while True: if len(self.onduty_list) == 0: break else: time.sleep(2) self.refresh_task() def enter_add(self, event): self.add_task_by_click() # 删除选中项的按钮 def delete_task(self): if not self.tree.selection(): tk.messagebox.showerror('抱歉', '你还没有选择,不能删除') return for item in self.tree.selection(): detail_link = self.tree.item(item, 'values')[0] statu = self.tree.item(item, 'values')[2] if statu not in ['发布成功', '任务丢失']: chosen_task = self.task_dict[detail_link] hash_info = chosen_task.get_hash_info() if chosen_task.get_statu() != '发布成功' and hash_info: # 判断有没有下载完 torrent = self.qb.get_torrent(infohash=hash_info) if torrent['completion_date'] == -1: self.qb.torrents_delete(hashes=hash_info) try: commen_component.stop_thread(chosen_task) except ValueError: pass except SystemError: pass self.task_dict.pop(detail_link) self.task_list.remove(detail_link) if len(self.onduty_list) == 0: try: commen_component.stop_thread(self.refresh_t) except ValueError: pass except SystemError: pass if detail_link in self.onduty_list: self.onduty_list.remove(detail_link) self.tree.delete(item) # 更新所有种子的下载状态 def refresh_task(self): task_all = self.tree.get_children() for item in task_all: value_link = self.tree.item(item, 'values')[0] value_addtime = self.tree.item(item, 'values')[1] value_statu = self.tree.item(item, 'values')[2] if value_link in self.task_dict.keys(): value_statu_now = self.task_dict[value_link].get_statu() if not value_statu == value_statu_now: self.tree.item(item, values=(value_link, value_addtime, value_statu_now)) if value_statu_now == '发布成功' or value_statu_now == '任务丢失': try: commen_component.stop_thread( self.task_dict[value_link]) except ValueError: pass except SystemError: pass self.onduty_list.remove(value_link) self.task_dict.pop(value_link) if len(self.onduty_list) == 0: try: commen_component.stop_thread(self.refresh_t) except ValueError: pass except SystemError: pass def treeviewclick(self, event): selected_item = self.tree.selection()[0] link = self.tree.item(selected_item, 'values')[0] webbrowser.open(link) def treeview_sort_column(self, tv, col, reverse): # Treeview、列名、排列方式 ll = [(tv.set(k, col), k) for k in tv.get_children('')] ll.sort(reverse=reverse) # 排序方式 for index, (val, k) in enumerate(ll): # 根据排序后索引移动 tv.move(k, '', index) tv.heading(col, command=lambda: self.treeview_sort_column( tv, col, not reverse)) # 重写标题,使之成为再点倒序的标题 # 添加RSS任务 def add_rss_task(self): while True: self.rsshandler.change_refresh_time(self.config_dl['refresh_time']) self.rsshandler.now_time = '' entries_list = self.rsshandler.get_entries( self.config_dl['Max_Size']) for item in entries_list: detail_link = item['link'] if detail_link in self.task_list: continue add_time = datetime.datetime.now().strftime( '%Y/%m/%d %H:%M:%S') values = [detail_link, add_time, '准备下载'] self.tree.insert('', 'end', values=values) new_task = autoseed_methods.AutoSeed(self.qb, item, self.config_dl) new_task.start() self.task_dict[detail_link] = new_task self.task_list.append(detail_link) self.onduty_list.append(detail_link) if len(self.onduty_list) == 1: self.refresh_t = threading.Thread( target=self.all_time_refresh, args=()) self.refresh_t.start() if int(self.config_dl['refresh_time']) == 0: sleep(600) else: sleep(int(self.config_dl['refresh_time']) * 60) # 重新开启RSS def reopen_rss(self): try: commen_component.stop_thread(self.t) except ValueError: pass except SystemError: pass self.t = threading.Thread(target=self.add_rss_task, args=()) self.t.start() self.is_rss_mode = True tk.messagebox.showinfo('提示', 'RSS模式已经重启') def init_qb(self): self.qb = self.controller.qb self.get_bak_task() self.check_rss_mode() # 检查RSS是否开启 def check_rss_mode(self): if self.config_dl['rss_open']: if not self.is_rss_mode: self.t = threading.Thread(target=self.add_rss_task, args=()) self.t.start() self.is_rss_mode = True # tk.messagebox.showinfo('提示', 'RSS模式已经开启') return 'opened' else: return 'opened_already' else: if self.is_rss_mode: try: commen_component.stop_thread(self.t) except ValueError: pass except SystemError: pass # tk.messagebox.showinfo('提示', 'RSS模式已经关闭') self.is_rss_mode = False return 'closed' else: return 'closed_already' # 备份任务 def bak_task(self): self.refresh_task() bak_task = [] # 以列表的形式保存未完成的种子 task_all = self.tree.get_children() for item in task_all: value_link = self.tree.item(item, 'values')[0] value_statu = self.tree.item(item, 'values')[2] if value_statu not in ['发布成功', '任务丢失']: task = self.task_dict[value_link] bak_task.append(task.get_origin_url()) try: commen_component.stop_thread(task) except ValueError: pass except SystemError: pass with open(USER_BAK_TASK_PATH, "wb") as bak_file: # with open with语句可以自动关闭资源 pickle.dump(bak_task, bak_file) def get_bak_task(self): try: with open(USER_BAK_TASK_PATH, "rb") as bak_file: bak_task = pickle.load(bak_file) if not bak_task: return for item in bak_task: if isinstance(item, dict): link = item['link'] else: link = item add_time = datetime.datetime.now().strftime( '%Y/%m/%d %H:%M:%S') values = [link, add_time, '准备下载'] self.tree.insert('', 'end', values=values) new_task = autoseed_methods.AutoSeed( self.qb, item, self.config_dl) self.task_dict[link] = new_task self.onduty_list.append(link) self.task_list.append(link) new_task.start() if len(self.onduty_list) == 1: self.refresh_t = threading.Thread( target=self.all_time_refresh, args=()) self.refresh_t.start() except FileNotFoundError: pass # 添加任务 def add_task_by_link(self, string, *args): detail_link = string # 禁止空或者误操作 if not detail_link or detail_link == '请输入种子详情链接:': return # 禁止重复添加的链接 if detail_link in self.task_list: messagebox.showerror('错误', '重复添加的链接!') return # 禁止不支持的网站 support_sign = commen_component.find_origin_site(detail_link) if support_sign == 0: messagebox.showerror('错误', '不支持的网站!') return torrent_id = commen_component.get_id(detail_link) if torrent_id == -1: messagebox.showerror('错误', '不是种子详情链接!') return # 显示任务到列表 add_time = datetime.datetime.now().strftime( '%Y-%m-%d %H:%M:%S').replace('-', '/') values = [detail_link, add_time, '准备下载'] # 添加到尾部 self.tree.insert('', 'end', values=values) # 添加到首部 # self.tree.insert('', 0, values=values) # 添加任务到后台并开启 # 构造元祖实现远程判断 if args: detail_link_tuple = (args[0], detail_link) else: detail_link_tuple = detail_link new_task = autoseed_methods.AutoSeed(self.qb, detail_link_tuple, self.config_dl) new_task.start() self.task_dict[detail_link] = new_task self.task_list.append(detail_link) self.onduty_list.append(detail_link) if len(self.onduty_list) == 1: self.refresh_t = threading.Thread(target=self.all_time_refresh, args=()) self.refresh_t.start() return '任务已经添加' # 远程获取任务状态 def get_statu_by_link(self, link): task_all = self.tree.get_children() for item in task_all: value_link = self.tree.item(item, 'values')[0] if value_link == link: value_statu = self.tree.item(item, 'values')[2] return value_statu return 'no result' # 远程取消任务 def cancle_task_by_link(self, detail_link): find = False task_all = self.tree.get_children() for item in task_all: link = self.tree.item(item, 'values')[0] if link == detail_link: self.tree.delete(item) find = True break if find: chosen_task = self.task_dict[detail_link] hash_info = chosen_task.get_hash_info() if chosen_task.get_statu() != '发布成功' and hash_info: self.qb.torrents_delete(hashes=hash_info) else: return '任务还未开始或已经完成' try: commen_component.stop_thread(chosen_task) except ValueError: return '未知错误' except SystemError: return '未知错误' self.task_list.remove(detail_link) self.task_dict.pop(detail_link) if detail_link in self.onduty_list: self.onduty_list.remove(detail_link) return '取消成功' else: return '没找到任务' # 关掉RSS def close_rss(self): self.config_dl['rss_open'] = False self.check_rss_mode()
def display(self, parent): locals()[self.MID] = Frame(parent) locals()[self.MID].pack(fill='x') Label(locals()[self.MID], text=self.content).pack(side=LEFT)
def __init__(self, master): self.master = master self.master.title('CONWAY\'S GAME OF LIFE') self.wid = 910 self.hei = 680 smw = self.master.winfo_screenwidth() // 2 smh = self.master.winfo_screenheight() // 2 tplft = (smw - self.wid // 2, smh - self.hei // 2) self.master.geometry(f'{self.wid}x{self.hei}+{tplft[0]}+{tplft[1]}') self.master.resizable(width=False, height=False) # create a main field self.can_width = 800 self.can_height = 640 # variable to continue with right number generation after stop game self.global_gen = None # start self.cell = 1 self.start_cell = 0 self.live = set() # trick for rigth after_cancel self.game_on = (0, 0) # population self.score = 0 # variable for max cells self.max_score = 0 # for change speed self.timer = 15 # cursor for place ships self.cur = None self.invert = None self.on = (0, 0) self.sample = {'1': 10, '2': 5, '4': 3} # erase seeds self.erase = True # images for ships self.glider = PhotoImage(file='data/1_ship.gif') self.glider_in = PhotoImage(file='data/1_ship_in.gif') self.lss = PhotoImage(file='data/2_lss.gif') self.lss_in = PhotoImage(file='data/2_lss_in.gif') self.sui = PhotoImage(file='data/3_sucide.gif') self.sui_in = PhotoImage(file='data/3_sucide_in.gif') self.f5 = PhotoImage(file='data/4_f5.gif') self.f5_in = PhotoImage(file='data/4_f5_in.gif') self.penta = PhotoImage(file='data/5_penta.gif') self.penta_in = PhotoImage(file='data/5_penta_in.gif') self.patern = PhotoImage(file='data/6_patern.gif') self.patern_in = PhotoImage(file='data/6_patern_in.gif') self.fireship = PhotoImage(file='data/7_fireship.gif') self.fireship_in = PhotoImage(file='data/7_fireship_in.gif') # GUI frameWin = Frame(master, bg='white', borderwidth=0) frameWin.pack(side=TOP, fill=BOTH) frameCanv = Frame(frameWin, bg='white', borderwidth=0) frameCanv.pack(side=RIGHT, fill=BOTH) # main canvas self.window = Canvas(frameCanv, width=self.can_width, height=self.can_height, cursor='plus', bg='white', bd=0, highlightthickness=0) self.window.pack(side=TOP) self.w_field = self.can_width // self.cell self.h_field = self.can_height // self.cell self.cell_matrix = PhotoImage(width=self.can_width, height=self.can_height) hor_line = '{' + ' '.join(['#EEEEEE'] * self.can_width) + '}' self.cell_matrix.put(' '.join([hor_line] * self.can_height)) # make copy self.original = self.cell_matrix.copy() self.cell_img = self.window.create_image(0, 0, image=self.cell_matrix, anchor=NW) # side menu for images frameBorderCr = Frame(frameWin, bg='white', bd=3) frameBorderCr.pack(side=LEFT, fill=BOTH) mes_creat = Label(frameBorderCr, text='CREATURE', height=2, bg='white') mes_creat.pack(side=TOP, fill=X) frameCreat = Frame(frameBorderCr, bg='gray', bd=2) frameCreat.pack(side=TOP, fill=BOTH) self.creat = Canvas(frameCreat, height=596, bg='white', highlightthickness=0) self.creat.pack(side=TOP, expand=YES, fill=Y) # images for ships self.creat.create_image(48, 25, image=self.glider) self.creat.create_image(48, 73, image=self.lss) self.creat.create_image(48, 126, image=self.sui) self.creat.create_image(48, 175, image=self.f5) self.creat.create_image(48, 256, image=self.penta) self.creat.create_image(48, 349, image=self.patern) self.creat.create_image(49, 485, image=self.fireship) # menu for counters frameMB = Frame(frameCanv, bg='white', borderwidth=0) frameMB.pack(side=BOTTOM, fill=BOTH) message = Label(frameMB, text='SQUARE UNIVERSUM ', height=2, bg='white') message.pack(side=LEFT, fill=X) # cell part frameBor1 = Frame(frameMB, bg='gray', borderwidth=2) frameBor1.pack(side=LEFT) name_pop = Label(frameBor1, text='CELL') name_pop.pack(side=LEFT) self.scrPop = Label(frameBor1, text=0, width=7) self.scrPop.pack(side=RIGHT) # separator sep = Frame(frameMB, width=4) sep.pack(side=LEFT) # cycle part frameBor2 = Frame(frameMB, bg='gray', borderwidth=2) frameBor2.pack(side=LEFT) name_gen = Label(frameBor2, text='CYCLE') name_gen.pack(side=LEFT) self.scrGen = Label(frameBor2, text=0, width=6) self.scrGen.pack(side=RIGHT) # buttons self.button_Start = Button(frameMB, text='START', width=6, command=self.start_game) self.button_Start.pack(side=RIGHT, padx=3) self.button_Stop = Button(frameMB, text='STOP', width=6, command=self.stop_game) self.button_Stop.pack(side=RIGHT, padx=3) self.button_Clear = Button(frameMB, text='CLEAR', width=6, command=self.clear) self.button_Clear.pack(side=RIGHT, padx=3) blockSpeed = Frame(frameMB, padx=25) blockSpeed.pack(side=RIGHT) button_Fast = Button(blockSpeed, text='>>', width=3, command=self.fast) button_Fast.pack(side=RIGHT, padx=3) butSpeedFrame = Frame(blockSpeed, bg='gray', bd=2) butSpeedFrame.pack(side=RIGHT) self.speedVal = Label(butSpeedFrame, text=int(self.timer), width=3) self.speedVal.pack(side=RIGHT) button_Slow = Button(blockSpeed, text='<<', width=3, command=self.slow) button_Slow.pack(side=RIGHT, padx=3) self.window.bind('<B1-Motion>', self.motion_paint) self.window.bind('<ButtonPress-1>', self.start_paint) self.window.bind('<ButtonPress-2>', self.clear_side_menu) self.window.bind('<Leave>', self.clear_side_menu) self.creat.bind('<ButtonPress-1>', self.creatures) self.master.mainloop()
def process_file(content): df = content df['Time'] = pd.to_datetime(df['Time'], format = '%m/%d/%Y %H:%M:%S') df['Time2'] = df['Time'].where(df['Device'].str.contains('Turnstile Out')).shift(-1) df['TimeDiff'] = (df['Time'] - df['Time2']).astype('timedelta64[h]') df = df.set_index("Device") df = df.drop("Turnstile Out", axis = 0) df.to_csv('output5.csv', columns = ['Personnel Record','Time','Time2','TimeDiff', 'Credential']) # GUI root = tk.Tk() root.title('CSV Reformatter') root.geometry("550x120+250+100") mf = Frame(root) mf.pack() f1 = Frame(mf, width = 500, height = 250) f1.pack(fill = X) f2 = Frame(mf, width = 500, height = 250) f2.pack() filepath = StringVar Label(f1,text = "Select a .csv file").grid(row = 0, column = 0, sticky = 'e') entry = Entry(f1, width = 50, textvariable = filepath) entry.grid(row = 0, column = 1, padx = 2, pady = 2, sticky = 'we', columnspan = 25) Button(f1, text = "Browse", command = open_file).grid(row = 0, column = 27, sticky = 'ew', padx = 8, pady = 4)
sitename = StringVar() #root.geometry("1366x768") root.configure(background='white') app_width = 1366 app_height = 768 win_width = root.winfo_screenwidth() win_height = root.winfo_screenheight() x = (win_width / 2) - (app_width / 2) y = (win_height / 2) - (app_height / 2) root.geometry(f"{app_width}x{app_height}+{int(x)}+{int(y)}") my_frm_format = Frame(root, background="#f7f7f7") my_frm_format.pack(anchor=NW, fill=X) lab = Label(my_frm_format, text="Enter Website link (eg : https://www.example.com/):", font=("Consolas", 15)).pack(side=LEFT, padx=5) ent = Entry(my_frm_format, width=35, borderwidth=1, textvariable=sitename, font=("Consolas", 13)) ent.insert(0, 'https://www.') ent.pack(side=LEFT, padx=5, pady=5, ipady=5) gen_cod = Button(my_frm_format, text="Generate Code",
btn_repeat.pack(side='left', expand=True) def repeat_game(event): # Remove previous dice empty_frame(frm_dice) return start_game(event) def exit_game(event): root.destroy() # ===== Widgets ===== # # 1. Header frm_header = Frame(master=root) frm_header.configure(background='#212529') frm_header.pack() # 1.1 Dice number frm_dice_num = Frame(master=frm_header, pady=10) frm_dice_num.configure(background='#212529') frm_dice_num.pack() lbl_dice_num = Label(master=frm_dice_num, text='Number of dice (1-3)', padx=15) lbl_dice_num.config(font=('Comic Sans MS', 13)) lbl_dice_num.configure(background='#212529', foreground='#fff') lbl_dice_num.pack(side='left') register = root.register(validation) ent_dice_num = Entry(master=frm_dice_num,
def __init__(self, master, bg=globals.BOARD_COLOR.get(), *args, **kwargs): Frame.__init__(self, master, bg=bg, *args, **kwargs) globals.events.setting_change += lambda: self.config(bg=globals.BOARD_COLOR.get())
def __init__(self, master=None): Frame.__init__(self, master) self.master = master self.master.title("Conver Table Automation") ###################################################################################################### self.config_file_PATH_label = Label(self.master, text="Config file path") self.config_file_PATH_label.grid(row=0, column=0, sticky=W, pady=2) self.config_file_PATH_txt = Text(self.master, heigh=1, width=35) self.config_file_PATH_txt.grid(row=0, column=1, pady=2) self.log_file_PATH_label = Label(self.master, text="Log files dir") self.log_file_PATH_label.grid(row=1, column=0, sticky=W, pady=2) self.log_file_PATH_txt = Text(self.master, heigh=1, width=35) self.log_file_PATH_txt.grid(row=1, column=1, pady=2) self.qcat_input_label = Label(self.master, text='') self.log_type_label = Label(self.master, text="Information") self.log_type_label.grid(row=2, column=0, sticky=W) self.log_type_txt = ScrolledText(self.master, undo=True, width=55) self.log_type_txt.grid(row=3, rowspan=4, column=0, columnspan=3, sticky=W) self.csv_dir_label = Label(self.master, text="CSV directory") self.csv_dir_label.grid(row=8, column=0, sticky=W) self.csv_dir_txt = Text(self.master, heigh=1, width=35) self.csv_dir_txt.grid(row=8, column=0, columnspan=3, padx=80, sticky=W) ###################################################################################################### self.convert_csv_button = Button(self.master, text='Convert to csv', command=self.call_convert_csv) self.convert_csv_button.grid(row=8, column=1, columnspan=2, sticky=E, pady=2, padx=3) self.convert_csv_button.config(width=11, heigh=2) self.extract_config_button = Button(self.master, text="Extract", command=self.call_extract) self.extract_config_button.grid(row=0, column=2, sticky=E, padx=4) # self.view_log_button = Button(self.master, text = "View") # self.view_log_button.grid(row=1, column=2, sticky=E, padx=4) ############################################################################### # creating a menu instance self.menu = Menu(self.master) self.master.config(menu=self.menu) # create the file object) self.file = Menu(self.menu) # adds a command to the menu option, calling it exit, and the # command it runs on event is client_exit # self.file.add_command(label="QCAT Automation", command = self.openQCAT) self.file.add_command(label="Open Config", command=self.open_config) self.file.add_command(label="Choose Log Files", command=self.open_log) self.file.add_command(label="Set CSV Directory", command=self.set_csv_directory) self.file.add_command(label="Exit", command=self.client_exit) self.menu.add_cascade(label="File", menu=self.file) # menu.add_cascade(label="Open config", menu=file) self.edit = Menu(self.menu) self.menu.add_cascade(label="Edit", menu=self.edit) self.help = Menu(self.menu) self.help.add_command(label="About", command=self.show_about) self.help.add_command(label="Instruction", command=self.show_instruction) self.menu.add_cascade(label="Help", menu=self.help)
class tools_bar(): def __init__(self, pl, main_pach, ax=0, ay=0): self.__place = pl self.__1_place = Frame(self.__place, bd=1) self.__2_place = Frame(self.__place, bd=1) self.__3_place = Frame(self.__place, bd=1) self.__icon_patch = main_pach + '/icons/' self.__ax_start = ax self.__ay_start = ay class sub_menu(): li_obj = [] def __init__(self, pl, pos_ax, pos_ay, ic_pach): self.s_plase = pl self.s_ax = pos_ax self.s_ay = pos_ay self.ico_pach = ic_pach def factory_objects( self, name, ax, ay, len_ax, len_ay, i_0, i_1, i_2, func, *a_key, **k_key, ): ob = {} ob['name'] = name ob['ax'] = self.s_ax + ax ob['ay'] = self.s_ay + ay ob['len_ax'] = len_ax ob['len_ay'] = len_ay ob['icon_0'] = ImageTk.PhotoImage(file=self.ico_pach + i_0 + '.png') ob['icon_1'] = ImageTk.PhotoImage(file=self.ico_pach + i_1 + '.png') ob['icon_2'] = ImageTk.PhotoImage(file=self.ico_pach + i_2 + '.png') ob['func_b1'] = func for x in range(len(a_key)): ob['a_key_' + str(x)] = a_key[x] for x in k_key: ob[x] = k_key[x] return ob def build(self, ): for x in self.li_obj: bit = Label(self.s_plase, image=x['icon_0']) bit.grid( row=x['ax'], column=x['ay'], rowspan=x['len_ax'], columnspan=x['len_ay'], ) bit.bind('<Button-1>', x['func_b1']) x['status'] = 0 x['object'] = bit def create(self, ): pass def get(self, ): dict_par = {} for in_obj in self.li_obj: get_par = {} if in_obj['type_obj'] == 'button': get_par['status'] = in_obj['status'] elif in_obj['type_obj'] == 'boxplot': get_par['status'] = in_obj['status'] get_par['znach'] = in_obj['list'][in_obj['status']] elif in_obj['type_obj'] == 'textplot': get_par['status'] = in_obj['object'].get(1.0, 'end') get_par['znach'] = in_obj['object'].get(1.0, 'end') dict_par[in_obj['name']] = get_par return dict_par def set(self, dict_par): for in_obj in self.li_obj: for key in dict_par: if in_obj['name'] == key: if in_obj['type_obj'] == 'button': if in_obj['status'] != dict_par[key]['status']: in_obj['func_b1']() elif in_obj['type_obj'] == 'boxplot': if in_obj['status'] != dict_par[key]['status']: in_obj['func_b1']( status=dict_par[key]['status']) elif in_obj['type_obj'] == 'textplot': if in_obj['status'] != dict_par[key]['status']: in_obj['object'].delete(1.0, 'end') in_obj['object'].insert( 1.0, dict_par[key]['status']) class borders(sub_menu): def create(self, ): up = self.factory_objects(name='b_up', ax=0, ay=1, len_ax=1, len_ay=1, i_0='up_border_null', i_1='up_border_solid', i_2='up_border_solid', func=self.f_bord_up, type_obj='button') all = self.factory_objects(name='b_all', ax=0, ay=2, len_ax=1, len_ay=1, i_0='all_border_null', i_1='all_border_solid', i_2='all_border_solid', func=self.f_bord_all, type_obj='button') left = self.factory_objects(name='b_left', ax=1, ay=0, len_ax=1, len_ay=1, i_0='left_border_null', i_1='left_border_solid', i_2='left_border_solid', func=self.f_bord_left, type_obj='button') down = self.factory_objects(name='b_down', ax=1, ay=1, len_ax=1, len_ay=1, i_0='down_border_null', i_1='down_border_solid', i_2='down_border_solid', func=self.f_bord_down, type_obj='button') right = self.factory_objects(name='b_right', ax=1, ay=2, len_ax=1, len_ay=1, i_0='right_border_null', i_1='right_border_solid', i_2='right_border_solid', func=self.f_bord_right, type_obj='button') self.li_obj = [ up, left, down, right, all, ] def __chec_all(self, ): df = True for v in self.li_obj: if v['name'] != 'b_all': if v['status'] != 1: df = False if df == True: self.__all_stat('b_all', tf=1) def __all_stat(self, name, tf): for b in self.li_obj: if b['name'] == name: b['status'] = tf if b['status'] == 0: b['object'].configure(image=b['icon_0']) elif b['status'] == 1: b['object'].configure(image=b['icon_1']) def __solo_status(self, ob_name): for x in self.li_obj: if x['name'] == ob_name: if ob_name == 'b_all': if x['status'] == 0: x['status'] = 1 x['object'].configure(image=x['icon_1']) elif x['status'] == 1: x['status'] = 0 x['object'].configure(image=x['icon_0']) for n in self.li_obj: if n['name'] != 'b_all': self.__all_stat(n['name'], x['status']) else: if x['status'] == 0: x['status'] = 1 x['object'].configure(image=x['icon_1']) self.__chec_all() elif x['status'] == 1: x['status'] = 0 x['object'].configure(image=x['icon_0']) self.__all_stat('b_all', 0) def f_bord_up(self, *key): self.__solo_status('b_up') def f_bord_left(self, *key): self.__solo_status('b_left') def f_bord_right(self, *key): self.__solo_status('b_right') def f_bord_down(self, *key): self.__solo_status('b_down') def f_bord_all(self, *key): self.__solo_status('b_all') class join(sub_menu): def create(self, ): up = self.factory_objects(name='j_up', ax=0, ay=1, len_ax=1, len_ay=1, i_0='up', i_1='up', i_2='up', func=self.f_join_up, type_obj='button') left = self.factory_objects(name='j_left', ax=1, ay=0, len_ax=1, len_ay=1, i_0='left', i_1='left', i_2='left', func=self.f_join_left, type_obj='button') down = self.factory_objects(name='j_down', ax=1, ay=1, len_ax=1, len_ay=1, i_0='down', i_1='down', i_2='down', func=self.f_join_down, type_obj='button') right = self.factory_objects(name='j_right', ax=1, ay=2, len_ax=1, len_ay=1, i_0='right', i_1='right', i_2='right', func=self.f_join_right, type_obj='button') self.li_obj = [ up, left, down, right, ] def f_join_left(self, *key): print('test Button left') def f_join_right(self, *key): print('test Button right') def f_join_up(self, *key): print('test Button up') def f_join_down(self, *key): print('test Button down') class text_v(sub_menu): def create(self, ): top = self.factory_objects(name='v_top', ax=0, ay=0, len_ax=1, len_ay=1, i_0='top_text_ax1', i_1='top_text_ax1_select', i_2='top_text_ax1_select', func=self.f_text_v_top, type_obj='button') centr = self.factory_objects(name='v_centr', ax=0, ay=1, len_ax=1, len_ay=1, i_0='centre_text_ax1', i_1='centre_text_ax1_select', i_2='centre_text_ax1_select', func=self.f_text_v_centr, type_obj='button') bottom = self.factory_objects(name='v_bottom', ax=0, ay=2, len_ax=1, len_ay=1, i_0='bottom_text_ax1', i_1='bottom_text_ax1_select', i_2='bottom_text_ax1_select', func=self.f_text_v_bottom, type_obj='button') self.li_obj = [top, centr, bottom] def __set_status(self, name, st): for b in self.li_obj: if b['name'] != name: b['status'] = st if st == 0: b['object'].configure(image=b['icon_0']) elif st == 1: b['object'].configure(image=b['icon_1']) def __event(self, name): for x in self.li_obj: if x['name'] == name: if x['status'] == 0: x['status'] = 1 x['object'].configure(image=x['icon_1']) self.__set_status(name, 0) elif x['status'] == 1: x['status'] = 0 x['object'].configure(image=x['icon_0']) def f_text_v_top(self, *key): self.__event('v_top') def f_text_v_centr(self, *key): self.__event('v_centr') def f_text_v_bottom(self, *key): self.__event('v_bottom') class text_h(sub_menu): def create(self, ): left = self.factory_objects(name='h_left', ax=0, ay=0, len_ax=1, len_ay=1, i_0='left_text_ax0', i_1='left_text_ax0_select', i_2='left_text_ax0_select', func=self.f_text_h_left, type_obj='button') centr = self.factory_objects(name='h_centr', ax=0, ay=1, len_ax=1, len_ay=1, i_0='centre_text_ax0', i_1='centre_text_ax0_select', i_2='centre_text_ax0_select', func=self.f_text_h_centr, type_obj='button') right = self.factory_objects(name='h_right', ax=0, ay=2, len_ax=1, len_ay=1, i_0='right_text_ax0', i_1='right_text_ax0_select', i_2='right_text_ax0_select', func=self.f_text_h_right, type_obj='button') self.li_obj = [left, centr, right] def __set_status(self, name, st): for b in self.li_obj: if b['name'] != name: b['status'] = st if st == 0: b['object'].configure(image=b['icon_0']) elif st == 1: b['object'].configure(image=b['icon_1']) def __event(self, name): for x in self.li_obj: if x['name'] == name: if x['status'] == 0: x['status'] = 1 x['object'].configure(image=x['icon_1']) self.__set_status(name, 0) elif x['status'] == 1: x['status'] = 0 x['object'].configure(image=x['icon_0']) def f_text_h_left(self, *key): self.__event('h_left') def f_text_h_centr(self, *key): self.__event('h_centr') def f_text_h_right(self, *key): self.__event('h_right') class cb_sub_menu(sub_menu): def __init__(self, pl, pos_ax, pos_ay): self.s_plase = pl self.s_ax = pos_ax self.s_ay = pos_ay self.cl_list = (("Черный", 'black'), ("Белый", 'white'), ('Красный', 'red'), ("Оранжевый", 'orange'), ("Желтый", 'yellow'), ("Зеленый", 'green'), ("Фиолетовый", 'purple')) self.colors = [ "Черный", "Белый", 'Красный', "Оранжевый", "Желтый", "Зеленый", "Фиолетовый" ] self.style = ttk.Style() self.style.theme_use('alt') self.style.map('prim-second.TCombobox', fieldbackground=[('readonly', 'white')]) self.style.map('prim-second.TCombobox', foreground=[('readonly', 'black')]) self.style.map('main.TCombobox', fieldbackground=[('readonly', 'white')]) self.style.map('main.TCombobox', foreground=[('readonly', 'black')]) def factory_objects( self, name, lists, stat, witch, ax, ay, len_ax, len_ay, func, styles, *a_key, **k_key, ): ob = {} ob['name'] = name ob['list'] = lists ob['status'] = stat ob['witch'] = witch ob['ax'] = self.s_ax + ax ob['ay'] = self.s_ay + ay ob['len_ax'] = len_ax ob['len_ay'] = len_ay ob['func_b1'] = func ob['styl'] = styles for x in range(len(a_key)): ob['a_key_' + str(x)] = a_key[x] for x in k_key: ob[x] = k_key[x] return ob def build(self, ): for x in self.li_obj: bit = ttk.Combobox(self.s_plase, values=x['list'], style=x['styl'], width=x['witch']) bit.set(x['list'][x['status']]) bit.grid( row=x['ax'], column=x['ay'], rowspan=x['len_ax'], columnspan=x['len_ay'], ) bit['state'] = 'readonly' bit.bind('<<ComboboxSelected>>', x['func_b1']) x['object'] = bit def create(self, ): self.text_c = self.factory_objects(name='text_c', lists=self.colors, stat=0, witch=10, ax=0, ay=0, len_ax=1, len_ay=2, func=self.f_text_colors, styles='prim-second.TCombobox', type_obj='boxplot') self.fone_c = self.factory_objects(name='fone_c', lists=self.colors, stat=1, witch=10, ax=0, ay=2, len_ax=1, len_ay=2, func=self.f_fone_colors, styles='prim-second.TCombobox', type_obj='boxplot') self.fronts = self.factory_objects(name='fronts', lists=[ 'arial', 'time', ], stat=0, witch=15, ax=0, ay=4, len_ax=1, len_ay=3, func=self.f_fronts, styles='main.TCombobox', type_obj='boxplot') self.text_s = self.factory_objects( name='text_s', lists=[x for x in range(8, 25, 2)], stat=3, witch=5, ax=0, ay=7, len_ax=1, len_ay=2, func=self.f_text_s, styles='main.TCombobox', type_obj='boxplot') self.li_obj = [self.text_c, self.fone_c, self.fronts, self.text_s] def __set_style(self, type, color): if type == 'txt': self.style.map('prim-second.TCombobox', foreground=[('readonly', color)]) elif type == 'ground': self.style.map('prim-second.TCombobox', fieldbackground=[('readonly', color)]) def f_text_colors(self, *arg, **kvar): if 'status' in kvar: self.text_c['status'] = kvar['status'] self.text_c['object'].set( self.text_c['list'][self.text_c['status']]) self.__set_style('txt', self.cl_list[self.text_c['object'].current()][1]) def f_fone_colors(self, *arg, **kvar): if 'status' in kvar: self.fone_c['status'] = kvar['status'] self.fone_c['object'].set( self.fone_c['list'][self.fone_c['status']]) self.__set_style('ground', self.cl_list[self.fone_c['object'].current()][1]) def f_fronts(self, *arg, **kvar): if 'status' in kvar: self.fronts['status'] = kvar['status'] self.fronts['object'].set( self.fronts['list'][self.fronts['status']]) print(self.fronts['object'].get()) def f_text_s(self, *arg, **kvar): if 'status' in kvar: self.text_s['status'] = kvar['status'] self.text_s['object'].set( self.text_s['list'][self.text_s['status']]) print(self.text_s['object'].get()) class txt_sub_menu(sub_menu): def __init__(self, pl, pos_ax, pos_ay): self.s_plase = pl self.s_ax = pos_ax self.s_ay = pos_ay def factory_objects( self, name, witch, height, ax, ay, len_ax, len_ay, *a_key, **k_key, ): ob = {} ob['name'] = name ob['witch'] = witch ob['height'] = height ob['ax'] = self.s_ax + ax ob['ay'] = self.s_ay + ay ob['len_ax'] = len_ax ob['len_ay'] = len_ay for x in range(len(a_key)): ob['a_key_' + str(x)] = a_key[x] for x in k_key: ob[x] = k_key[x] return ob def build(self, ): for x in self.li_obj: bit = Text(self.s_plase, width=x['witch'], height=x['height'], wrap='none') bit.grid( row=x['ax'], column=x['ay'], rowspan=x['len_ax'], columnspan=x['len_ay'], ) bit.see('end') x['object'] = bit def create(self, ): self.text_in = self.factory_objects(name='text_in', witch=40, height=1, ax=0, ay=0, len_ax=1, len_ay=2, type_obj='textplot', status='') self.li_obj = [self.text_in] def init(self, ): self._bord = self.borders( pl=self.__1_place, ic_pach=self.__icon_patch, pos_ax=self.__ax_start + 0, pos_ay=self.__ay_start + 0, ) self._t_ax1 = self.text_v( pl=self.__1_place, ic_pach=self.__icon_patch, pos_ax=self.__ax_start + 0, pos_ay=self.__ay_start + 3, ) self._t_ax0 = self.text_h( pl=self.__1_place, ic_pach=self.__icon_patch, pos_ax=self.__ax_start + 1, pos_ay=self.__ay_start + 3, ) self._joy = self.join( pl=self.__1_place, ic_pach=self.__icon_patch, pos_ax=self.__ax_start + 0, pos_ay=self.__ay_start + 6, ) self._combox = self.cb_sub_menu( pl=self.__2_place, pos_ax=self.__ax_start + 0, pos_ay=self.__ay_start + 0, ) self._txt_plot = self.txt_sub_menu( pl=self.__3_place, pos_ax=self.__ax_start + 0, pos_ay=self.__ay_start + 0, ) self.list_sub_menu = [ self._bord, self._t_ax1, self._t_ax0, self._joy, self._combox, self._txt_plot ] def creates(self, ): for count in self.list_sub_menu: count.create() def builds(self, ): for count in self.list_sub_menu: count.build() self.__1_place.grid(row=0, column=0, sticky="w") self.__2_place.grid(row=1, column=0, sticky="w") self.__3_place.grid(row=2, column=0, sticky="w") def gets(self, ): ans = {} for count in self.list_sub_menu: tmp = count.get() for x in tmp: ans[x] = tmp[x] return ans def sets(self, dic_set): for count in self.list_sub_menu: count.set(dic_set)
def __init__(self, parent): Frame.__init__(self, parent) self.parent = parent self.initUI()
def __init__(self, master): Frame.__init__(self, master) self.master = master self.master.geometry("420x200") self.master.title("Uplink Analysis") self.PwCtrl_file_PATH_label = Label(self.master, text="Power Control File Path") self.PwCtrl_file_PATH_label.grid(row=0, column=0, sticky=W, pady=2) self.PwCtrl_file_PATH_txt = Text(self.master, heigh=1, width=35) self.PwCtrl_file_PATH_txt.grid(row=0, column=1, pady=2) self.DCI_file_PATH_label = Label(self.master, text="DCI File Path") self.DCI_file_PATH_label.grid(row=1, column=0, sticky=W, pady=2) self.DCI_file_PATH_txt = Text(self.master, heigh=1, width=35) self.DCI_file_PATH_txt.grid(row=1, column=1, pady=2) self.TxReport_file_PATH_label = Label(self.master, text="Tx Report File Path") self.TxReport_file_PATH_label.grid(row=2, column=0, sticky=W, pady=2) self.TxReport_file_PATH_txt = Text(self.master, heigh=1, width=35) self.TxReport_file_PATH_txt.grid(row=2, column=1, pady=2) self.PHICH_file_PATH_label = Label(self.master, text="PHICH File Path") self.PHICH_file_PATH_label.grid(row=3, column=0, sticky=W, pady=2) self.PHICH_file_PATH_txt = Text(self.master, heigh=1, width=35) self.PHICH_file_PATH_txt.grid(row=3, column=1, pady=2) self.Output_dir_label = Label(self.master, text="Output directory") self.Output_dir_label.grid(row=4, column=0, sticky=W, pady=2) self.Output_dir_txt = Text(self.master, heigh=1, width=35) self.Output_dir_txt.grid(row=4, column=1, pady=2) # Button config self.merge_button = Button(self.master, text='Merge Table', command=self.call_merge) self.merge_button.config(width=10, heigh=4) self.merge_button.grid(row=5, column=0, columnspan=2, sticky=E) self.menu = Menu(self.master) self.master.config(menu=self.menu) # create the file object) self.file = Menu(self.menu) # adds a command to the menu option, calling it exit, and the # command it runs on event is client_exit self.file.add_command(label="Open Power Control file", command=self.open_PwCtrl) self.file.add_command(label="Open DCI file", command=self.open_DCI) self.file.add_command(label="Open Tx Report file", command=self.open_TxReport) self.file.add_command(label="Open PHICH file", command=self.open_PHICH) self.file.add_command(label="Set oput directory", command=self.set_dir) self.file.add_command(label="Exit", command=self.client_exit) self.menu.add_cascade(label="File", menu=self.file) # menu.add_cascade(label="Open config", menu=file) self.edit = Menu(self.menu) self.menu.add_cascade(label="Edit", menu=self.edit) self.help = Menu(self.menu) self.help.add_command(label="About", command=self.show_about) self.help.add_command(label="Instruction", command=self.show_instruction) self.menu.add_cascade(label="Help", menu=self.help)
def __init__(self, parent): self.aboutWindow = Toplevel(parent) self.aboutWindow.withdraw() self.aboutWindow.geometry('+{x}+{y}'.format(x=parent.winfo_x(), y=parent.winfo_y())) self.aboutWindow.wm_attributes("-topmost", 1) self.aboutWindow.focus_force() self.aboutWindow.iconbitmap("imagefiles/stIcon.ico") self.aboutWindow.title("About") self.aboutWindow.resizable(False, False) self.aboutWindow.grab_set() self.frameTop = Frame(self.aboutWindow) self.aboutImage = PhotoImage(file="imagefiles/stLogo64.png") self.aboutImageLabel = Label(self.frameTop, image=self.aboutImage, cursor="hand2") self.aboutImageLabel.bind( "<Button-1>", lambda x: webbrowser.open('https://www.go1den.com/streamticker', new=2)) self.aboutImageLabel.grid(row=0, column=0, padx=4, pady=4) self.aboutLabel = Label( self.frameTop, text="StreamTicker\n\nVersion 2.0.7\n\nReleased: 5/4/2021", justify=LEFT) self.aboutLabel.grid(row=0, column=1, sticky=W, pady=4) self.frameTop.grid(row=0, column=0, sticky=W) self.aboutSupportLabel = Label( self.aboutWindow, text= "Hello. I'm Go1den. I developed StreamTicker.\nThis program is available to use for free.\nThat being said, I devoted many hours to it.\n\nPlease consider supporting me if you enjoy it:", justify=LEFT) self.aboutSupportLabel.grid(row=1, column=0, sticky=W, padx=4, columnspan=2) self.myPaypalImage = PhotoImage(file="imagefiles/donate.png") self.myPaypalButton = Label(self.aboutWindow, image=self.myPaypalImage, cursor="hand2") self.myPaypalButton.bind( "<Button-1>", lambda x: webbrowser.open( 'https://www.paypal.com/donate/?hosted_button_id=LXMBXT59KL578', new=2)) self.myPaypalButton.grid(row=2, column=0, columnspan=2, pady=4, padx=4) self.aboutThanksLabel = Label( self.aboutWindow, text= "Thank you so much for trying my program!\nIf you enjoy it, please tell others about it.", justify=LEFT) self.aboutThanksLabel.grid(row=3, column=0, sticky=W, pady=4, padx=4) self.okButton = HoverButton(self.aboutWindow, text="OK", width=10, bd=2, relief=GROOVE, command=lambda: self.aboutWindow.destroy()) self.okButton.grid(row=4, column=0, sticky=SE, pady=4) self.aboutWindow.deiconify() self.aboutWindow.mainloop()
from tkinter import Canvas, Tk, Frame, Button, N, W, E, S, messagebox, Entry, StringVar import utilities import time def add_message_to_canvas(): canvas.create_text((100, 50), text=my_name.get(), font=("Purisa", 32)) # 1. Initialize window: gui = Tk() gui.title('Tour of options...') gui.configure(background='hotpink') # 2. Configure layout: mainframe = Frame(gui, bg='#EEEEEE', padx=5, pady=5) mainframe.grid(column=0, row=0, sticky=(N, W, E, S)) gui.rowconfigure(0, weight=1) # row 0 takes up 10% of screen gui.rowconfigure(1, weight=9) # row 1 takes up 90% of screen # 3. Initialize close button: # read about buttons: # https://www.tutorialspoint.com/python3/tk_button.htm my_name = StringVar() Entry(mainframe, textvariable=my_name).grid(column=0, row=0, sticky=E) Button(mainframe, padx=5, pady=5, text='ADD MESSAGE', command=add_message_to_canvas).grid(column=1, row=0, sticky=E)
# fram.config(cursor='hand2') def dos(): # res = MS.askquestion("Pregunta!", ) # Label(window,text=res).pack() fram.grid_remove() fm = LabelFrame(frame, text='Preguntas..', font=('Arial Bold', 14)) fm.grid(row=2, column=2, columnspan=5, pady=10, padx=10) # CadetBlue' window = Tk() window.title("Adivinador") window.geometry('560x320') window.resizable(0, 0) window.config(bg='black', pady=5, padx=5) frame = Frame(window) frame.pack() frame.config(width=500, height=315) title = Label(frame, foreground='black', text='\nSoy EL Adivinador De Medallistas\n OLIMPICOS :D', font=('Arial Bold', 14)) title.grid(row=1, column=4) fram = LabelFrame(frame, text=' Instrucciones', font=('Arial Bold', 14)) fram.grid(row=2, column=2, columnspan=5, pady=10, padx=10) msg = Label( fram, text='Este juego consiste en darle pistas al ente adivinadar para que\n \ logre dar con el medallista en el que estas pensando, puedes salir del juego\n \ presionando la letra "O", bueno empecemos\n',
class App: def __init__(self, master): savefiles.verify_initial_files() # Beginning of the creation of the frames self.main_frame = Frame(master) self.savefiles_frame = Frame(self.main_frame) self.export_and_import_frame = Frame(self.main_frame) self.save_management = Frame(self.main_frame) # The frames are created # Beginning of the frames's configuration self.savefiles_frame.config(borderwidth=4, relief=SUNKEN, padx=15, pady=20) self.export_and_import_frame.config(borderwidth=3, relief=RAISED, padx=20, pady=120) self.save_management.config(borderwidth=3, relief=RAISED, padx=10, pady=10) # Configuration finished # Beginning of the creation of the widgets self.save_list = Listbox(self.savefiles_frame, selectmode=SINGLE, width=70) self.save_list_scrollbar = Scrollbar(self.savefiles_frame) self.save_list.config(yscrollcommand=self.save_list_scrollbar.set) self.save_list_scrollbar.config(command=self.save_list.yview) self.save_list.bind('<<ListboxSelect>>', self.update_entrys) self.button_add = Button(self.save_management, text="Add", command=self.open_add_save_window, width=10) self.button_delete = Button(self.save_management, text="Delete", command=self.delete_element, width=10) self.entry_name = Entry(self.save_management, width=40) self.entry_path = Entry(self.save_management, width=40) self.button_update = Button(self.save_management, text="Update", command=self.update_config, width=10) self.button_find = Button(self.save_management, text="Find", command=self.find_openfolder_path, width=10) self.button_send = Button(self.export_and_import_frame, text="Send Saves", command=self.send_files, width=10) self.button_load = Button(self.export_and_import_frame, text="Import Data", command=self.import_compressed_savedata, width=10) self.button_export = Button(self.export_and_import_frame, text="Export Data", command=self.export_savedata, width=10) self.button_send_to_cloud = Button(self.export_and_import_frame, text="Send to cloud", command=self.send_files_to_cloud, width=13) self.button_get_from_cloud = Button(self.export_and_import_frame, text="get from cloud", command=self.get_files_from_cloud, width=13) # The widgets are created # Beginning of the configuration of the layout self.main_frame.grid(sticky=W) self.savefiles_frame.grid(row=0, column=0, padx=30, pady=(20, 0)) self.export_and_import_frame.grid(row=0, column=1, rowspan=2, padx=(0, 30)) self.save_management.grid(row=1, column=0, sticky=W, padx=30, pady=(10, 20)) self.save_list.pack(side=LEFT) self.save_list_scrollbar.pack(side=RIGHT, fill="y") self.button_add.grid(row=0, column=0, pady=5, sticky=W) self.button_delete.grid(row=1, column=0, sticky=W) self.entry_name.grid(row=0, column=1, padx=(10, 10), sticky=W) self.entry_path.grid(row=1, column=1, padx=(10, 10), sticky=W) self.button_update.grid(row=0, column=2, sticky=W) self.button_find.grid(row=1, column=2, sticky=W) self.button_send.grid(row=0, pady=(0, 10)) self.button_load.grid(row=1, pady=(0, 10)) self.button_export.grid(row=2, pady=(0, 10)) self.button_get_from_cloud.grid(row=3, pady=(0, 10)) self.button_send_to_cloud.grid(row=4) # Layout configured # Beginning of the creation of the MenuBar self.menubar = Menu(master) self.filemenu = Menu(self.menubar, tearoff=0) self.menubar.add_cascade(label="File", menu=self.filemenu) self.filemenu.add_command(label="Import Data", command=self.import_compressed_savedata) self.filemenu.add_command(label="Export Data", command=self.export_savedata) self.filemenu.add_command(label="Exit", command=master.destroy) self.configmenu = Menu(self.menubar, tearoff=0) self.configmenu.add_command(label="Configure dropbox", command=self.open_dropbox_window) self.menubar.add_cascade(label="Configuration", menu=self.configmenu) self.menubar.add_command(label="Exit", command=master.destroy) # MenuBar Created self.add_save_window_is_open = False self.dropbox_window_is_open = False self.last_active = None self.update_save_list() savefiles.update_program_save_folder() def update_save_list(self): self.save_list.delete(0, END) for name in savefiles.read_saveinfo(): self.save_list.insert(END, name) def delete_element(self): saveinfo = savefiles.read_saveinfo() saveinfo.pop(self.save_list.get(ACTIVE)) savefiles.write_saveinfo(saveinfo) self.update_save_list() savefiles.update_program_save_folder() def update_entrys(self, evt): if self.save_list.get(ANCHOR) != "": self.entry_name.delete(0, END) self.entry_name.insert(0, self.save_list.get(ANCHOR)) self.entry_path.delete(0, END) self.entry_path.insert( 0, savefiles.read_saveinfo()[self.save_list.get(ANCHOR)]) self.last_active = self.save_list.get(ANCHOR) def find_openfolder_path(self): openfolder_path = filedialog.askdirectory(initialdir="/", title="Select Save Folder") if openfolder_path != "": self.entry_path.delete(0, END) self.entry_path.insert(0, openfolder_path) def import_compressed_savedata(self): savedatafolder_path = filedialog.askopenfilename( initialdir="./", title="Select Compressed SaveData File", filetypes=(("zip files", "*.zip"), ("all files", "*.*"))) if savedatafolder_path != "": savedata_file = savefiles.Savedata(savedatafolder_path) savedata_file.decompress() self.update_entrys("event") self.update_save_list() savefiles.update_program_save_folder() def export_savedata(self): toexport_location = filedialog.askdirectory( initialdir="./", title="Select Export Location") savedata_file = savefiles.Savedata(toexport_location) savedata_file.compress() def update_config(self): saveinfo = savefiles.read_saveinfo() if self.last_active != None: saveinfo.pop(self.last_active) if self.entry_name.get() != "": saveinfo[self.entry_name.get()] = self.entry_path.get() savefiles.write_saveinfo(saveinfo) self.last_active = self.entry_name.get() self.update_save_list() savefiles.update_program_save_folder() def open_add_save_window(self): def add_save(): if entry_name.get() != "" and entry_path.get() != "": saveinfo = savefiles.read_saveinfo() saveinfo[entry_name.get()] = entry_path.get() savefiles.write_saveinfo(saveinfo) self.update_save_list() savefiles.update_program_save_folder() self.close_add_save_window() else: messagebox.showerror("Empty Entries", "Both entries must be correctly filled") def find_add_window_openfolder_path(): openfolder_path = filedialog.askdirectory( initialdir="/", title="Select Save Folder") if openfolder_path != "": entry_path.delete(0, END) entry_path.insert(0, openfolder_path.replace("/", "\\")) if self.add_save_window_is_open == False: self.add_save_window = Toplevel(self.main_frame) self.add_save_window_is_open = True self.add_save_window.protocol("WM_DELETE_WINDOW", self.close_add_save_window) label_name = Label(self.add_save_window, text="Name") label_path = Label(self.add_save_window, text="Path") entry_name = Entry(self.add_save_window, width=50) entry_path = Entry(self.add_save_window, width=50) frame_buttons = Frame(self.add_save_window) button_add = Button(frame_buttons, command=add_save, text="Add", width=6) button_cancel = Button(frame_buttons, command=self.close_add_save_window, text="Cancel", width=6) button_find = Button(frame_buttons, command=find_add_window_openfolder_path, text="Find", width=6) label_name.grid(row=0, column=0, padx=(10, 5), pady=(17, 3)) label_path.grid(row=1, column=0, pady=(0, 3)) entry_name.grid(row=0, column=1, padx=(0, 20), pady=(17, 3)) entry_path.grid(row=1, column=1, padx=(0, 20), pady=(0, 3)) frame_buttons.grid(row=2, columnspan=2, sticky=W) button_add.grid(row=0, column=0, padx=(10, 0), pady=(7, 9)) button_cancel.grid(row=0, column=1, padx=(10, 0), pady=(7, 9)) button_find.grid(row=0, column=2, padx=(10, 0), pady=(7, 9)) def close_add_save_window(self): self.add_save_window_is_open = False self.add_save_window.destroy() def open_dropbox_window(self): def update_dropbox_config(): if entry_code.get().replace(" ", "") == "": messagebox.showerror("Empty Entries", "You must input a code") return cloud.setupoauth2file(entry_code.get()) if self.dropbox_window_is_open == False: self.dropbox_window = Toplevel(self.main_frame) self.dropbox_window_is_open = True self.dropbox_window.protocol("WM_DELETE_WINDOW", self.close_dropbox_window) label_code = Label(self.dropbox_window, text="Enter the code:") entry_code = Entry(self.dropbox_window, width=70) button_update_cloud = Button(self.dropbox_window, command=update_dropbox_config, text="Update") label_instructions = Label( self.dropbox_window, text="Copy the code given by the link below") label_oauthlink = Label( self.dropbox_window, text= "https://www.dropbox.com/oauth2/authorize?response_type=code&client_id=c02irh2snxzphs5" ) label_oauthlink.bind( "<Button-1>", lambda e: open_new( "https://www.dropbox.com/oauth2/authorize?response_type=code&client_id=c02irh2snxzphs5" )) label_code.grid(row=0, column=0, sticky=W, padx=(10, 5), pady=(10, 0)) entry_code.grid(row=0, column=1, pady=(10, 0)) button_update_cloud.grid(row=1, column=0, sticky=W, padx=(10, 5)) label_instructions.grid(row=1, column=1) label_oauthlink.grid(row=2, column=0, columnspan=2, padx=10, pady=(5, 10)) def close_dropbox_window(self): self.dropbox_window_is_open = False self.dropbox_window.destroy() def send_files(self): saveinfo = savefiles.read_saveinfo() for name in saveinfo: savefiles.copy_stored_save_to_game_save_location(name) def send_files_to_cloud(self): cloud_transfer = cloud.DataTransfer() cloud_transfer.sendsaves() self.update_save_list() def get_files_from_cloud(self): cloud_transfer = cloud.DataTransfer() cloud_transfer.getsaves() self.update_save_list()
class TeamNameWindow: def __init__(self, parent): self.window = Toplevel(parent.window) self.window.withdraw() self.parent = parent self.teamName = StringVar() self.entryFrame = Frame(self.window) self.buttonFrame = Frame(self.window) WindowHelper.initializeWindow(self.window, self.parent, 260, 106, 30, 50, LabelConstants.TEAM_NAME_WINDOW) self.gridFrames() self.addEntryFrame() self.addButtonFrame() WindowHelper.finalizeWindow(self.window, self.parent) def gridFrames(self): self.entryFrame.grid(row=0, padx=4, pady=4, sticky=NSEW) self.buttonFrame.grid(row=1, padx=4, pady=4, sticky=E) def addEntryFrame(self): labelTeamName = Label(self.entryFrame, text=LabelConstants.TEAM_NAME) labelTeamName.grid(row=0, sticky="NSW", padx=2, pady=4) entryTeamName = Entry(self.entryFrame, textvariable=self.teamName, width=40) entryTeamName.focus() entryTeamName.grid(row=1, sticky=NSEW, padx=4, pady=4) def addButtonFrame(self): buttonOk = Button(self.buttonFrame, text=LabelConstants.OK, width=8, command=lambda: self.ok()) buttonOk.grid(row=0, column=0, sticky=NSEW, padx=4, pady=4) buttonCancel = Button(self.buttonFrame, text=LabelConstants.CANCEL, width=8, command=lambda: self.window.destroy()) buttonCancel.grid(row=0, column=1, sticky=NSEW, padx=4, pady=4) def ok(self): self.teamName.set(self.teamName.get().strip()) if self.isValidTeamName(self.teamName.get()): if self.parent.isRename: self.rename() else: self.createNewTeam() self.cancel() else: self.window.grab_set() def cancel(self): self.parent.window.grab_set() self.window.destroy() def isValidTeamName(self, name): if name == LabelConstants.ALL_TEAM: messagebox.showerror(LabelConstants.ERROR, MessageConstants.RESERVED_NAME) return False elif name in self.parent.teams.keys(): messagebox.showerror(LabelConstants.ERROR, MessageConstants.DUPLICATE_TEAM) return False elif not all(letter.isalnum() or letter.isspace() for letter in name): messagebox.showerror(LabelConstants.ERROR, MessageConstants.ALNUM_ONLY) return False elif len(name) < 1 or len(name) > 20: messagebox.showerror(LabelConstants.ERROR, MessageConstants.TEAM_NAME_LENGTH) return False elif name.isspace(): messagebox.showerror(LabelConstants.ERROR, MessageConstants.ALL_SPACES) return False else: return True def rename(self): self.parent.teams[self.teamName.get()] = self.parent.teams.pop( self.parent.comboboxTeam.get()) self.parent.comboboxTeam.current() self.parent.comboboxTeam.configure(values=self.parent.getListOfTeams()) self.parent.comboboxTeam.set(self.teamName.get()) self.parent.currentTeam = self.teamName.get() def createNewTeam(self): self.parent.teams[self.teamName.get()] = [] self.parent.comboboxTeam.configure(values=self.parent.getListOfTeams()) self.parent.comboboxTeam.set(self.teamName.get()) self.parent.switchActiveTeam()
def __init__(self, master): savefiles.verify_initial_files() # Beginning of the creation of the frames self.main_frame = Frame(master) self.savefiles_frame = Frame(self.main_frame) self.export_and_import_frame = Frame(self.main_frame) self.save_management = Frame(self.main_frame) # The frames are created # Beginning of the frames's configuration self.savefiles_frame.config(borderwidth=4, relief=SUNKEN, padx=15, pady=20) self.export_and_import_frame.config(borderwidth=3, relief=RAISED, padx=20, pady=120) self.save_management.config(borderwidth=3, relief=RAISED, padx=10, pady=10) # Configuration finished # Beginning of the creation of the widgets self.save_list = Listbox(self.savefiles_frame, selectmode=SINGLE, width=70) self.save_list_scrollbar = Scrollbar(self.savefiles_frame) self.save_list.config(yscrollcommand=self.save_list_scrollbar.set) self.save_list_scrollbar.config(command=self.save_list.yview) self.save_list.bind('<<ListboxSelect>>', self.update_entrys) self.button_add = Button(self.save_management, text="Add", command=self.open_add_save_window, width=10) self.button_delete = Button(self.save_management, text="Delete", command=self.delete_element, width=10) self.entry_name = Entry(self.save_management, width=40) self.entry_path = Entry(self.save_management, width=40) self.button_update = Button(self.save_management, text="Update", command=self.update_config, width=10) self.button_find = Button(self.save_management, text="Find", command=self.find_openfolder_path, width=10) self.button_send = Button(self.export_and_import_frame, text="Send Saves", command=self.send_files, width=10) self.button_load = Button(self.export_and_import_frame, text="Import Data", command=self.import_compressed_savedata, width=10) self.button_export = Button(self.export_and_import_frame, text="Export Data", command=self.export_savedata, width=10) self.button_send_to_cloud = Button(self.export_and_import_frame, text="Send to cloud", command=self.send_files_to_cloud, width=13) self.button_get_from_cloud = Button(self.export_and_import_frame, text="get from cloud", command=self.get_files_from_cloud, width=13) # The widgets are created # Beginning of the configuration of the layout self.main_frame.grid(sticky=W) self.savefiles_frame.grid(row=0, column=0, padx=30, pady=(20, 0)) self.export_and_import_frame.grid(row=0, column=1, rowspan=2, padx=(0, 30)) self.save_management.grid(row=1, column=0, sticky=W, padx=30, pady=(10, 20)) self.save_list.pack(side=LEFT) self.save_list_scrollbar.pack(side=RIGHT, fill="y") self.button_add.grid(row=0, column=0, pady=5, sticky=W) self.button_delete.grid(row=1, column=0, sticky=W) self.entry_name.grid(row=0, column=1, padx=(10, 10), sticky=W) self.entry_path.grid(row=1, column=1, padx=(10, 10), sticky=W) self.button_update.grid(row=0, column=2, sticky=W) self.button_find.grid(row=1, column=2, sticky=W) self.button_send.grid(row=0, pady=(0, 10)) self.button_load.grid(row=1, pady=(0, 10)) self.button_export.grid(row=2, pady=(0, 10)) self.button_get_from_cloud.grid(row=3, pady=(0, 10)) self.button_send_to_cloud.grid(row=4) # Layout configured # Beginning of the creation of the MenuBar self.menubar = Menu(master) self.filemenu = Menu(self.menubar, tearoff=0) self.menubar.add_cascade(label="File", menu=self.filemenu) self.filemenu.add_command(label="Import Data", command=self.import_compressed_savedata) self.filemenu.add_command(label="Export Data", command=self.export_savedata) self.filemenu.add_command(label="Exit", command=master.destroy) self.configmenu = Menu(self.menubar, tearoff=0) self.configmenu.add_command(label="Configure dropbox", command=self.open_dropbox_window) self.menubar.add_cascade(label="Configuration", menu=self.configmenu) self.menubar.add_command(label="Exit", command=master.destroy) # MenuBar Created self.add_save_window_is_open = False self.dropbox_window_is_open = False self.last_active = None self.update_save_list() savefiles.update_program_save_folder()
import config def sendMessages(): message = text.get("1.0", END) os.system(f"pipenv run python bulkSend.py \"{message}\"") def extractNumbers(): xlsxFile = filePath.get("1.0", END).strip() os.system(f"pipenv run python xlsxToNumPy.py \"{xlsxFile}\" 39") root = Tk() # basic window topFrame = Frame(root) topFrame.pack(side=TOP) bottomFrame = Frame(root) bottomFrame.pack(side=BOTTOM) # topFrame content label1 = Label(topFrame, text=config.xlsxFileLabel, width=16) filePath = Text(topFrame, width=120, height=1) filePath.insert(END, "numbers.xlsx") label1.pack(side=LEFT) button1 = Button(topFrame, text=config.extractNumberLabel, command=extractNumbers) button1.pack(side=RIGHT) filePath.pack(side=RIGHT) # bottomFrame content
from PIL import Image, ImageTk, ExifTags from tkinter.filedialog import askopenfilename from tkinter import simpledialog from tkinter import Frame, Button #Custom libraries from convert_to_degrees import dms_to_degrees from xmp_read import get_xmp from WGS84toUTM import WGS84toUTM from sensor_dim import get_sensor if __name__ == "__main__": root = tk.Tk() #Setting up a tkinter canvas with scrollbars frame = Frame(root, bd=2, relief=tk.SUNKEN) frame.grid_rowconfigure(0, weight=1) frame.grid_columnconfigure(0, weight=1) xscroll = tk.Scrollbar(frame, orient=tk.HORIZONTAL) xscroll.grid(row=1, column=0, sticky=tk.E + tk.W) yscroll = tk.Scrollbar(frame) yscroll.grid(row=0, column=1, sticky=tk.N + tk.S) canvas = tk.Canvas(frame, bd=0, xscrollcommand=xscroll.set, yscrollcommand=yscroll.set) canvas.grid(row=0, column=0, sticky=tk.N + tk.S + tk.E + tk.W) xscroll.config(command=canvas.xview) yscroll.config(command=canvas.yview) frame.pack(fill=tk.BOTH, expand=1)
def build(self, _position_): self.place(in_=self.master, x=20, y=_position_ + 25) self.update() self._container = Frame(master=self, bg='darkgray', borderwidth=1, relief="solid", width=600) self._name_label = Label(master=self.master, text=self._name, bg='darkgray') if self._type.startswith(('view', 'text', 'int', 'bool')): if self._value in lang: self._value: Union[str, Code] = lang[self._value] pass self._value_field = Label(master=self, text=self._value, bg='darkgray', wraplength=565, justify=LEFT) if self._type.endswith('_'): subs = self._type.split('_', 1) self._change = Button(master=self, text=lang['mp_change']) self._change.place(in_=self, anchor=E, rely=0.5, relx=1, width=80) pass elif self._type.startswith(('list', 'single')): self._value_field = Frame(master=self, bg='darkgray', width=565, height=25) self._value_field.place(in_=self, y=7, x=13) self._value_field.update() for code in self._value: self._items.append(Item(self._value_field, code)) pos_x = 0 pos_y = 0 for item in self._items: item.place(in_=self._value_field, x=pos_x, y=pos_y) item.update() pos_x += item.winfo_width() + 5 if pos_x > self._value_field.winfo_width() - 20: item.place_forget() pos_y += 25 pos_x = 0 item.place(in_=self._value_field, x=pos_x, y=pos_y) pos_x += item.winfo_width() + 5 pass pass self._value_field.config(height=25 + pos_y) # _position_ += pos_y self._value_field.place_forget() pass elif self._type.startswith('select'): text = lang[self._value] if self._value is not None else '' self._value_field = Label(master=self, text=text, bg='darkgray', wraplength=365) pass if not self._type.startswith('view'): self._change = Button(master=self, text=lang['mp_change']) self._change.place(in_=self, anchor=E, rely=0.5, relx=1, width=80) pass self._container.place(in_=self, relheight=1) self._name_label.place(in_=self, y=-15, x=5) self._value_field.place(in_=self, y=7, x=13) self._value_field.update() height = self._value_field.winfo_height() + 14 self.config(height=height) return height + 25 + _position_
class MainWindow(Frame): def __init__(self, parent): Frame.__init__(self, parent) self.parent = parent self.pack(fill=BOTH, expand=1) #basic settings self.basicSettings = GuiBasicSettings(self); self.basicSettings.pack() self.basicSettings.setCallback( lambda: _thread.start_new_thread(self.generateFile, ()) ) #separatr self._generatorSepFrm = Frame(self, bg="#000000", height=2) self._generatorSepFrm.pack(fill=X, expand=1, pady=20) # generator description genDescStr = "Here you choose how the Binary file is generated\n" genDescStr = genDescStr + " * Random: creates an random image\n" genDescStr = genDescStr + " * Counter: create a pattern like 112233 or 111122223333" self._generatorDescLbl = Label(self, text=genDescStr, justify=LEFT) self._generatorDescLbl.pack(ipadx=10) #generator select frames self._generatorSelectFrm = Frame(self) self._generatorSelectFrm.pack(pady=10) #generators self._generatorFrm = Frame(self, relief=SUNKEN, bd=2) self._generatorFrm.pack(fill=X, expand=1, padx=20) self.generatorFrames = ( GuiGenerateRandom(self._generatorFrm), GuiGenerateCount(self._generatorFrm) ) for i in self.generatorFrames: i.pack_forget() #generator select frames (self.generatorFrames) self._generatorSelect = GuiGeneratorSelect(self._generatorSelectFrm, self.generatorFrames) #error output self._infoFrm = Frame(self, relief=SUNKEN, bd=2) self._infoFrm.pack(fill=X, expand=1, pady=10) self._infoLbl = Label(self, bg="#000000", text="nothing to do", fg="#00FF00") self._infoLbl.pack(fill=X, expand=1, padx=0) self._infoColorNormal = "#00FF00" self._infoColorErr = "#FF0000" def generateFile(self): print("generate") #firstly disable start button self.basicSettings.enableButton(False) fileName = self.basicSettings.getFileName() fileSize = 0 blockSize = 512 currGeneratorGui = self._generatorSelect.getCurrGeneratorGui() print(type(currGeneratorGui)) currGenerator = currGeneratorGui.getGeneratorFunction() specSettings = currGeneratorGui.getSettings() #cast filesize try: fileSize = self.basicSettings.getFileSize() if fileSize < 1: raise Exception("") except: self._infoLbl.config(fg=self._infoColorErr, text="file size is invalid") return #open file try: currFile = open(fileName, "wb") except: self._infoLbl.config(fg=self._infoColorErr, text="cannot create file") return def progress(aFileSize, aWritten, aText): progr = str(int((aWritten/aFileSize)*100))+"%" return aText+": "+progr try: buff = b"" bytesWritten = 0 for i in currGenerator(fileSize, specSettings): buff += i bytesWritten += 1 if len(buff) > blockSize: currFile.write(buff) buff = b"" self._infoLbl.config(fg=self._infoColorNormal, text=progress(fileSize, bytesWritten, fileName)) if len(buff) > 0: currFile.write(buff) buff = None self._infoLbl.config(fg=self._infoColorNormal, text=progress(fileSize, bytesWritten, fileName)) except Exception as exc: raise finally: currFile.close() self.basicSettings.enableButton(True) #Enable Button