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()
Beispiel #3
0
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)
Beispiel #4
0
    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()
Beispiel #5
0
	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)
Beispiel #6
0
 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')
Beispiel #7
0
 def __init__(self, parent):
     """ This method creates a new, emtpy LpoView. """
     Frame.__init__(self, parent)
     self.__parent = parent
     self.__initUI()
     
     self.__lpo = None
Beispiel #8
0
    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'))
Beispiel #9
0
    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)
Beispiel #10
0
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"]
Beispiel #11
0
    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
Beispiel #12
0
    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))
Beispiel #13
0
 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)
Beispiel #14
0
 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)
Beispiel #15
0
    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()
Beispiel #17
0
    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)
Beispiel #18
0
    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()
Beispiel #19
0
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
Beispiel #20
0
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')
Beispiel #21
0
    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()
Beispiel #22
0
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)
Beispiel #23
0
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()
Beispiel #24
0
    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()
Beispiel #25
0
    def __init__(self, parent):
        Frame.__init__(self, parent, background="white")

        self.parent = parent

        self.parent.title("Test title")
        self.fullscreen()
Beispiel #26
0
    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)
Beispiel #27
0
 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)
Beispiel #28
0
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()
Beispiel #29
0
    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)
Beispiel #30
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)
Beispiel #31
0
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)
Beispiel #32
0
 def quit(self):
     """
     Quits the application after requesting confirm
     """
     if askyesno('Verify quit', 'Are you sure you want to quit?'):
         Frame.quit(self)
Beispiel #33
0
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]
Beispiel #34
0
 def __init__(self, master=None, title='', **kwargs):
     Frame.__init__(self, master=master, **kwargs)
     self.title = title
Beispiel #35
0
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)
Beispiel #36
0
    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()
Beispiel #37
0
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()
Beispiel #39
0
 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()
Beispiel #41
0
 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()
Beispiel #43
0
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",
Beispiel #45
0
    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,
Beispiel #46
0
 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())
Beispiel #47
0
    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)
Beispiel #48
0
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()
Beispiel #50
0
    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)
Beispiel #51
0
    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()
Beispiel #52
0
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)
Beispiel #53
0
# 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()
Beispiel #55
0
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()
Beispiel #57
0
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)
Beispiel #59
0
        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