コード例 #1
10
ファイル: recipe-580650.py プロジェクト: jacob-carrier/code
class Scratchpad:

    def __init__(self):
        self.window = Tk()
        self.window.title("Onager Scratchpad")
        self.create_frame()
        self.create_editing_window()
        self.window.bind('<F7>', self.save_file)
        self.window.bind('<F5>', self.open_file)

    def create_frame(self):
        frame_style = Style()
        frame_style.theme_use('alt')
        frame_style.configure("TFrame",
                              relief='raised')
        self.frame = Frame(self.window, style="frame_style.TFrame")
        self.frame.rowconfigure(1)
        self.frame.columnconfigure(1)
        self.frame.grid(row=0, column=0)

    def create_editing_window(self):
        self.editing_window = ScrolledText(self.frame)
        self.editing_window.configure(fg='gold',
                                      bg='blue',
                                      font='serif 12',
                                      padx='15',
                                      pady='15',
                                      wrap='word',
                                      borderwidth='10',
                                      relief='sunken',
                                      tabs='48',
                                      insertbackground='cyan')
        self.editing_window.grid(row=0, column=0)

    def save_file(self, event=None):
        name = asksaveasfilename()
        outfile = open(name, 'w')
        contents = self.editing_window.get(0.0, END)
        outfile.write(contents)
        outfile.close()

    def open_file(self, event=None):
        name = askopenfilename()
        infile = open(name, 'r')
        contents = infile.read()
        self.editing_window.insert(INSERT, contents)
        infile.close()
コード例 #2
0
    def __init__(self, client, *args, **kwargs):
        ## Set up window
        super().__init__(*args, **kwargs)
        self.columnconfigure(0, weight=1)
        self.rowconfigure(0, weight=1)
        self.title()

        # Menus
        self.option_add('*tearOff', False)
        self['menu'] = menus.menubar(self)

        # Output
        output = ScrolledText(self, wrap='word', state='disabled')
        output.grid(column=0, row=0, sticky='nwes')

        # Input
        input = tk.Text(self, height=1, wrap='word')
        input.grid(column=0, row=1, sticky='nwes')

        # Tabbar

        # Final setup
        input.focus()

        self.client = client
        self.output = output
        self.input = input

        self.mainloop()
コード例 #3
0
class mainWindow(tk.Frame): 
    def __init__(self):
        self.root = tk.Tk()
        self.root.title("segmentationGui.py")
        
        self.frame = tk.Frame(self.root, width=700, height=700)
        self.frame.grid(row=1)
        
        self.notebook = ttk.Notebook(self.frame)
        self.edgeTab = edgeDetectFrame(self.notebook)
        self.kMeansTab = kMeansSegmentationFrame(self.notebook)
        self.nCutTab = normalizedCutsFrame(self.notebook)
        
        self.notebook.add(self.edgeTab, text = "Edge Detection",compound=tk.TOP)     
        self.notebook.add(self.kMeansTab, text = "k-Means")
        self.notebook.add(self.nCutTab, text = "Normalized Cuts")
        self.notebook.grid(row=1)
        
        self.log = ScrolledText(self.frame, wrap='word')
        self.log.grid(row=2)
        
        sys.stdout = LogRedirector(self.log)
        sys.stderr = LogRedirector(self.log)

        tk.mainloop()
コード例 #4
0
def post(author_id):
    postWin = Toplevel(root)
    postWin.title('** Post **')
    postWin.geometry('800x600')
    cursor.execute('Select display_name from blog_author where login_id= %s', author_id)
    authorDisplayName = cursor.fetchone()[0]
    Label(postWin, text=authorDisplayName, font='Times 40 bold').grid(row=0, column=1)
    date = datetime.datetime.now()
    post_date = str(date.year)+'-'+str(date.month)+'-'+str(date.day)+' '+str(date.hour)+':'+str(date.minute)+':'+str(date.second)
    ttk.Label(postWin, text='Title : ', font='Times 10 bold').grid(row=1, column=0, columnspan=1)
    title = ttk.Entry(postWin, width=50)
    title.grid(row=1, column=1, columnspan=3)
    ttk.Label(postWin, text='Write your Post here :', font='Times 10 bold').grid(row=2)
    post = ScrolledText(postWin)
    post.grid(row=3, column=1)
    commentEnabled = IntVar()
    ttk.Checkbutton(postWin, text='Comment Enabled', variable=commentEnabled ).grid(row=4, column=0)
    def write():
        try:
            cursor.execute('Insert into blog_post(title,article,date_published,comment_enabled,blog_author_login_id,stars) Values(%s,%s,%s,%s,%s,%s)', (title.get(), post.get(1.0, 'end-1c'), post_date, commentEnabled.get(), author_id, '0'))
            db.commit()
            msg = 'Post Successful'
        except ValueError:
            msg = 'Attempt Failed'
        ttk.Label(postWin, text=msg).grid(row=5, column=1)

    ttk.Button(postWin, text='Post', command=write).grid(row=4, column=1)
コード例 #5
0
class MainMenu():
    def __init__(self, master):
        self.master = master
        self.output_file_name = StringVar()

        master.title('Validate Reservation Sheet')
        #print(master.configure().keys())

        #Label(master, text='\nOutput',  fg='black', font='none 12 bold').grid(row=0, column=0, sticky = W)

        #self.output_file_name. = 'Output'
        Label(master,
              textvariable=self.output_file_name,
              fg='black',
              font='none 12 bold').grid(row=0, column=0, sticky=W)

        self.output = ScrolledText(master,
                                   width=120,
                                   height=40,
                                   wrap=WORD,
                                   background='white')
        self.output.grid(row=1, column=0, columnspan=2, sticky='W')

        land_btn = Button(master,
                          text="Lands",
                          command=self.validate_land_sheet).grid(row=0,
                                                                 column=2)
        unit_btn = Button(master, text="Units",
                          command=self.val_unit).grid(row=0, column=3)

        exit_btn = Button(master, text="Exit ",
                          command=master.quit).grid(row=0, column=4, sticky=W)

    def validate_land_sheet(self):
        self.output.delete(0.0, END)  # clear window
        file_path = self.select_file_path()
        self.output_file_name.set('Results of file name: ' + file_path)
        if file_path.split('.')[-1].lower() == 'xlsx':
            val_land = ValidateLandSheet(file_path)
            val_land.output_win = self.output
            val_land.check_land_sheet()
        elif file_path.split('.')[-1].lower() == 'csv':
            val_land = ValidateLandCSV(file_path)
            val_land.output_win = self.output
            val_land.check_land_sheet()

    def select_file_path(self):
        try:
            file_path = get_file_path(initialDir=".",
                                      DialogTitle="select excel/csv sheet",
                                      fileTypeText="excel, csv",
                                      fileType="*.xlsx;*.csv")
        except:
            print('No file selected ...')
            return ''
        else:
            return file_path

    def val_unit(self):
        pass
コード例 #6
0
def detailTodo(cb=None):
    tanggal = str(cal.selection_get())
    win = tk.Toplevel()
    win.wm_title("Detail todo")
    selectedItem = treev.focus()
    selectedIndex = treev.item(selectedItem)["text"]
    selectedTodo = todos[tanggal][selectedIndex]
    judul = tk.StringVar(value=selectedTodo["judul"])
    tk.Label(win, text="Tanggal\t    :").grid(row=0, column=0, sticky="W")
    tk.Label(win,
             text=(f"{tanggal} | {selectedTodo['waktu']}")).grid(row=0,
                                                                 column=1,
                                                                 sticky="W")
    tk.Label(win, text="Judul\t    :").grid(row=1,
                                            column=0,
                                            columnspan=3,
                                            sticky="W")
    tk.Entry(win, state="disabled", textvariable=judul).grid(row=1,
                                                             column=1,
                                                             sticky="W")
    tk.Label(win, text="Keterangan:").grid(row=2,
                                           column=0,
                                           columnspan=5,
                                           rowspan=4,
                                           sticky="W")
    keterangan = ScrolledText(win, width=12, height=5)
    keterangan.grid(row=2, column=1, sticky="E")
    keterangan.insert(tk.INSERT, selectedTodo["keterangan"])
    keterangan.configure(state="disabled", width=13)
コード例 #7
0
    def show_message(self):
        history_msg_win = Toplevel()
        history_msg_win.title('{}的历史消息记录'.format(self.username))
        history_msg_win.geometry('550x500+500+100')
        msglist = ScrolledText(master=history_msg_win, width=65, height=28)
        msglist.grid(row=0, column=0, padx=2, pady=5)

        con = sqlite3.connect('message.db')
        try:
            result = con.execute("select * from {}".format(self.username +
                                                           '_tb'))
            for c in result:
                sender = c[0]
                message = c[2]
                msg_time = c[3]
                if sender != self.username:
                    msg = msg_time + sender + '对我' + '说:' + '\n '

                else:
                    msg = msg_time + '我对' + sender + '说:' + '\n '

                msglist.insert(END, msg, 'green')
                msglist.insert(END, message)

            con.commit()
            con.close()
        except:
            pass
コード例 #8
0
 def __init__(self, parent, controller):
     super().__init__(parent)
     self.parent, self.controller = parent, controller
     with open('instructions/training_instructions.txt', 'r') as f:
         data = f.read()
     self.controller.bind('<Return>', self.proceed_to_training)
     ttk.Label(self, text="Training instructions").grid()
     training_instructions = ScrolledText(self,
                                          borderwidth=10,
                                          font="Helvetica",
                                          width=40,
                                          wrap=tk.WORD)
     training_instructions.insert(tk.END, data)
     training_instructions.grid()
     replay_button = ttk.Button(
         self,
         text="Replay instructions",
         command=lambda: play_audio("instructions_audio_files/",
                                    "directions_training.wav"))
     self.ready_button = ttk.Button(self,
                                    text='Ready',
                                    command=self.controller.start_training,
                                    state='disabled')
     self.ready_button.grid()
     self.controller.after(500, self.play_training_instructions)
コード例 #9
0
class Remove(Screen):
    def __init__(self):

        tk.Frame.__init__(self)

        self.lbl_removal1 = tk.Label(self,
                                     text="These titles are ",
                                     font=("Times", "35"))
        self.lbl_removal1.grid(row=0, column=1, columnspan=2)
        self.lbl_removal2 = tk.Label(self,
                                     text="marked for removal!",
                                     font=("Times", "35"))
        self.lbl_removal2.grid(row=1, column=1, columnspan=2)

        self.scr_removelist = ScrolledText(self, height=8, width=40)
        self.scr_removelist.grid(row=2, column=1, columnspan=2)

        self.btn_cancel = tk.Button(self,
                                    text="Cancel",
                                    command=Screen.main,
                                    font=("Times", "25"))

        self.btn_cancel.grid(row=3, column=1)

        self.btn_conf = tk.Button(self, text="Confirm", font=("Times", "25"))

        self.btn_conf.grid(row=3, column=2, sticky="w")

        self.grid_columnconfigure(0, weight=1)
        self.grid_columnconfigure(3, weight=1)
コード例 #10
0
class GUI(Encryptor):
    __encrpytType = " "

    def pushString(self, typeEn):
        print(typeEn)
        x = super().__init__('s', typeEn,
                             self.dataInput.get(index1=1.0, index2=END))
        self.dataInput.delete('1.0', END)
        self.dataInput.insert(INSERT, self.standardInput())

    def __init__(self):
        self.root = Tk()
        self.text = Label(self.root, text="Enter text: ")
        self.dataInput = ScrolledText(self.root)
        #self.temp = self.dataInput.get(index1=1.0, index2=END)
        self.execButton = Button(self.root,
                                 text="Encrypt",
                                 command=lambda: self.pushString("En")
                                 #background = "green"
                                 )
        self.execButton1 = Button(self.root,
                                  text="Decrypt",
                                  command=lambda: self.pushString("De")
                                  #background = "green"
                                  )
        self.text.grid(row=0, column=0, pady=10, padx=10)
        self.dataInput.grid(row=1, column=1, columnspan=10, pady=10, padx=10)
        self.execButton.grid(row=3, column=8, pady=10, padx=10)
        self.execButton1.grid(row=3, column=9, pady=10, padx=10)
        self.root.mainloop()
コード例 #11
0
def display():
    try:
        e2.delete(0,END) 
        e4.delete(0,END)  
        fi=filename.get()
        if e3.get()=='':
            text=ScrolledText(dg)
            text.grid(row=4,column=0)
            with open(fi) as f:
                text.delete('1.0', END)
                text.insert("1.0",f.read())
        else:
            with open(fi) as f:
                a=f.read()
                t=a.find("'"+str(e3.get())+"'")
                if t!=-1:
                    n=a[t:].find('Name')+t
                    r=a[t:].find('Rollno')+t
                    p=a[t:].find('Percentage')+t
                    s=a[t:].find('Gender')+t
                    g=a[t:].find('Courses')+t
                    e2.insert('0',a[n+8:r-4])
                    e4.insert('0',a[p+14:s-4])
                    la1=Label(frame3,text=('Gender={}'.format(a[s:g-4])))
                    la1.grid(row=0,column=0,sticky='ew')
                else:
                    messagebox.showinfo('showinfo','No result found')
    except:
         messagebox.showinfo('showinfo','No result found')
    return
コード例 #12
0
ファイル: ui.py プロジェクト: arjo129/uSpeech
class MainUI(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master, width=600, height=480)
        self.data_directory = StringVar()
        self.data_directory.set("no data selected... please select directory of google_speech_data")
        self.directory_prompt = Label(self, textvariable = self.data_directory)
        self.directory_prompt.grid(row=0,column=0,sticky=W)
        self.select_dir = Button(self, text ="Change directory")
        self.select_dir.grid(row=0,column=1)
        self.select_dir.bind("<Button-1>",self.chdir)
        self.gru_label = Label(self, text = "GRU Size:")
        self.gru_label.grid(row=1,column=0,sticky=E)
        self.gru_entry = Entry(self)
        self.gru_entry.insert(0,"20")
        self.gru_entry.grid(row=1,column=1)
        self.words_label = Label(self,text = "Words to learns: (one line per word)")
        self.words_label.grid(row=2,column=0,sticky=W)
        self.words = ScrolledText(self)
        self.words.grid(row=3,column=0,columnspan=2)
        self.trainbtn = Button(self, text ="Train model")
        self.trainbtn.bind("<Button-1>",self.train)
        self.trainbtn.grid(row=4,column=1)
        self.pack(side=LEFT)
    def chdir(self, event):
        self.speech_data = filedialog.askdirectory()
        if self.speech_data:
            self.data_directory.set("Using speech data from: "+self.speech_data)
            os.chdir(self.speech_data)
    def train(self, event):
        filename = filedialog.asksaveasfilename(title = "Select file to checkpoint the model to",filetypes =(("uspeech model checkpoint","*.model"),))
        if filename:
            pass #TODO Implement training routine
コード例 #13
0
    class stdoutWindow(tkinter.Toplevel):
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
            self.title("Deploy Progress")

            self.stdoutText = ScrolledText(self, width=60, height=15)
            self.stdoutText.grid(row=0, column=0)
コード例 #14
0
ファイル: GUI.py プロジェクト: FCUIECSHomework/Contact_Python
    def editContactView(self, infoWindow, Contact):
        window = Toplevel()
        window.focus_set()
        window.title("Edit Contact")
        window.resizable(width=FALSE, height=FALSE)

        Label(window, text="Name ").grid(row=0, column=0)
        name = Entry(window, width=30)
        name.grid(row=0, column=1)
        name.insert(0, Contact["name"])

        Label(window, text="Line ").grid(row=1, column=0)
        line = Entry(window, width=30)
        line.grid(row=1, column=1)
        line.insert(0, Contact["line"])

        Label(window, text="Email ").grid(row=2, column=0)
        Email = Entry(window, width=30)
        Email.grid(row=2, column=1)
        Email.insert(0, Contact["Email"])

        Label(window, text="Phone ").grid(row=3, column=0)
        telephone = ScrolledText(window, width=37)
        telephone.grid(row=3, column=1)
        for i in Contact["telephone"]:
            telephone.insert(INSERT, str(i) + "\n")

        okButton = Button(window, text="Finish",
                          command=lambda: self.editContact(window, infoWindow, uuid=Contact["uuid"], name=name.get(),
                                                           line=line.get(),
                                                           Email=Email.get(),
                                                           Telephone=telephone.get(1.0, END)))
        okButton.grid(row=4)
        cancelButton = Button(window, text="Cancel", command=window.destroy)
        cancelButton.grid(row=4, column=1, sticky=E)
コード例 #15
0
class LongTextbox(Textbox):

	def config(self, **kwargs):
		if 'height' in kwargs:
			self.sentry.config(height=kwargs['height'])
		if 'width' in kwargs:
			self.sentry.config(width=kwargs['width'])
		if 'text' in kwargs:	
			self.sentry.insert(END, kwargs['text'])
		if 'lang' in kwargs:
			self.lang = kwargs['lang']
			self.label.config(text=self.lang[self.text])
		
	def place(self, **kwargs):
		self.parent = kwargs['parent']
		self.row = kwargs['row']
		self.column = kwargs['column']

		self.label = Label(self.parent, text=self.lang[self.text])
		self.sentry = ScrolledText(self.parent, relief=SOLID)

		self.label.grid(row=self.row, column=self.column)
		self.sentry.grid(row=self.row, column=self.column+1, sticky=E)

	def getData(self):
		return self.sentry.get('1.0', END + '-1c')

	def setData(self, data):
		self.sentry.delete('1.0', END)
		self.config(text=data)
コード例 #16
0
ファイル: GUI.py プロジェクト: FCUIECSHomework/Contact_Python
    def addContactView(self):
        window = Toplevel()
        window.focus_set()
        window.title("Add Contact")
        window.resizable(width=FALSE, height=FALSE)

        Label(window, text="Name ").grid(row=0, column=0)
        name = Entry(window, width=30)
        name.grid(row=0, column=1)

        Label(window, text="Line ").grid(row=1, column=0)
        line = Entry(window, width=30)
        line.grid(row=1, column=1)

        Label(window, text="Email ").grid(row=2, column=0)
        Email = Entry(window, width=30)
        Email.grid(row=2, column=1)

        Label(window, text="Phone ").grid(row=3, column=0)
        phone = ScrolledText(window, width=37)
        phone.grid(row=3, column=1)

        okButton = Button(window, text="Finish",
                          command=lambda: self.addContact(window, name=name.get(), line=line.get(), Email=Email.get(),
                                                          Telephone=phone.get(1.0, END)))
        okButton.grid(row=4)
        cancelButton = Button(window, text="Cancel", command=window.destroy)
        cancelButton.grid(row=4, column=1, sticky=E)
コード例 #17
0
def main():

    top = Tk()
    labelUsername = Label(top, text="Username")
    labelUsername.grid(row=0, column=0, padx=(10, 20), pady=(10, 10))
    entryUsername = Entry(top, width=30)
    entryUsername.grid(row=0, column=1, padx=(0, 10))

    labelPassword = Label(top, text="Password")
    entryPassword = Entry(top, width=30, show="*")
    labelPassword.grid(row=1, column=0, padx=(10, 20), pady=(10, 10))
    entryPassword.grid(row=1, column=1, padx=(0, 10))

    labelMatkul = Label(
        top, text="Matkul : Kelas\ncontoh:\nTKIT16022:A,\nTKIT16023:B")
    labelMatkul.grid(row=2, column=0, padx=(10, 20), pady=(10, 10))
    entryMatkul = ScrolledText(top, width=20, height=10)
    entryMatkul.grid(row=2, column=1, padx=(0, 10), pady=(10, 10))

    loginBtn = Button(
        top,
        text="Start KRS",
        command=lambda: KRSAN(entryUsername.get(), entryPassword.get(),
                              getMatkulKelas(entryMatkul.get("1.0", END))))
    loginBtn.grid(row=3,
                  columnspan=2,
                  sticky="nsew",
                  padx=(10, 10),
                  pady=(10, 10))

    top.mainloop()
コード例 #18
0
def AddForm():
    win = tk.Toplevel()
    win.wm_title("+")
    jam = tk.IntVar(value=10)
    menit = tk.IntVar(value=30)
    judul = tk.StringVar(value="")
    tk.Label(win, text="Waktu\t    :").grid(row=0, column=0, sticky='W')
    tk.Spinbox(win, from_=0, to=23, textvariable=jam, width=2).grid(row=0,
                                                                    column=1,
                                                                    sticky="W")
    tk.Spinbox(win, from_=0, to=59, textvariable=menit,
               width=2).grid(row=0, column=1, sticky="E")
    tk.Label(win, text="Judul\t    :").grid(row=1, column=0, sticky='W')
    tk.Entry(win, textvariable=judul).grid(row=1, column=1, columnspan=3)
    tk.Label(win, text="Keterangan:").grid(row=2, column=0, sticky='W')
    keterangan = ScrolledText(
        win,
        width=13,
        height=5,
    )
    keterangan.grid(row=2, column=1, columnspan=5, rowspan=4)
    tanggal = str(cal.selection_get())
    tk.Button(
        win,
        text="Tambah",
        command=lambda: addTodo(win, tanggal, jam, menit, judul, keterangan),
        width=7).grid(row=6, column=1, sticky='S')
    tk.Button(win, text="Batal", command=win.destroy,
              width=7).grid(row=6, column=2, sticky='SE')
コード例 #19
0
def display():
    try:
        e2.delete(0, END)
        e4.delete(0, END)
        fi = filename.get()
        if e3.get() == '':
            text = ScrolledText(dg)
            text.grid(row=4, column=0)
            with open(fi) as f:
                text.delete('1.0', END)
                text.insert("1.0", f.read())
        else:
            with open(fi) as f:
                a = f.read()
                t = a.find("'" + str(e3.get()) + "'")
                if t != -1:
                    n = a[t:].find('Name') + t
                    r = a[t:].find('Rollno') + t
                    p = a[t:].find('Percentage') + t
                    s = a[t:].find(')]]') + t
                    e2.insert('0', a[n + 8:r - 6])
                    e4.insert('0', a[p + 14:s - 1])
                else:
                    messagebox.showinfo('showinfo', 'No result found')
    except:
        messagebox.showinfo('showinfo', 'No result found 1')
    return
コード例 #20
0
def render_create_view():
    clear_view()
    Label(tk, text="Enter your task's name:").grid(column=0, row=0, padx=20, pady=20)
    task_name = Entry(tk)
    task_name.grid(column=1, row=0, padx=20, pady=20)
    Label(tk, text="Enter your task's description:").grid(column=0, row=1, padx=20, pady=20)
    task_description = ScrolledText(tk,  width =20, height=10)
    task_description.grid(column=1, row=1, padx=20, pady=20)
    Label(tk, text="Enter your task's priority:").grid(column=0, row=2, padx=20, pady=20)
    task_priority = IntVar()
    radio_button_1 = Radiobutton(tk, text="Low", value=1, variable=task_priority)
    radio_button_2 = Radiobutton(tk, text="Medium", value=2, variable=task_priority)
    radio_button_3 = Radiobutton(tk, text="High", value=3, variable=task_priority)
    radio_button_1.grid(column=1,  row=2, padx=20, pady=20)
    radio_button_2.grid(column=2,  row=2, padx=20, pady=20)
    radio_button_3.grid(column=3,  row=2, padx=20, pady=20)
    Label(tk, text="Is the task completed?:").grid(column=0, row=3, padx=20, pady=20)
    task_completed = BooleanVar()
    check_box = Checkbutton(tk, variable=task_completed)
    check_box.grid(column=1, row=3, padx=20, pady=20)
    Button(tk, text="Create task", bg="green", fg="white",
           command=lambda: create_task(task_name.get(), task_description.get("1.0", END),
                                       task_priority.get(), task_completed.get()))\
        .grid(column=0, row=4)
    Button(tk, text="Cancel", bg="black", fg="white",
           command=render_main_view).grid(column=1, row=4)
コード例 #21
0
    def build_gui(self, width=20, height=30, cols=4):
        # Headers
        self.headers = []
        for h in range(4):
            e = tk.Entry(self.master, width=width + 10)
            e.grid(row=0, column=h)
            self.headers.append(e)
            e = None

        # Rows
        self.rows = []
        rowspan = 7
        for t in range(4):
            r = ScrolledText(self.master, width=width, height=height)
            r.grid(row=1, column=t, rowspan=rowspan)
            self.rows.append(r)
            r = None

        # UPPER/lowercase option for header
        self.HEADER_UPPERCASE = tk.IntVar()
        self.HEADER_LOWERCASE = tk.IntVar()
        tk.Checkbutton(self.master,
                       text="en MAJUSCULES",
                       variable=self.HEADER_UPPERCASE).grid(row=0,
                                                            column=cols,
                                                            sticky='N')
        tk.Checkbutton(self.master,
                       text="en minuscules",
                       variable=self.HEADER_LOWERCASE).grid(row=0,
                                                            column=cols + 1,
                                                            sticky='N')

        # UPPER/lowercase option for rows
        self.ROWS_UPPERCASE = tk.IntVar()
        self.ROWS_LOWERCASE = tk.IntVar()
        tk.Checkbutton(self.master,
                       text="en MAJUSCULES",
                       variable=self.ROWS_UPPERCASE).grid(row=1,
                                                          column=cols,
                                                          sticky='N')
        tk.Checkbutton(self.master,
                       text="en minuscules",
                       variable=self.ROWS_LOWERCASE).grid(row=1,
                                                          column=cols + 1,
                                                          sticky='N')

        # Text size
        tk.Label(self.master, text="Tamany de lletra:").grid(row=2,
                                                             column=cols,
                                                             sticky="NW")
        self.text_size = tk.Spinbox(self.master,
                                    values=(6, 8, 10, 12, 14, 16, 20))
        self.text_size.delete(0)
        self.text_size.insert(0, "8")
        self.text_size.grid(row=2, column=cols + 1, sticky="NW")

        # Button
        self.do = tk.Button(text='Generar etiquetes', command=self.do_action)
        self.do.grid(row=rowspan + 2, column=cols + 1)
コード例 #22
0
ファイル: labelWidgets2.py プロジェクト: drinkingTea/ryb_sms
class LongTextbox(Textbox):

	def config(self, **kwargs):

		try:
			self.sentry.config(height=kwargs['height'])
		except:
			pass
			#print("the widget could not be configured")

		try:
			self.sentry.config(width=kwargs['width'])
		except:
			pass
			#print("the widget could not be configured")

		try:
			#self.text = kwargs['text']
			#self.sentry.delete(1.0, END)
			self.sentry.insert(END, kwargs['text'])
		except:
			pass
			#print("the widget could not be configured")
			
		try:
			self.lang = kwargs['lang']
			self.label.config(text=self.lang[self.text])
		except:
			pass


	def trytoplace(self, **kwargs):
		self.parent = kwargs['parent']
		self.row = kwargs['row']
		self.column = kwargs['column']


	def place(self, **kwargs):

		try:
			self.trytoplace(**kwargs)
		except:
			pass
			#print("widget could not be placed")

		self.label = Label(self.parent, text=self.lang[self.text])
		self.sentry = ScrolledText(self.parent, relief=SOLID)

		self.label.grid(row=self.row, column=self.column)
		self.sentry.grid(row=self.row, column=self.column+1, sticky=E)


	def getData(self):
		return self.sentry.get('1.0', END + '-1c')


	def setData(self, data):
		self.sentry.delete('1.0', END)
		self.config(text=data)
コード例 #23
0
ファイル: widgets.py プロジェクト: SirLarion/lmariAI
class LyricWriter(UIWidget):
    def __init__(self, parent, gy, gx, w, py, label):
        super().__init__(parent, gy=gy, gx=gx, w=w, label=label)
        self.input_ = ScrolledText(self.frame,
                                   wrap=tk.WORD,
                                   width=20,
                                   height=12)
        self.input_.grid()
コード例 #24
0
ファイル: window5.py プロジェクト: Syava29/PracticeApp
class Window5:
    def __init__(self, parent, width, height, title="Генератор Рабочей программы дисциплины", resizable=(False, False),
                 icon=r"main.ico"):
        self.root = Toplevel(parent)
        self.root.title(title)
        self.root.geometry(f"{width}x{height}+200+200")
        self.root.resizable(resizable[0], resizable[1])
        self.root.config(bg="#1f4b99")

        img = PilImage.open('images/add_png.png')
        img = img.resize((18, 18), PilImage.ANTIALIAS)
        self.photo_image = ImageTk.PhotoImage(img)

        img3 = PilImage.open('images/help_png.png')
        img3 = img3.resize((18, 18), PilImage.ANTIALIAS)
        self.photo_image3 = ImageTk.PhotoImage(img3)

        self.root.iconbitmap('images/osu2.ico')

        self.frm_form = LabelFrame(self.root, relief=SUNKEN, borderwidth=3,
                                   text="Структура дисциплины и распределение её трудоёмкости")
        self.frm_form.pack(fill=X, ipadx=30, ipady=30, padx=10)
        self.text_edit = ScrolledText(self.frm_form, width=78, height=25, font=("Times New Roman", 11), wrap=WORD)
        self.text_edit.grid(row=1, column=1)

        self.frm_buttons = Frame(self.root)
        self.frm_buttons.pack(fill=X, ipadx=5, ipady=5)

        self.btn_submit = Button(self.frm_buttons, text="Добавить", image=self.photo_image, compound=LEFT,
                                 command=self.get_text)
        self.btn_submit.pack(side=LEFT, padx=10, ipadx=10)

        self.btn_clear = Button(self.frm_buttons, text="Отчистить", command=self.delete_text)
        self.btn_clear.pack(side=LEFT, padx=10, ipadx=10)

        self.btn_help = Button(self.frm_buttons, image=self.photo_image3, command=self.help_mb)
        self.btn_help.pack(side=LEFT, padx=10, ipadx=10)

    def get_text(self):
        text_get = self.text_edit.get("1.0", END)
        doc = DocxTemplate("RPD2.docx")
        context = {'mesto_discip': text_get, 'description1': "{{description1}}", 'kod_komp1': "{{kod_komp1}}",
                   'description2': "{{description2}}", 'kod_komp2': "{{kod_komp2}}"}
        doc.render(context)
        doc.save("RPD3.docx")
        document = dc.Document("RPD3.docx")
        full_text = []
        for para in document.paragraphs:
            full_text.append(para.text)
        mb.showinfo("Внимание", "Титульный лист рабочей программы сформирован")
        # self.mainText.insert('1.0', full_text)

    def delete_text(self):
        self.text_edit.delete(1.0, END)

    def help_mb(self):
        mb.showinfo("Помощь", "Укажите год набора, направление подготовки, профиль и наименование дисциплины. "
                              "Ниже показаны все добавленные вами рабочие программы")
コード例 #25
0
class TextEditor():                     # see PyEdit for more
    def __init__(self, parent=None):
        # TODO: 1226 why This can generate independent window ?
        #frm=Toplevel(Frame.__init__(self, parent))
        frm=Toplevel()
        # TODO : assign title based on cmdline tag 
        frm.title('New Text')
        # TODO , how to make button and Text in a better Layout format ?
        #        grid() param to learn 
        Button(frm, text='Save',  command=self.onSave).grid(row=0,column=0)
        Button(frm, text='Cut',   command=self.onCut).grid(row=0,column=1)
        Button(frm, text='Paste', command=self.onPaste).grid(row=0,column=2)
        Button(frm, text='Find',  command=self.onFind).grid(row=0,column=3)
        self.text = ScrolledText(frm)
        self.text.grid(row=1,columnspan=4)

        #Button(self, text='Save',  command=self.onSave).grid()
        #Button(self, text='Cut',   command=self.onCut).grid()
        #Button(self, text='Paste', command=self.onPaste).grid()
        #Button(self, text='Find',  command=self.onFind).grid()
        #self.text = ScrolledText(self)

    def gettext(self):                                   # returns a string
        return self.text.get('1.0', END+'-1c')           # first through last

    def onSave(self):
        filename = asksaveasfilename()
        #print(filename)
        if filename:
            alltext = self.gettext()                      # first through last
            open(filename, 'w').write(alltext)            # store text in file

    def onCut(self):
        text = self.text.get(SEL_FIRST, SEL_LAST)         # error if no select
        self.text.delete(SEL_FIRST, SEL_LAST)             # should wrap in try
        self.text.clipboard_clear()
        self.text.clipboard_append(text)

    def onPaste(self):                                    # add clipboard text
        try:
            text = self.text.selection_get(selection='CLIPBOARD')
            self.text.insert(INSERT, text)
        except TclError:
            pass                                          # not to be pasted

    def onFind(self):
        target = askstring('SimpleEditor', 'Search String?')
        if target:
            where = self.text.search(target, INSERT, END)  # from insert cursor
            if where:                                      # returns an index
                print(where)
                pastit = where + ('+%dc' % len(target))    # index past target
               #self.text.tag_remove(SEL, '1.0', END)      # remove selection
                self.text.tag_add(SEL, where, pastit)      # select found target
                self.text.mark_set(INSERT, pastit)         # set insert mark
                self.text.see(INSERT)                      # scroll display
                self.text.focus()                          # select text widget
コード例 #26
0
def edit(e):
    fn  = listBox.get(listBox.curselection())
    fileWindow = Tk()
    fileWindow.geometry('+500+200')
    text = ScrolledText(fileWindow,width = 80,height = 40)
    fileWindow.mainloop()
    text.grid()
    text.insert(INSERT,open(fn,encoding='UTF-8').read())
    fileWindow.mainloop()
def getInputs( regexEntry) :
    Label(mainWindow, font = 25 ,   text="Please enter the pattern").grid(row=0, column=0)
    pattern = Entry(mainWindow, width=145); pattern.grid(row=0, column=1)

    Label(mainWindow , font = 25, text="Please enter the input string").grid(row=1, column=0)
    inputString = ScrolledText(mainWindow, width=120, height=25); inputString.grid(row=1, column=1)
    Button(mainWindow, font = 25, text="Process", command=(lambda: regexEntry.SetInputs( pattern.get(),  inputString.get("1.0", "end-1c")))).grid(row=1, column=2, sticky="EW" )

    Button(mainWindow, font = 25, text="Exit", command=sys.exit).grid(row=2, column=0, columnspan=3, sticky="EW")
    mainWindow.mainloop()    
コード例 #28
0
class MessageDialog(Dialog):
    def __init__(self, master, title=None, message=None, **kwargs):
        super().__init__(master, title)

        self.master = master
        self.message_queue = queue.Queue()
        self.queue_handler = QueueHandler(self.message_queue)
        if message:
            self.message_queue.put_nowait(message)
        self.master.after(100, self.poll_queue)

    def display(self, message):
        self.textbox.configure(state='normal')
        self.textbox.insert(tk.END, message + '\n')
        self.textbox.configure(state='disabled')
        # Autoscroll to the bottom
        self.textbox.yview(tk.END)

    def poll_queue(self):
        # Check every 100ms if there is a new message in the queue to display
        while True:
            try:
                message = self.message_queue.get(block=False)
            except queue.Empty:
                break
            else:
                self.display(message)
        self.master.after(100, self.poll_queue)

    def body(self, master):
        self.textbox = ScrolledText(master,
                                    width=60,
                                    height=10,
                                    state='disabled')
        self.textbox.grid(row=0, sticky='nsew')

        master.rowconfigure(0, weight=1)
        master.columnconfigure(0, weight=1)
        master.pack(fill=tk.BOTH, expand=1)

    def buttonbox(self):
        """replace origin wdiget with ttk"""
        box = ttk.Frame(self)

        w = ttk.Button(box,
                       text="OK",
                       width=10,
                       command=self.hide,
                       default=tk.ACTIVE)
        w.pack(side=tk.LEFT, padx=5, pady=5)

        self.bind("<Return>", self.hide)
        self.bind("<Escape>", self.hide)

        box.pack()
コード例 #29
0
def logged_in(uname):
    start_logged_in()
    global window_login
    window_login = Tk()
    window_login.title("Welcome: " + uname)
    window_login.geometry("920x560")
    b2 = Button(window_login,
                height=3,
                width=12,
                text="View Data",
                fg="green",
                command=view_command,
                justify=LEFT)
    b2.grid(row=0, column=0)
    b3 = Button(window_login,
                height=3,
                width=12,
                text="Start Chat",
                command=start_chat,
                justify=LEFT)
    b3.grid(row=0, column=1)
    b4 = Button(window_login,
                height=3,
                width=12,
                text="Timing",
                command=timming,
                justify=LEFT)
    b4.grid(row=0, column=2)

    gettext = ScrolledText(window_login, height=10, width=100)
    global textPad
    background_image = PhotoImage('wallpaper.jpg')
    textPad = ScrolledText(window_login, image=background_image)
    # textPad.configure(background='#99ff99', )
    # textPad.insert(END, "Welcome "+u )
    textPad.grid(row=1, column=1)

    b6 = Button(window_login,
                height=3,
                width=12,
                text="Logout",
                fg="red",
                command=close_logged_in_command,
                justify=LEFT)
    b6.grid(row=2, column=0)

    b6 = Button(window_login,
                height=3,
                width=12,
                text="Clear Data",
                fg="red",
                command=clear_data_command,
                justify=LEFT)
    b6.grid(row=2, column=2)
コード例 #30
0
ファイル: labelWidgets2.py プロジェクト: wasifzaman/ryb_sms
class LongTextbox(Textbox):
    def config(self, **kwargs):

        try:
            self.sentry.config(height=kwargs['height'])
        except:
            pass
            #print("the widget could not be configured")

        try:
            self.sentry.config(width=kwargs['width'])
        except:
            pass
            #print("the widget could not be configured")

        try:
            #self.text = kwargs['text']
            #self.sentry.delete(1.0, END)
            self.sentry.insert(END, kwargs['text'])
        except:
            pass
            #print("the widget could not be configured")

        try:
            self.lang = kwargs['lang']
            self.label.config(text=self.lang[self.text])
        except:
            pass

    def trytoplace(self, **kwargs):
        self.parent = kwargs['parent']
        self.row = kwargs['row']
        self.column = kwargs['column']

    def place(self, **kwargs):

        try:
            self.trytoplace(**kwargs)
        except:
            pass
            #print("widget could not be placed")

        self.label = Label(self.parent, text=self.lang[self.text])
        self.sentry = ScrolledText(self.parent, relief=SOLID)

        self.label.grid(row=self.row, column=self.column)
        self.sentry.grid(row=self.row, column=self.column + 1, sticky=E)

    def getData(self):
        return self.sentry.get('1.0', END + '-1c')

    def setData(self, data):
        self.sentry.delete('1.0', END)
        self.config(text=data)
コード例 #31
0
ファイル: browsebtn.py プロジェクト: Jenyhoney/project_final
class Root(Tk):
    def __init__(self):
        super(Root, self).__init__()
        self.title("Tkinter Browse")
        self.minsize(1000, 600)
        self.labelFrame = ttk.Label(self, text="")
        self.labelFrame.grid(row=0, column=1)
        self.label_frame = ttk.Frame(self, height=50)
        self.label_frame.grid(
            row=10)  # Stops child widgets of label_frame from resizing it

        self.entry = ttk.Entry(self.labelFrame, text="", width=50)
        self.entry.grid()
        self.button()

    def button(self):

        self.button = ttk.Button(self.labelFrame,
                                 text="Browse",
                                 command=self.filedialog)
        self.button.grid(column=3, row=0)

        #self.entry1=ttk.Entry(self.label_frame,width=50)

    # self.entry1.grid(row=10)
    ## self.label1=ttk.Label(self.labelFrame,text="",width=100)
    #self.label1.grid(row=10)

    def filedialog(self):
        #root.filename = tkFileDialog.askopenfilename(initialdir = "/",title = "Select file",filetypes = (("jpeg files","*.jpg"),("all files","*.*")))

        self.filename = filedialog.askopenfilename(initialdir="/",
                                                   title="Select file")
        self.entry.insert(0, self.filename)
        self.text = docxpy.process(self.filename)
        print(self.text)
        self.txt = ScrolledText(self.labelFrame, width=100, height=20)
        self.txt.grid(row=7)
        self.txt.insert(const.END, self.text)
        #self.label1.config(text=self.text)
        # self.entry1.insert(0,self.text)
        self.token()

    def entry(self):

        self.entry = ttk.Entry(self.labelFrame, text="", width=50)
        self.entry.grid(column=1, row=6, padx=5, pady=60, ipady=3)
        return

    def token(self):
        self.tkn = Tokenizer(lang='ml',
                             smt=True)  #smt is a flag for social-media-text
        #self.text = docxpy.process(self.filename)
        print(self.tkn.tokenize(self.text))
コード例 #32
0
class HMDmain(tk.Frame):
    def __init__(self, parent, *args, **kwargs):
        tk.Frame.__init__(self, parent, *args, **kwargs)

        self.parent = parent
        self.parent.option_add('*tearOff', False)
        self.after(50, self.onAfter)

        #set this frame to expand to %100 available space
        self.columnconfigure(0, weight=1)
        self.rowconfigure(0, weight=1)

        #init menu
        menubar = Menu(self.parent)
        self.parent.config(menu=menubar)

        fileMenu = Menu(menubar)
        fileMenu.add_command(label="Save", command=self.onSave)
        fileMenu.add_command(label="Load", command=self.onLoad)
        fileMenu.add_command(label="Exit", command=self.onExit)
        menubar.add_cascade(label="File", menu=fileMenu)

        #init textbox
        self.text = ScrolledText(self, wrap='word')

        #add widgets to the layout manager
        self.text.grid(sticky=inflate)

    def onExit(self):
        self.quit()

    def onSave(self):
        darkIO.DarkIO.save(asksaveasfilename(), self.text.get(0.0, 'end'))

    def onLoad(self):
        if not askyesno(
                "Clear All Text",
                "Loading a new file will clear the current project \n"
                "Would you like to continue?"):
            return

        loadText = ""
        try:
            fname = askopenfile()
            loadText = darkIO.DarkIO.load(fname.name)
        except UnicodeDecodeError:
            showerror("Invalid File Type", "Unable to read file.")
        else:
            self.text.delete(0.0, 'end')
            self.text.insert(0.0, loadText)

    def onAfter(self):
        print("Working")
        self.after(30000, self.onAfter)
コード例 #33
0
    def doSInsert():

        select = toString(db.selectDisplay(Stable.get()))
        print(select)
        m2 = tk.Tk()

        frame3 = tk.Frame(m2)
        text = ScrolledText(frame3)

        text.insert(tk.END, select)
        frame3.grid(row=1)
        text.grid()
コード例 #34
0
ファイル: Python12.py プロジェクト: ahmad174/Python12
def viewStudents():
    global students
    viewStudentWindow = Toplevel(company)
    viewStudentWindow.title('View Students')
    viewStudentWindow.geometry('800x600')

    data = ScrolledText(viewStudentWindow, width=111, height=54)

    for student in students:
        data.insert(END, student.printInfo() + '\n\n\n')

    data.grid(column=0, row=0)
コード例 #35
0
def logmain():
    '''Main window. The logs will be displayed here.'''
    loggui = Tk()
    loggui.title('Logfile Reader')
    loggui.config(bg='Gray')

    label_message = ScrolledText(loggui, width=100, height=20, bg='#e6e6e6')
    label_message.insert(INSERT, loglist())
    label_message.grid(row=2, column=3, columnspan=5, sticky='ew')
    label_message.config(state="disabled", font=('times', 18))

    loggui.mainloop()
コード例 #36
0
class ConsoleUi:
    """Poll messages from a logging queue and display them in a scrolled text widget."""

    def __init__(self, frame, simple_time=False):
        self.frame = frame
        # Create a ScrolledText wdiget
        if simple_time:
            font='80'
        else:
            font=''
        self.scrolled_text = ScrolledText(frame, state='disabled', height=39)
        self.scrolled_text.grid(row=0, column=0, sticky=(N, S, W, E))
        self.scrolled_text.configure(font='TkFixedFont')
        self.scrolled_text.tag_config('INFO', foreground='black', font=font)
        self.scrolled_text.tag_config('DEBUG', foreground='gray', font=font)
        self.scrolled_text.tag_config('WARNING', foreground='orange', font=font)
        self.scrolled_text.tag_config('ERROR', foreground='red', font=font)
        self.scrolled_text.tag_config('CRITICAL', foreground='red', underline=1, font=font)
        # Create a logging handler using a queue
        self.log_queue = Queue()
        self.queue_handler = QueueHandler(self.log_queue)
        formatter = logging.Formatter('%(asctime)s: %(message)s')
        if simple_time is True:
            formatter = logging.Formatter("%(asctime)s: %(message)s", "%H:%M:%S")
        self.queue_handler.setFormatter(formatter)
        logger.addHandler(self.queue_handler)
        # Start polling messages from the queue
        self.frame.after(100, self.poll_log_queue)

    def display(self, record):
        msg = self.queue_handler.format(record)
        self.scrolled_text.configure(state='normal')
        self.scrolled_text.insert(tk.END, msg + '\n', record.levelname)
        self.scrolled_text.configure(state='disabled')
        # Autoscroll to the bottom
        self.scrolled_text.yview(tk.END)

    def poll_log_queue(self):
        # Check every 100ms if there is a new message in the queue to display
        while True:
            try:
                record = self.log_queue.get(block=False)
            except Queue_Empty:
                break
            else:
                self.display(record)
        self.frame.after(100, self.poll_log_queue)

    def pass_logger(self, in_logger):
        in_logger.addHandler(self.queue_handler)

    def set_levels(self, levels):
        self.queue_handler.addFilter(MyFilter(levels))
コード例 #37
0
class Conclusion(Screen):
    
    def __init__(self):
        Screen.__init__(self)
        
        self.grid_columnconfigure(0, weight=1)
        self.grid_columnconfigure(1, weight=1)
        self.grid_columnconfigure(2, weight=1)
        self.grid_columnconfigure(3, weight=1)
        
        self.grid_rowconfigure(0, weight=1)
        self.grid_rowconfigure(1, weight=1)
        self.grid_rowconfigure(2, weight=1)
        self.grid_rowconfigure(3, weight=1)
        self.grid_rowconfigure(4, weight=1)
        self.grid_rowconfigure(5, weight=1)
        self.grid_rowconfigure(6, weight=1)
        self.grid_rowconfigure(7, weight=1)
        self.grid_rowconfigure(8, weight=1)
        
        
        self.lbl_conclusion_title = tk.Label(self, text="Your Score is:", font=TITLE_FONT)
        self.lbl_conclusion_title.grid(row=0, column=0, rowspan=2, columnspan=4, sticky="news") 
        
        self.lbl_conclusion_score = tk.Label(self, text="___/100", font=LABEL_FONT)
        self.lbl_conclusion_score.grid(row=2, column=1, columnspan=2, sticky="new")
        
        self.lbl_old_highscore = tk.Label(self, text="Old Highscores:", font=LABEL_FONT)
        self.lbl_old_highscore.grid(row=3, column=0, columnspan=4, sticky="news")
        
        self.scr_old_highscore = ScrolledText(self, height=3)
        self.scr_old_highscore.grid(row=4, column=0, columnspan=4,sticky="news")        
        
        self.lbl_new_highscore = tk.Label(self, text="New Highscores:", font=LABEL_FONT)
        self.lbl_new_highscore.grid(row=5, column=0, columnspan=4, sticky="news")
        
        self.scr_new_highscore = ScrolledText(self, height=3)
        self.scr_new_highscore.grid(row=6, column=0, columnspan=4, sticky="news")        
        
        self.btn_retry = tk.Button(self, text="Retry", font=BUTTON_FONT, command=self.go_trivia)
        self.btn_retry.grid(row=8, column=0, columnspan=2, sticky="news")
        
        self.btn_quit = tk.Button(self, text="Quit ", font=BUTTON_FONT, command=self.go_main_menu)
        self.btn_quit.grid(row=8, column=2, columnspan=2, sticky="news") 
        
        
    def go_main_menu(self):
        Screen.current=0
        Screen.switch_frame()
        
    def go_trivia(self):                                                          #Fix because of trivia turning into a pop up
        print("WOW! The should go to trivia!")
        '''Screen.current=1
コード例 #38
0
ファイル: test.py プロジェクト: rzzzwilson/Random-Stuff
class Gui:
    def __init__(self, master):
        self.master = master
        master.title("Client")
        master.geometry("600x750")

        self.chat = ScrolledText(self.master, state = "disabled", width = 72)
        self.chat.grid(padx = 4, pady = 4, columnspan = 2)

        self.chat_entry = ScrolledText(self.master, width = 55, height = 3)
        self.chat_entry.grid(row = 1, padx = 4, pady = 4)

        self.send_button = Button(self.master, text = "Send", width = 10, height = 2)
        self.send_button.grid(row = 1, column = 1, padx = 4, pady = 4)
コード例 #39
0
ファイル: gui.py プロジェクト: rsmith-nl/lamprop
 def initialize(self):
     """Create the GUI."""
     # Set the font
     default_font = nametofont("TkDefaultFont")
     default_font['size'] = 12
     self.option_add("*Font", default_font)
     # General commands and bindings
     self.bind_all('q', self.do_exit)
     # Create widgets.
     # First row
     prbut = ttk.Button(self, text="File:", command=self.do_fileopen)
     prbut.grid(row=0, column=0, sticky='w')
     fnlabel = ttk.Label(self, anchor='w', textvariable=self.lamfile)
     fnlabel.grid(row=0, column=1, columnspan=4, sticky='ew')
     # Second row
     rldbut = ttk.Button(self, text="Reload", command=self.do_reload)
     rldbut.grid(row=1, column=0, sticky='w')
     # Third row
     cb = partial(self.on_laminate, event=0)
     chkengprop = ttk.Checkbutton(
         self, text='Engineering properties', variable=self.engprop,
         command=cb
     )
     chkengprop.grid(row=2, column=0, columnspan=3, sticky='w')
     # Fourth row
     chkmat = ttk.Checkbutton(
         self, text='ABD & abd matrices', variable=self.matrices,
         command=cb
     )
     chkmat.grid(row=3, column=0, columnspan=3, sticky='w')
     # Fifth row
     cxlam = ttk.Combobox(self, state='readonly', justify='left')
     cxlam.grid(row=4, column=0, columnspan=5, sticky='we')
     cxlam.bind("<<ComboboxSelected>>", self.on_laminate)
     self.cxlam = cxlam
     # Sixth row
     fixed = nametofont('TkFixedFont')
     fixed['size'] = 12
     res = ScrolledText(self, state='disabled', font=fixed)
     res.grid(row=5, column=0, columnspan=5, sticky='ew')
     self.result = res
コード例 #40
0
ファイル: blocks.py プロジェクト: pohmelie/idev
class Logger(Frame):

    ERROR, BORRING, EVENT, NORMAL = "error", "borring", "event", None

    def __init__(self, *args, **kw):
        text_height = kw.pop("text_height", 25)

        Frame.__init__(self, *args, **kw)

        self.deque = deque()

        self.txt = ScrolledText(self, wrap=WORD, state=DISABLED, relief=SUNKEN, height=text_height)
        self.txt.grid(column=0, row=0, sticky=(N, W, E, S))
        self.txt.configure(LoggerColors.default)
        for k, v in LoggerColors.tags.items():
            self.txt.tag_configure(k, v)

        self.columnconfigure(0, weight=1)
        self.rowconfigure(0, weight=1)
        self.after(100, self._toscreen)

    def __call__(self, *args):
        self.deque.appendleft(args)

    def _toscreen(self):
        if len(self.deque):
            self.txt["state"] = NORMAL
            while(len(self.deque)):
                self.txt.insert(
                    END,
                    "\n[{}] ".format(strftime("%H:%M:%S")),
                    "time",
                    *self.deque.pop())
            self.txt.yview(END)
            self.txt["state"] = DISABLED
        self.after(100, self._toscreen)
コード例 #41
0
ファイル: recipe-578076.py プロジェクト: jacob-carrier/code
class MarkovDemo(Frame):

    "MarkovDemo(master=None, **kw) -> MarkovDemo instance"

    TEXT = dict(height=2, width=46, wrap=WORD)  # Text Options
    GRID = dict(padx=5, pady=5)                 # Grid Options

    # Initialize a MarkovDemo instance with a GUI for interaction.

    def __init__(self, master=None, **kw):
        "Initialize the MarkovDemo instance's widgets and settings."
        super().__init__(master, **kw)
        self.build_widgets()
        self.place_widgets()
        self.setup_widgets()
        self.grid_rowconfigure(2, weight=1)
        self.grid_rowconfigure(3, weight=1)
        self.grid_columnconfigure(0, weight=1)
        self.key = self.primer = None

    def build_widgets(self):
        "Build the various widgets that will be used in the program."
        # Create processing frame widgets.
        self.processing_frame = LabelFrame(self, text='Processing Mode:')
        self.mode_var = StringVar(self, 'encode')
        self.decode_button = Radiobutton(self.processing_frame,
                                         text='Decode Cipher-Text',
                                         command=self.handle_radiobuttons,
                                         value='decode',
                                         variable=self.mode_var)
        self.encode_button = Radiobutton(self.processing_frame,
                                         text='Encode Plain-Text',
                                         command=self.handle_radiobuttons,
                                         value='encode',
                                         variable=self.mode_var)
        self.freeze_var = BooleanVar(self, False)
        self.freeze_button = Checkbutton(self.processing_frame,
                                         text='Freeze Key & Primer',
                                         command=self.handle_checkbutton,
                                         offvalue=False,
                                         onvalue=True,
                                         variable=self.freeze_var)
        # Create encoding frame widgets.
        self.encoding_frame = LabelFrame(self, text='Encoding Options:')
        self.chain_size_label = Label(self.encoding_frame, text='Chain Size:')
        self.chain_size_entry = Entry(self.encoding_frame)
        self.plain_text_label = Label(self.encoding_frame, text='Plain-Text:')
        self.plain_text_entry = Entry(self.encoding_frame)
        # Create input frame widgets.
        self.input_frame = LabelFrame(self, text='Input Area:')
        self.input_text = ScrolledText(self.input_frame, **self.TEXT)
        # Create output frame widgets.
        self.output_frame = LabelFrame(self, text='Output Area:')
        self.output_text = ScrolledText(self.output_frame, **self.TEXT)

    def place_widgets(self):
        "Place the widgets where they belong in the MarkovDemo frame."
        # Locate processing frame widgets.
        self.processing_frame.grid(sticky=EW, **self.GRID)
        self.decode_button.grid(row=0, column=0, **self.GRID)
        self.encode_button.grid(row=0, column=1, **self.GRID)
        self.freeze_button.grid(row=0, column=2, **self.GRID)
        # Locate encoding frame widgets.
        self.encoding_frame.grid(sticky=EW, **self.GRID)
        self.chain_size_label.grid(row=0, column=0, sticky=W, **self.GRID)
        self.chain_size_entry.grid(row=0, column=1, sticky=EW, **self.GRID)
        self.plain_text_label.grid(row=1, column=0, sticky=W, **self.GRID)
        self.plain_text_entry.grid(row=1, column=1, sticky=EW, **self.GRID)
        self.encoding_frame.grid_columnconfigure(1, weight=1)
        # Locate input frame widgets.
        self.input_frame.grid(sticky=NSEW, **self.GRID)
        self.input_text.grid(sticky=NSEW, **self.GRID)
        self.input_frame.grid_rowconfigure(0, weight=1)
        self.input_frame.grid_columnconfigure(0, weight=1)
        # Locate output frame widgets.
        self.output_frame.grid(sticky=NSEW, **self.GRID)
        self.output_text.grid(sticky=NSEW, **self.GRID)
        self.output_frame.grid_rowconfigure(0, weight=1)
        self.output_frame.grid_columnconfigure(0, weight=1)

    def setup_widgets(self):
        "Setup each widget's configuration for the events they handle."
        self.input_text.bind('<Key>', self.handle_key_events)
        self.input_text.bind('<Control-Key-a>', self.handle_control_a)
        self.input_text.bind('<Control-Key-/>', lambda event: 'break')
        self.output_text['state'] = DISABLED
        self.output_text.bind('<Control-Key-a>', self.handle_control_a)
        self.output_text.bind('<Control-Key-/>', lambda event: 'break')

    ########################################################################

    # Take care of any special event needing dedicated processing.

    def handle_radiobuttons(self):
        "Change the interface based on the encoding / decoding setting."
        if self.encrypting:
            self.freeze_button.grid()
            if not self.freeze_var.get():
                self.encoding_frame.grid()
        else:
            self.freeze_button.grid_remove()
            if not self.freeze_var.get():
                self.encoding_frame.grid_remove()
        self.handle_key_events(None)

    def handle_checkbutton(self):
        "Change the interface based on the key / primer freeze setting."
        if self.freeze_var.get():
            self.encoding_frame.grid_remove()
        else:
            self.encoding_frame.grid()

    def handle_key_events(self, event):
        "Schedule refreshing the output area after an input area event."
        if event is None or event.char and event.state | 0o11 == 0o11:
            self.after_idle(self.refresh)

    @staticmethod
    def handle_control_a(event):
        "Select all text in the widget associated with the given event."
        event.widget.tag_add(SEL, 1.0, END + '-1c')
        return 'break'

    ########################################################################

    # Handle interface's updates when either encoding or decoding.

    def refresh(self):
        "Refresh the output based on the value of the input."
        text = self.input_text.get(1.0, END + '-1c')
        if not text:
            self.output = text
        elif self.encrypting:
            self.encode(text)
        else:
            self.decode(text)

    def output(self, value):
        "Set the text in the output area to the string value."
        self.output_text['state'] = NORMAL
        self.output_text.delete(1.0, END)
        self.output_text.insert(END, value)
        if self.encrypting and self.freeze_var.get():
            self.output_text.see(END)
        self.output_text['state'] = DISABLED

    output = property(fset=output, doc='Output area property.')

    @property
    def chain_size(self):
        "Chain size for the Markov chains used when encrypting."
        try:
            value = ast.literal_eval(self.chain_size_entry.get())
            assert isinstance(value, int) and 2 <= value <= 256
            return value
        except:
            self.chain_size_entry.delete(0, END)
            self.chain_size_entry.insert(0, '2')
            return 2

    @property
    def plain_text(self):
        "Plain text or ignored characters in encryption process."
        try:
            value = self.repr_to_obj(self.plain_text_entry.get(), '')
            assert isinstance(value, str)
            return value
        except:
            self.plain_text_entry.delete(0, END)
            return ''

    ########################################################################

    # Encrypt a string for display in the interface's output area.

    def encode(self, string):
        "Encode the string and show the cipher-text in the output."
        try:
            cipher = self.build_cipher(string)
        except ValueError:
            self.output = ''
        except:
            self.output = traceback.format_exc()
        else:
            self.output = self.build_header() + '\n\n' + cipher

    def build_cipher(self, string):
        "Build cipher-text based on plain-text and return answer."
        if self.key and self.freeze_var.get():
            cipher, primer = me.encrypt_str(string, self.key, self.primer)
        else:
            args = string, self.chain_size, self.plain_text
            cipher, self.key, self.primer = me.auto_encrypt_str(*args)
        return cipher

    def build_header(self):
        "Build header from key and primer values in current use."
        header = '\n'.join(map(self.bytes_to_repr, self.key.data))
        header += '\n' + self.bytes_to_repr(self.primer.data)
        return header

    ########################################################################

    # Decrypt a string for display in the interface's output area.

    def decode(self, string):
        "Decode encrypted message and display plain-text in output."
        try:
            cipher = self.extract_keys(string)
            text = self.extract_text(cipher)
        except ValueError:
            self.output = ''
        except:
            self.output = traceback.format_exc()
        else:
            self.output = text

    def extract_keys(self, string):
        "Extract keys to decryption and return the cipher-text area."
        header, cipher = string.split('\n\n', 1)
        *key, primer = map(self.repr_to_obj, header.split('\n'))
        self.key, self.primer = me.Key(tuple(key)), me.Primer(primer)
        return cipher

    def extract_text(self, string):
        "Extract text message from string using built key and primer."
        text, primer = me.decrypt_str(string, self.key, self.primer)
        return text

    ########################################################################

    # Provide some special methods to simplify the program's code.

    @property
    def encrypting(self):
        "Encrypting boolean stating current operations mode."
        return {'encode': True, 'decode': False}[self.mode_var.get()]

    @staticmethod
    def bytes_to_repr(obj):
        "Convert bytes object into suitable representation."
        if not isinstance(obj, bytes):
            raise TypeError('Object must be a bytes instance!')
        return repr(obj)[2:-1]

    @staticmethod
    def repr_to_obj(string, prefix='b'):
        "Convert representation into an equivalent object."
        for template in '{}"{}"', "{}'{}'":
            try:
                return ast.literal_eval(template.format(prefix, string))
            except:
                pass
        raise ValueError('Cannot convert {!r} to object!'.format(string))

    @classmethod
    def main(cls):
        "Create context for demo and run a test instance."
        NoDefaultRoot()
        root = Tk()
        root.minsize(420, 330)
        root.title('Markov Demo 2')
        test = cls(root)
        test.grid(sticky=NSEW)
        root.grid_rowconfigure(0, weight=1)
        root.grid_columnconfigure(0, weight=1)
        root.mainloop()
コード例 #42
0
ファイル: gui.py プロジェクト: wearyoung/daovision
class SshPanel(Frame):
	def __init__(self, parent):
		Frame.__init__(self, parent)
		self.scrolltext = ScrolledText(self, width = 120,
				font = ("", 14, "normal"), height = 30)
		self.scrolltext.config(state = "disable")

		f = Frame(self)
		self.entry = Entry(f, width = 75, font = ("", 15, "normal"))
#		self.entry.grab_set()
		self.entry.focus_set()
		self.entry.grid(row = 0, column = 0)
		self.entry.bind("<Return>", lambda event, frame = self: frame._runCommand())

		self.button1 = Button(f, text = "sumbmit", font = ("", 15, "normal"),
						command = lambda frame = self: frame._runCommand())
		self.button1.grid(row = 0, column = 1, padx = 4, pady = 2)
		self.button2 = Button(f, text = "clear", font = ("", 15, "normal"),
						command = lambda frame = self: frame._deleteText())
		self.button2.grid(row = 0, column = 2, padx = 4, pady = 2)
		f.grid(row = 1, column = 0)
		self.scrolltext.grid(row = 0, column = 0)

		with shelve.open("userconfigdb") as db:
			keys = tuple(db.keys())
		if not keys:
			configButtonCmd()
		with shelve.open("userconfigdb") as db:
			self.sshIP = db[tuple(db.keys())[0]].hostaddress
		self._configButtonCmd()

	def _deleteText(self):
		self.scrolltext.config(state = "normal")
		self.scrolltext.delete("1.0", END)
		self.scrolltext.config(state = "disable")
	
	def _fetch(self, root, vars):
		attrs  = []
		for var in vars:
			t = var.get()
			if not t:
				return
			attrs.append(t)
		self.username = attrs[0]
		self.passwd = attrs[1]
		root.destroy()

	def _configButtonCmd(self):
		popwin = PopupWindow("User Config")
		popwin.grab_set()
		popwin.focus()

		form = Frame(popwin)
		left = Frame(form)
		right = Frame(form)
		bottom = Frame(popwin)
		form.pack(fill = X)
		left.pack(side = LEFT)
		right.pack(side = RIGHT, expand = YES, fill = X)
	#	bottom.pack(side = LEFT)

		fields = ("username", "password")
		variables = []
		for field in fields:
			lab = Label(left, width = 10, text = field)
			ent = Entry(right)
			lab.pack(side = TOP)
			ent.pack(side = TOP, fill = X)
			var = StringVar()
			ent.config(textvariable = var)
			variables.append(var)
	
		Button(popwin, text = "Ok", font = ("", 15, "normal"),
			command = (lambda vars = variables, root = popwin: self._fetch(root, vars))).pack()
        

	def _runCommand(self):
		command = self.entry.get()
		self.entry.delete(0, END)
		self.scrolltext.config(state = "normal")

		if command != "":
			ssh = paramiko.SSHClient()
			try:
				ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#				print(self.username, self.passwd)
				ssh.connect(self.sshIP, 22, self.username, self.passwd, timeout = 10)
				stdin,stdout,stderr = ssh.exec_command(command)
				out = stdout.readlines()
				err = stderr.readlines()
				for r in out:
					self.scrolltext.insert(END, "  " + r)
				for r in err:
					self.scrolltext.insert(END, "  " + r)
			except:
				pass
			finally:
				ssh.close()
		self.scrolltext.insert(END, "---------------------------------\n")
		self.scrolltext.config(state = "disable")
		self.scrolltext.see("end")
コード例 #43
0
class Editor(Tk):
    def __init__(self, fname, *args, **kwargs):  # This is a tangled mess. I am sorry.
        Tk.__init__(self, *args, **kwargs)
        for x in range(1):
            Grid.columnconfigure(self, x, weight=1)
            Grid.rowconfigure(self, x, weight=1)

        self.fname = fname
        self.opened = None
        self.tree = ttk.Treeview(self)
        self.ysb = ttk.Scrollbar(self, orient='vertical', command=self.tree.yview)
        self.tree.configure(yscroll=self.ysb.set)
        self.tree.heading('#0', text='Path', anchor='w')
        self.data = classes.Folder()
        self.data.load(open(self.fname).read())

        self.iidmap = {}

        self.root_node = self.tree.insert('', 'end', text='/', open=True)

        self.updatetree()

        self.st = ScrolledText()

        self.st.grid(row=1, column=1, sticky=N+E+S+W)

        self.meta = Frame()
        self.namel = Label(self.meta)
        self.namee = Entry(self.meta)

        self.namel.grid(row=0, column=0)
        self.namee.grid(row=0, column=1)

        self.tree.grid(rowspan=2, row=0, column=0, sticky=N+S+E+W)

        self.meta.grid(row=2, column=1)

        self.bind('<Control-s>', self.save)

        self.mb = Menu()
        self.fm = Menu()
        self.fm.add_command(label='Save', accelerator='Ctrl+S', command=self.save)
        self.mb.add_cascade(menu=self.fm, label='Savefile')
        self.dm = Menu()
        self.dm.add_command(label='New file', command=self.newfile)
        self.mb.add_cascade(menu=self.dm, label='Files')
        self.config(menu=self.mb)

    def loadf(self, event=None):
        self.st.delete(1.0, END)
        self.namee.delete(0, END)

        if self.data[self.opened]:
            self.st.insert(1.0, self.data[self.opened].content)
            self.namee.insert(1, self.data[self.opened].name)

    def updatetree(self):
        self.tree.delete(self.root_node)
        self.root_node = self.tree.insert('', 'end', text='/', open=True)
        for f in self.data:
            item = self.tree.insert(self.root_node, 'end', text=f, open=False)
            self.iidmap[item] = f

        self.tree.bind('<Double-1>', self.openitem)

    def openitem(self, event=None):
        item = self.tree.identify('item', event.x, event.y)
        if item:
            self.opened = self.iidmap[item]
            self.loadf()

    def save(self, event=None):
        self.update_fs()
        open(self.fname, 'w').write(json.dumps(self.data.dump()))

    def update_fs(self, event=None):
        self.data[self.opened].write(self.st.get(1.0, END))
        self.data[self.opened].rename(self.namee.get())

    def newfile(self, event=None):
        name = input('Filename: ')
        self.opened = name
        self.data.create_file(name)
        self.updatetree()
コード例 #44
0
ファイル: FilesSort.py プロジェクト: DaniuLi/hello
    buttonDesPath.grid(row=1, column=3, sticky=E)

    RadioYM = Radiobutton(
        root, text="按月分类", variable=radioVar, value=1)
    RadioYM.grid(row=2, column=1, sticky=W)
    RadioYM.select()

    RadioYMD = Radiobutton(
        root, text="按天分类", variable=radioVar, value=2)
    RadioYMD.grid(row=2, column=2, sticky=W)

    buttonSort = Button(root, text="开始", width=10, command=sort)
    buttonSort.grid(row=2, column=3,  sticky=E)

    logText = ScrolledText(root)
    logText.grid(row=3, columnspan=4, sticky=W)
    logText.insert(END, '\n\n')
    logText.insert(
        END, '         ================说明====================\n\n\n\n')
    logText.insert(END, '1、把待整理目录下所有文件按时间分类,并拷贝到输出目录下按(月/天)分目录保存\n\n')
    logText.insert(END, '2、如果文件为照片,且带有EXIF信息,则按EXIF中的照片拍摄时间信息进行分类\n')

    root.mainloop()

"""
GPS_info = find_GPS_image(pic_path='123.jpg')
address = find_address_from_GPS(GPS=GPS_info)
print(address)
"""
#pyinstaller -F -w -p C:\Python35-32\Scripts FilesSort.py
コード例 #45
0
ファイル: polybe.py プロジェクト: NicolasIRAGNE/CarrePolybe
boutonCleUp = Button(fenPolybe, width = 5, text = "up", command = fonction_bouton_cle_up)
boutonCleDown = Button(fenPolybe, width = 5, text = "down", command = fonction_bouton_cle_down)


boutonCleUp.grid(row = 8, columnspan=5, column = 0)
boutonCleDown.grid(row = 8, columnspan=5, column = 1)


boutonCrypterPolybe = Button(fenPolybe, width = 15, text="Chiffrer", command = fonction_bouton_crypter_polybe)
boutonDecrypterPolybe = Button(fenPolybe, width = 15, text = "Déchiffrer", command = fonction_bouton_decrypter_polybe)

saisieMessagePolybe = ScrolledText(fenPolybe, width = 30, height = 3)
resultatPolybe = ScrolledText(fenPolybe, width = 30, height = 3)


labelMessage = Label(fenPolybe, text = "Message:")
labelResultat = Label(fenPolybe, text = "Résultat:")

saisieMessagePolybe.grid(column = 0, row=11, columnspan = 6)
boutonCrypterPolybe.grid(column = 0, row = 12, columnspan = 3)
boutonDecrypterPolybe.grid(column =2, row = 12, columnspan = 6)
labelMessage.grid(column = 0, row = 10, columnspan = 6)
labelResultat.grid(column = 0, row = 13, columnspan = 6)
resultatPolybe.grid(column = 0, row = 14, columnspan=6)

alphabet = [A1.get().lower(), A2.get().lower(), A3.get().lower(), A4.get().lower(), A5.get().lower(), B1.get().lower(), B2.get().lower(), B3.get().lower(), B4.get().lower(), B5.get().lower(), C1.get().lower(), C2.get().lower(), C3.get().lower(), C4.get().lower(), C5.get().lower(), D1.get().lower(), D2.get().lower(), D3.get().lower(), D4.get().lower(), D5.get().lower(), E1.get().lower(), E2.get().lower(), E3.get().lower(), E4.get().lower(), E5.get().lower()]
mainList = [str(main1.get()), str(main2.get()), str(main3.get()), str(main4.get()), str(main5.get())]
mainList2 = [str(mainA.get()), str(mainB.get()), str(mainC.get()), str(mainD.get()), str(mainE.get())]

fonction_bouton_cle_down()
fenPolybe.mainloop()
コード例 #46
0
class SpinDelight(Frame):

    def __init__(self):
        Frame.__init__(self)
        self.master.geometry("1020x600+150+50")
        self.master.title("Spin Delight 1.0 - Copyright (c) Robin Thomas")
        self.master.resizable(0,0)
        self.grid()
        self.brwe = Button(self, text = "Browse", command = self.open_file, width = 10, relief = "groove")
        self.rtxt = Label(self, text="Input Text:")
        self.txt1 = ScrolledText(self, width = 50, height = 25)
        self.txt1.bind("<Control-Key-a>", self.select_all_txt1)
        self.txt1.bind("<Control-Key-A>", self.select_all_txt1)
        self.spin = Button(self, text = "Spin", command = self.spin_file, width = 10, relief = "groove")
        self.stxt = Label(self, text="Spun Text:")
        self.txt2 = ScrolledText(self, width = 50, height = 25)
        self.txt2.bind("<Control-Key-a>", self.select_all_txt2)
        self.txt2.bind("<Control-Key-A>", self.select_all_txt2)
        self.brwe.grid(row = 2, column = 2, pady = 15)
        self.rtxt.grid(row = 2, column = 0, padx = 25)
        self.txt1.grid(row = 3, column = 0, columnspan = 10, padx = 25)
        self.spin.grid(row = 3, column = 12)
        self.stxt.grid(row = 2, column = 13, padx = 25, pady = 5)
        self.txt2.grid(row = 3, column = 13, columnspan = 10, padx = 25)

    def select_all_txt1(self,event):
        self.txt1.tag_add(SEL, "1.0", END)
        self.txt1.mark_set(INSERT, "1.0")
        self.txt1.see(INSERT)
        return 'break'

    def select_all_txt2(self,event):
        self.txt2.tag_add(SEL, "1.0", END)
        self.txt2.mark_set(INSERT, "1.0")
        self.txt2.see(INSERT)
        return 'break'

    def open_file(self):
        fname = askopenfilename(filetypes=(("Text files", "*.txt"), ("All files", "*.*") ))
        if fname:
            try:
                self.txt1.delete(0.0, END)
                f = open(fname,'r')
                self.txt1.insert(INSERT,f.read())
            except:
                showerror("Open Source File", "Failed to read file\n'%s'" % fname)
    
    def spin_file(self):
        txt = self.txt1.get("1.0", END)
        self.txt2.delete(0.0, END)
        if len(txt):
            try:
                words = sub(r'([.,?])+', r' \1 ', sub(r'[^a-zA-Z0-9 .,?]+', ' ', txt)).split()
                w1 = words[0]
                z = [(words[j - 1], words[j]) for j in range(1, len(words))]
                values = self.generate_dict(z, w1)
                string = self.generate_sent(values)
                if len(string):
                    self.txt2.insert(INSERT, string)
                else:
                    showerror("Error", "Insufficient data to spin !!")
            except:
                showerror("Error", "Nothing to spin !!")

                    
    def generate_dict(self, x, w1):
        values = {'.': [w1]}
        for (wa, wb) in x:
            if wa in values:
                values[wa].append(wb)
            else:
                values[wa] = [wb]
        return values


    def generate_sent(self, values):
        w1 = '.'
        w2 = choice(values[w1])
        string = w2
        values[w1].remove(w2)
        while values:
            w1 = w2
            if len(values[w1]):
                w2 = choice(values[w1])
            else:
                del values[w1]
                w1 = '.'
                break
            if w2 in ('.', ',', '?'):
                string += w2
            else:
                string += " " + w2
            values[w1].remove(w2)
        return string
コード例 #47
0
class CipherGUI(Frame):
    """
    Renders a GUI that allows enciphering/deciphering of text using Bruce Schneier's solitaire algorithm.
    """
    
    def __init__(self, parent):
        """
        Initializes the GUI elements.
        """
        Frame.__init__(self, parent)
        self.parent = parent
        self.parent.title("Solitaire Cipher")

        self.helpFile = open("help.dat", "r")
        self.helpText = self.helpFile.read()

        self.aboutFile = open("about.dat", "r")
        self.aboutText = self.aboutFile.read()

        self.toCipher = Text(self.parent, undo = 1)
        self.toCipher.grid(row = 1, column = 1, padx = 10, pady = 10)
        self.toCipher.insert(END, "Type text to encipher...")
        self.toDecipher = Text(self.parent, undo = 1)
        self.toDecipher.grid(row = 2, column = 1, padx = 10, pady = 10)
        self.toDecipher.insert(END, "Type text to decipher...")
       
        lockImage = PhotoImage(file = "lock.gif")
        unlockImage = PhotoImage(file = "unlock.gif")
        self.encipherButton = Button(self.parent, text = "Encipher", command = self._encode, padx = 10, pady = 10, image = lockImage, compound = TOP)
        self.decipherButton = Button(self.parent, text = "Decipher", command = self._decode, padx = 10, pady = 10, image = unlockImage, compound = TOP)
        #Due to weirdness with Tk's handling of image references, need to keep a throwaway reference
        #to maintain iamge icons
        self.encipherButton.image = lockImage
        self.encipherButton.grid(row = 1, column = 2, padx = 10, pady = 10)
        self.decipherButton.image = unlockImage
        self.decipherButton.grid(row = 2, column = 2, padx = 10, pady = 10)

        splashImage = PhotoImage(file = "splash.gif")
        self.splashLabel = Label(self.parent, text = "Solitaire Cipher v1.0", image = splashImage, compound = TOP, font = "Courier")
        self.splashLabel.image = splashImage
        self.splashLabel.grid(row = 2, column = 0, padx = 10)

        self.log = ScrolledText(self.parent, width = 30, height = 22)
        #Can't use console log method yet.
        self.log.insert(END, ">> Ready. View Help for entry rules.")
        self.log.state = DISABLED
        self.log.grid(row = 1, column = 0, padx = 10, pady = 10, sticky = S)
        self.log.config(state = DISABLED)

        self.passphrase = Entry(self.parent, show = "*", width = 30)
        self.passphrase.grid(row = 1, column = 0, padx = 10, pady = 10, sticky = NE)
        self.passphrase.xview_moveto(0)
        self.passphraseLabel = Label(self.parent, text = "Passcode:", padx = 8).grid(row = 1, column = 0, sticky = NW, pady = 10)

        self.menubar = Menu(self.parent)
        self.menubar.add_command(label = "About", command = self._display_about)
        self.menubar.add_command(label = "Help", command = self._display_help)
        self.menubar.add_command(label = "Quit", command = self.quit)
        self.parent.config(menu = self.menubar)

        self.parent.iconbitmap("cards-64.ico")

    def _console_log(self, message):
        """
        Logs events like decode/encode to the console.
        """
        self.log.config(state = NORMAL)
        self.log.insert(END, "\n>> " + message)  
        self.log.config(state = DISABLED)
        self.log.see(END)

    def _encode(self):
        """
        Encodes the contents of toCipher using Cipher class and places in toDecipher.
        """
        passkey = self.passphrase.get()
        #If text is retrived to END, newline is added. Must go 1 character less.
        message = self.toCipher.get(1.0, END+"-1c")
        if self._validate(message, passkey):
            passkey = passkey.upper()
            message = message.replace(" ", "").upper()
            encode = Cipher(message, passkey)
            encodedMessage = encode.encipher()
            self._console_log("Encoding successful. \nSee lower box for result.")
            self.toDecipher.delete(1.0, END)
            self.toDecipher.insert(END, encodedMessage)
        elif passkey == "":
            self._console_log("Error: no passcode entered.")
        elif message == "":
            self._console_log("Error: no message entered.")
        else:
            self._console_log("Encoding unsuccessful. \nInput contains one or more \nillegal characters. See Help \nfor rules.")

    def _decode(self):
        """
        Decodes the contents of toDecipher using Cipher class and places in toCipher.
        """
        passkey = self.passphrase.get()
        #If text is retrived to END, newline is added. Must go 1 character less.
        message = self.toDecipher.get(1.0, END+"-1c")
        if self._validate(message, passkey):
            passkey = passkey.upper()
            message = message.replace(" ", "").upper()
            decode = Cipher(message, passkey)
            decodedMessage = decode.decipher()
            self._console_log("Decoding successful. \nSee upper box for result.")
            self.toCipher.delete(1.0, END)
            self.toCipher.insert(END, decodedMessage)
        elif passkey == "":
            self._console_log("Error: no passcode entered.")
        elif message == "":
            self._console_log("Error: no message entered.")
        else:
            self._console_log("Decoding unsuccessful. \nInput contains one or more \nillegal characters. See Help \nfor rules.")

    def _validate(self, message, passkey):
        """
        Checks text input from toCipher, toDecipher, and passphrase fields for illegal characters during cipher/decipher processes.
        """
        passkeyOK = passkey.isalpha()
        messageOK = message.replace(" ", "").isalpha()
        return passkeyOK and messageOK

    def _display_help(self):
        """
        Displays help dialog on menu press.
        """
        help = Toplevel()
        help.grab_set()
        help.title("Help")
        help.resizable(0,0)
        help.iconbitmap("cards-64.ico")
        helpMessage = Message(help, text = self.helpText, padx = 10, pady = 10)
        helpMessage.pack()


    def _display_about(self):
        """
        Displays about dialog on menu press.
        """
        about = Toplevel()
        about.grab_set()
        about.title("About")
        about.resizable(0,0)
        about.iconbitmap("cards-64.ico")
        aboutMessage = Message(about, text = self.aboutText, padx = 10, pady = 10)
        aboutMessage.pack()
コード例 #48
0
ファイル: gateway6.py プロジェクト: LAPIS-Lazurite/SnapShot
class Frame(Tk.Frame):
    def __init__(self, master=None):
        global start_flag
        Tk.Frame.__init__(self, master)

        self.gw = Gateway()

#### COMMAND DISPLAY
        self.panid= Tk.IntVar()
        self.panid=0xABCD
        self.PanidDisp= Tk.StringVar()
        self.PanidDisp.set(hex(self.panid))
        self.master.title('Lazurite Gateway')

        self.row_offset = 0

# DISPLAY LOGO
#        f_command = Tk.Frame(self, relief=Tk.RIDGE, bd=4)
        f_command = Tk.Frame(self,  bd=4)
        self.image= Tk.PhotoImage(file=LOGO)
        self.logoBackGround=Tk.Label(f_command, image=self.image, bg='gray', relief=Tk.RIDGE, anchor=Tk.W)
        f_cb = Tk.Frame(self,bd=4)
# DISPLAY Channel
        self.ch =33
        self.chNumberDisp = Tk.IntVar()
        self.chNumberDisp.set(self.ch)

        self.l_ch = Tk.Label(f_command,text="Ch", relief=Tk.RIDGE, anchor=Tk.W)
        self.t_ch = Tk.Entry(f_command,textvariable=self.chNumberDisp,width=10, relief=Tk.SUNKEN, bd=2, state=Tk.NORMAL)
        
        self.b_chIncButton = Tk.Button(f_command, font=('Helvetica', '6'), text='+', command=self.chInc)
        self.b_chDecButton = Tk.Button(f_command, font=('Helvetica', '6'), text='-', command=self.chDec)

# DISPLAY Power
        self.pwr = (1,20)
        
        self.l_pwr = Tk.Label(f_command,text="Pwr", relief=Tk.RIDGE, anchor=Tk.W)
        self.b_pwr = zz.Combobox(f_command,value=self.pwr, width=10,state="readonly")
        self.b_pwr.current(1)
        
# DISPLAY Rate
        self.rate = (50,100)

        self.l_rate = Tk.Label(f_command,text="Rate", relief=Tk.RIDGE, anchor=Tk.W)
        self.b_rate = zz.Combobox(f_command,value=self.rate, width=10,state="readonly")
        self.b_rate.current(1)



# DISPLAY PANID
        self.l_panid = Tk.Label(f_command,text="PANID", relief=Tk.RIDGE, anchor=Tk.W)
        self.t_panid = Tk.Entry(f_command,textvariable=self.PanidDisp,width=10, relief=Tk.SUNKEN, bd=2, state=Tk.NORMAL)

# DISPLAY Start/Stop Button         
        self.b_start = Tk.Button(f_command, text='Start', command=self.Start)
        self.b_stop = Tk.Button(f_command, text='Stop', command=self.Stop, state=Tk.DISABLED)


## Option check buttom
        self.ign = Tk.BooleanVar()
        self.c_ign = Tk.Checkbutton(f_command,text="Ignore address",variable=self.ign)

# DISPLAY display mode
        global mac_menu
        global mac_combobox
        global mac_mode

        mac_combobox=zz.Combobox(f_command,value=mac_menu,width=20,state="readonly")
        mac_combobox.current(mac_mode)

## InfoCorpus
#        self.InfoCorpus= Tk.PhotoImage(file='InfoCorpusLogo.gif')
#        self.ImageInforcopus = Tk.Label(f_command, image=self.InfoCorpus, bg='gray', relief=Tk.RIDGE)

        
# DISPLAY save log buttom
        self.b_savelog=Tk.Button(f_command, text='SAVE', command=self.Save, state=Tk.NORMAL)
        self.b_clearlog=Tk.Button(f_command, text='CLEAR LOG', command=self.Clear, state=Tk.NORMAL)

        self.b_view=Tk.Button(f_command, text='VIEW', command=self.View, state=Tk.NORMAL)

## Command Frame Location
        self.logoBackGround.grid(row=0,column=0)
        self.b_start.grid(row=0, column=4)
        self.b_stop.grid(row=0, column=5)

        self.l_ch.grid(row=2,column=0,sticky=Tk.W + Tk.E,pady=10)
        self.t_ch.grid(row=2,column=1,padx=20,sticky=Tk.W)
        self.b_chIncButton.grid(row=2, column=4, sticky=Tk.W + Tk.E + Tk.S)
        self.b_chDecButton.grid(row=2, column=5, sticky=Tk.W + Tk.E + Tk.S)

        self.l_pwr.grid(row=4,column=0,sticky=Tk.W + Tk.E,pady=10)
        self.b_pwr.grid(row=4,column=1,padx=20,sticky=Tk.W)

        self.l_rate.grid(row=5,column=0,sticky=Tk.W + Tk.E,pady=10)
        self.b_rate.grid(row=5,column=1,padx=20,sticky=Tk.W)

        self.l_panid.grid(row=6,column=0,sticky=Tk.W + Tk.E,pady=10)
        self.t_panid.grid(row=6,column=1,padx=20,sticky=Tk.W)

        self.c_ign.grid(row=0,column=6,sticky=Tk.W + Tk.E,padx=20)
        mac_combobox.grid(row=5,column=6,padx=20)
        self.b_savelog.grid(row=6,column=6,padx=20)
        self.b_clearlog.grid(row=6,column=7,padx=20)
        self.b_view.grid(row=6,column=8,padx=20)
        
#        self.ImageInforcopus.grid(row=0, column=8)

## LOG WINDOW
        global XSCALL
        global YSCALL
        f_log = Tk.Frame(self)
#        self.logText = Tk.StringVar()
#        self.logText.set("")
        self.s_logtext=ScrolledText(f_log,width=XSCALL, height=YSCALL)
        self.s_logtext.grid(sticky=Tk.W+Tk.E)
        self.s_logtext.write = self.write
        sys.stdout = self.s_logtext

## FRAME Location
        f_command.pack()
        f_log.pack()

    def write(self,str):
        self.s_logtext.insert(Tk.END,str)
        time.sleep(0.001)
        self.s_logtext.yview_scroll(str.count("\n") + 1, "units")

    def Start(self):
        global start_flag

        ## update parameters
        self.ch = self.chNumberDisp.get()
        self.pwr = int(self.b_pwr.get())
        self.rate = int(self.b_rate.get())
        self.panid = int(self.PanidDisp.get(),0)

        ## parameter check
        if self.ch < 24 or self.ch > 61:
            print("ch number error")
            return

        if self.pwr != 1 and self.pwr != 20:
            print("power error =",self.pwr)
            return

        if self.rate != 50 and self.rate != 100:
            print("rate error=",self.rate)
            return

        if self.panid <= 0 or self.panid > 0xffff:
            print("PANID error")
            return
        
        ## Start Gateway
        self.b_start.configure(state=Tk.DISABLED)
        self.b_stop.configure(state=Tk.NORMAL)
        self.b_chIncButton.configure(state=Tk.DISABLED)
        self.b_chIncButton.configure(state=Tk.DISABLED)
        self.logoBackGround.configure(bg=BLUE)
        self.b_savelog.configure(state=Tk.DISABLED)
        start_flag = True
        self.init_gateway()

        
    def Stop(self):
        global start_flag
        self.b_start.configure(state=Tk.NORMAL)
        self.b_stop.configure(state=Tk.DISABLED)
        self.b_chIncButton.configure(state=Tk.NORMAL)
        self.b_chIncButton.configure(state=Tk.NORMAL)
        self.logoBackGround.configure(bg='gray')
        self.b_savelog.configure(state=Tk.NORMAL)

        start_flag = False
        self.gw.close_driver()
        self.gw.remove_driver()

        
    def chInc(self):
        self.ch = self.chNumberDisp.get()
        if self.ch < 61 and self.ch >= 24:
            self.ch += 1
        elif self.ch < 24:
            self.ch = 24
        else:
            self.ch = 61
        self.chSet()
            
    def chDec(self):
        self.ch = self.chNumberDisp.get()
        if self.ch <= 61 and self.ch > 24:
            self.ch -= 1
        elif self.ch > 61:
            self.ch = 61
        else:
            self.ch = 24
        self.chSet()
        
    def chSet(self):
        self.chNumberDisp.set(self.ch)

    def Clear(self):
        self.s_logtext.delete(1.0,Tk.END)

    def Save(self):
        filename = Tk.filedialog.asksaveasfile(filetypes = [('Log Files', ('.log'))])
        if filename != "":
            logfile = open(filename.name,mode = 'w')
            log_data = self.s_logtext.get(1.0,Tk.END)
            logfile.write(log_data)
            logfile.close()
        return

    def View(self):
        print ("GADGADGADGADGA")
        view_file = open("/home/pi/python/camera.jpeg",mode = 'rb')
#	for i in range(1,1000):
#       	print (view_file.read())
    
    def init_gateway(self):
        if self.ign.get():
            self.mode = 1
        else:
            self.mode = 0
        self.gw.load_driver(self.ch,self.pwr,self.rate,self.panid,self.mode)
        self.gw.open_driver()

    def close(self):
        if self.dvice_open:
            self.gw.close_driver()
            self.gw.remove_driver()
コード例 #49
0
class Application:


    def __init__(self, parent):
        self.parent = parent
        self.frames()
        self.f_saved = True       #Sampled data saved
        root.protocol("WM_DELETE_WINDOW", self.on_closing)


    def on_closing(self):
        if (self.f_saved==False):
            if messagebox.askokcancel("Quit", "Sampled data not saved. Do you wanto to quit?"):
                root.destroy()
        else:
            root.destroy()


    def frames(self):
        frame1 = Tk.Frame(root, bd=5, relief='raised', borderwidth=1)
        frame2 = Tk.Frame(root, bd=5, relief='raised')

        note = ttk.Notebook(frame2)
        self.tab1 = ttk.Frame(note)
        self.tab2 = ttk.Frame(note)

        note.add(self.tab1, text = "Frquency")
        note.add(self.tab2, text = "Time")

        # Positioning
        frame1.pack(side='left', fill='both', padx=5, pady=5)
        frame2.pack(side='right', fill='both', expand='true')

        boton_open = Tk.Button(frame1, text ="Open file", command=self.open_file)
        boton_save = Tk.Button(frame1, text ="Save to file", command=self.save_file)
        boton_scan = Tk.Button(frame1, text="Scan serial ports", command=self.scan_ports)
        boton_read = Tk.Button(frame1, text="Read serial data", command=self.read_serial)

        label1 = Tk.Label(frame1, text="Select Serial Port:")
        self.sel_puerto = ttk.Combobox(frame1, textvariable='', state="readonly")
        portnames = scan_serial()
        self.sel_puerto['values'] = portnames        
        if (portnames != []):
            self.sel_puerto.current(0)

        self.text_message = ScrolledText(frame1, height=10, width=20)

        self.window_var = Tk.IntVar()
        self.window_var.set(1)        #Option rectangular window 
        radio_button1 = Tk.Radiobutton(frame1, text="Rectangular Window",
                                       variable=self.window_var, value=1, command=self.win_sel)
        radio_button2 = Tk.Radiobutton(frame1, text="Hann Window",
                                       variable=self.window_var, value=2, command=self.win_sel)
        radio_button3 = Tk.Radiobutton(frame1, text="Flattop Window",
                                       variable=self.window_var, value=3, command=self.win_sel)
        # Grid
        boton_open.grid(row=1, column=0, padx=5, pady=5)
        boton_save.grid(row=2, column=0, padx=5, pady=5)
        boton_scan.grid(row=3, column=0, padx=5, pady=5)
        label1.grid(row=4, column=0, padx=5, pady=5)
        self.sel_puerto.grid(row=5, column=0, padx=5, pady=5)
        boton_read.grid(row=6, column=0, padx=5, pady=5)
        self.text_message.grid(row=7, column=0, padx=5, pady=5)
        radio_button1.grid(row=8, column=0, sticky="W")
        radio_button2.grid(row=9, column=0, sticky="W")
        radio_button3.grid(row=10, column=0, sticky="W")

        #note.grid(row = 0, column=0)
        note.pack(side='top', fill='both', padx=5, pady=5)

        #Figure 1
        fig1 = Figure(figsize=(10,9))
        fig1.suptitle('Sampled signal - Acceleration')
        ax_11 = fig1.add_subplot(3,1,1)
        #ax_11.hold(False)
        ax_11.set_title("Channel X")
        ax_11.set_ylabel('g')
        ax_11.grid()                       #Shows grid.

        ax_12 = fig1.add_subplot(3,1,2)
        #ax_12.hold(False)
        ax_12.set_title("Channel Y")
        #ax_12.set_xlabel('ms')
        ax_12.set_ylabel('g')
        ax_12.grid()                       #Shows grid.

        ax_12 = fig1.add_subplot(3,1,3)
        #ax_12.hold(False)
        ax_12.set_title("Channel Z")
        ax_12.set_xlabel('ms')
        ax_12.set_ylabel('g')
        ax_12.grid()                       #Shows grid.

        #Figure 2
        fig2 = Figure(figsize=(10,9))
        fig2.suptitle('FFT spectrum')

        ax_21 = fig2.add_subplot(3,1,1)
        #ax_21.hold(False)
        ax_21.set_title("Channel X")
        ax_21.set_ylabel('g')
        ax_21.set_xlim(xmax=max_freq)
        ax_21.grid()            

        ax_22 = fig2.add_subplot(3,1,2)
        #ax_22.hold(False)
        ax_22.set_title("Channel Y")
        #ax_22.set_xlabel('Hz')
        ax_22.set_xlim(xmax=max_freq)
        ax_22.set_ylabel('g')
        ax_22.grid()

        ax_23 = fig2.add_subplot(3,1,3)
        #ax_23.hold(False)
        ax_23.set_title("Channel Z")
        ax_23.set_xlabel('Hz')
        #ax_23.set_xlim(xmax=max_freq)
        ax_23.set_xlim(xmax=max_freq_z)
        ax_23.set_ylabel('g')
        ax_23.grid()            

        # Canvas
        self.canvas2 = FigureCanvasTkAgg(fig1, master=self.tab2)
        self.canvas2.get_tk_widget().pack(side=Tk.TOP, fill=Tk.BOTH, expand=1)

        self.toolbar2 = NavigationToolbar2TkAgg(self.canvas2, self.tab2)
        self.toolbar2.update()
        self.canvas2._tkcanvas.pack(side=Tk.TOP, fill=Tk.BOTH, expand=1)

        self.canvas1 = FigureCanvasTkAgg(fig2, master=self.tab1)
        self.canvas1.get_tk_widget().pack(side=Tk.TOP, fill=Tk.BOTH, expand=1)

        self.toolbar1 = NavigationToolbar2TkAgg(self.canvas1, self.tab1)
        self.toolbar1.update()
        self.canvas1._tkcanvas.pack(side=Tk.TOP, fill=Tk.BOTH, expand=1)


    def read_serial(self):
        puerto = self.sel_puerto.get()
        print(puerto)
        message_string = "Port: {0} \n".format(puerto)
        self.show_message(self.text_message, message_string)

        estado_serial = False
        try:
            serial_avr = serial.Serial(port=puerto, baudrate=500000,
                           bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE,
                           stopbits=serial.STOPBITS_ONE, timeout=0)

            time.sleep(2)            # waiting the initialization...
            print("Initializing")
            message_string = "Initializing... \n"
            self.show_message(self.text_message, message_string)
    
            if (serial_avr.isOpen() == True):
                estado_serial = True
            else:
                estado_serial = False
        except (serial.SerialException, ValueError) as ex:
            #print "Can´t open serial port: " + str(ex)
            messagebox.showerror( "Result", "Can't open serial port: " + str(ex))

        if (estado_serial == True):
            global g_canal_1, g_canal_2, g_canal_3, datos_a_leer
            canal_1 = []
            canal_2 = []
            canal_3 = []
            buffer = []
            paquete = []
            valores = []
            serial_avr.flushInput()
            serial_avr.flushOutput()

            valores_decod = []

            conta_datos_rx = 0;         #Received samples counter.

            print("Sending INI")
            message_string = "Sending INI \n"
            self.show_message(self.text_message, message_string)
            
            serial_avr.write(b'INI')         #Start data sampling command.
            #serial_avr.write(chr(0x22))    #CRC 'INI'. Not used.
            serial_avr.write(b"\x7E")     #End of packet.

            global t_timeout
            timeout_state = False
            t0 = time.time()       #Start loop time stamp.
            while ((conta_datos_rx < datos_a_leer) and (timeout_state == False)):
                if serial_avr.inWaiting():
                    lectura = serial_avr.read(serial_avr.inWaiting())
                    buffer += lectura
                    valores = []
                if len(buffer) > 15:
                    try:
                        i = buffer.index(0x7E)
                    except (ValueError):
                        i = -1
                    #print("Buffer: {0}".format(buffer))
                    if i >= 0:
                        paquete = buffer[:i]
                        buffer =  buffer[i+1:]
                        #print("Paquete: {0}".format(paquete))
                        valores=[i for i in paquete]
                        paquete = ''

                        x = 0
                        while x < len(valores):
                            if valores[x] == 0x7D:
                                valores_decod.append(valores[x+1] ^ 0x20)
                                x = x + 1
                            else:    
                                valores_decod.append(valores[x])
                            x = x + 1

                        canal1 = (valores_decod[0] * 256) + valores_decod[1]
                        canal2 = (valores_decod[2] * 256) + valores_decod[3]
                        canal3 = (valores_decod[4] * 256) + valores_decod[5]

                        canal_1.append(canal1)
                        canal_2.append(canal2)
                        canal_3.append(canal3)

                        #print("Canal 1: %s    Canal2: %s  " % (canal1, canal2))

                        valores = []
                        valores_decod = []

                        conta_datos_rx += 1 ;
                        #print("conta_datos_rx =  %s" %conta_datos_rx)

                #Check if t_timeout seconds have elapsed since time stamp t0
                if ((time.time() - t0) > t_timeout):
                    timeout_state = True
                    #print("Serial port timeout")

            if (timeout_state == False):
                print("Sending PAR")
                self.text_message.config(state=Tk.NORMAL)        #Enable to modify
                self.text_message.insert(Tk.END, "Sending PAR \n")
                self.text_message.config(state=Tk.DISABLED)      #Disable - Read only
                root.update_idletasks()        #Needed to make message visible
            
                serial_avr.write(b'PAR')          #Stop data sampling.
                serial_avr.write(b"\x7E")         #End of packet.

                serial_avr.close()                #Close serial port.

                print("Amount of samples channel 1: %s" %len(canal_1))
                print("Amount of samples channel 2: %s" %len(canal_2))
                print("Amount of samples channel 3: %s" %len(canal_3))
                message_string = "Amount of samples channel 1: {0} \n".format(len(canal_1))
                message_string += "Amount of samples channel 2: {0} \n".format(len(canal_2))
                message_string += "Amount of samples channel 3: {0} \n".format(len(canal_3))
                self.show_message(self.text_message, message_string)
            
                #Keep a copy of the original values
                g_canal_1 = canal_1[:]            #Copy list by value not by reference
                g_canal_2 = canal_2[:]
                g_canal_3 = canal_3[:]

                self.f_saved = False                #Sampled data not saved

                self.window_var.set(1)        #Option rectangular window
                self.plot(self.tab1, self.tab2, canal_1, canal_2, canal_3, win_var=1)
            else:
                serial_avr.write(b'PAR')          #Stop data sampling.
                serial_avr.write(b"\x7E")         #End of packet.
                serial_avr.close()                #Close serial port.
                print("Serial port timeout")
                message_string = ("Serial port timeout \n")
                self.show_message(self.text_message, message_string)


    def show_message(self, text_message, message_string):
        """Shows messages on a scrollable textbox"""
        text_message.config(state=Tk.NORMAL)        #Enable to modify
        text_message.insert(Tk.END, message_string)
        text_message.config(state=Tk.DISABLED)      #Disable - Read only
        text_message.see("end")        #Show the "end" of text
        root.update_idletasks()        #Needed to make message visible
        

    def scan_ports(self):
        portnames = []
        portnames = scan_serial()
        self.sel_puerto['values'] = portnames
        if (portnames != []):
            self.sel_puerto.current(0)


    def plot(self, tab1, tab2, canal_1, canal_2, canal_3, win_var=1):
        num_datos = len(canal_1)
        X = range(0, num_datos, 1)

        # Scale the signal in g's
        for indice in X:
            canal_1[indice] *= g_scale
            canal_2[indice] *= g_scale
            canal_3[indice] *= g_scale

        # Calculates medium value for each channel.
        vdc_canal_1 = 0
        vdc_canal_2 = 0
        vdc_canal_3 = 0
        for indice in X:
            vdc_canal_1 += canal_1[indice]
            vdc_canal_2 += canal_2[indice]
            vdc_canal_3 += canal_3[indice]
        vdc_canal_1 = vdc_canal_1 / num_datos
        vdc_canal_2 = vdc_canal_2 / num_datos
        vdc_canal_3 = vdc_canal_3 / num_datos
        #print("Vdc Channel 1: {0}, Vdc Channel 2: {1}".format(vdc_canal_1, vdc_canal_2))

        # Substract DC offset
        for indice in X:
            canal_1[indice] -= vdc_canal_1
            canal_2[indice] -= vdc_canal_2
            canal_3[indice] -= vdc_canal_3

        #----------------- Plotting ----------
        X1 = np.linspace(0, num_datos/5, num=num_datos)     # X axis, 5000 sps, 1/5 ms.

        # Figure 1. Sampled signals.
        #Channel X
        ax_11, ax_12, ax_13 = self.canvas2.figure.get_axes()
        ax_11.clear()
        ax_11.plot(X1,canal_1)
        ax_11.set_title("Channel X")
        ax_11.set_ylabel('g')
        ax_11.grid()                       #Shows grid.
        
        #Channel Y
        ax_12.clear()
        ax_12.plot(X1,canal_2)
        ax_12.set_title("Channel Y")
        #ax_12.set_xlabel('ms')
        ax_12.set_ylabel('g')
        ax_12.grid()                       #Shows grid.

        #Channel Z
        ax_13.clear()
        ax_13.plot(X1,canal_3)
        ax_13.set_title("Channel Z")
        ax_13.set_xlabel('ms')
        ax_13.set_ylabel('g')
        ax_13.grid()                       #Shows grid.

        # Figure 2. FFT from signals.
        #Channel X
        canal_fft = []
        canal_fft = canal_1

        N = len(canal_fft)         # length of the signal

        #Window function
        if(win_var == 2):
            w = signal.hann(N, sym=False)      #Hann (Hanning) window
        elif(win_var == 3):
            w = signal.flattop(N, sym=False)   #Flattop window
        else:
            w = 1                              #Rectangular window
        
        T = 1.0 / sample_rate
        y = canal_fft
        yf = fftpack.fft(y*w)*(2/N)
        yf = yf[:int(N/2)]
        xf = np.linspace(0.0, 1.0/(2.0*T), N/2)

        ax_21, ax_22, ax_23 = self.canvas1.figure.get_axes()
        ax_21.clear()
        #ax_21.plot(xf, 2.0/N * np.abs(yf[:N/2]))
        ax_21.plot(xf, np.abs(yf))
        ax_21.grid()
        ax_21.set_title("Channel X")
        ax_21.set_ylabel('g')
        ax_21.set_xlim(xmax=max_freq)

        #Channel Y
        canal_fft = []
        canal_fft = canal_2

        N = len(canal_fft)              # length of the signal
        T = 1.0 / sample_rate
        y = canal_fft
        yf = fftpack.fft(y*w)*(2/N)
        yf = yf[:int(N/2)]
        xf = np.linspace(0.0, 1.0/(2.0*T), N/2)

        ax_22.clear()
        #ax_22.plot(xf, 2.0/N * np.abs(yf[:N/2]))
        ax_22.plot(xf, np.abs(yf))
        ax_22.grid()
        ax_22.set_title("Channel Y")
        #ax_22.set_xlabel('Hz')
        ax_22.set_xlim(xmax=max_freq)
        ax_22.set_ylabel('g')

        #Channel Z
        canal_fft = []
        canal_fft = canal_3

        N = len(canal_fft)              # length of the signal
        T = 1.0 / sample_rate
        y = canal_fft
        yf = fftpack.fft(y*w)*(2/N)
        yf = yf[:int(N/2)]
        xf = np.linspace(0.0, 1.0/(2.0*T), N/2)

        ax_23.clear()
        #ax_23.plot(xf, 2.0/N * np.abs(yf[:N/2]))
        ax_23.plot(xf, np.abs(yf))
        ax_23.grid()
        ax_23.set_title("Channel Z")
        ax_23.set_xlabel('Hz')
        #ax_23.set_xlim(xmax=max_freq)
        ax_23.set_xlim(xmax=max_freq_z)
        ax_23.set_ylabel('g')

        self.canvas1.draw()
        self.canvas2.draw()


    def win_sel(self):
        """Window selection. Every time a window is selected,
        the FFT spectrum is calculated, applying the selected window function"""
        global g_canal_1, g_canal_2, g_canal_3
        canal_1 = g_canal_1[:]            #Copy list by value not by reference
        canal_2 = g_canal_2[:]
        canal_3 = g_canal_3[:]            
        win_var = self.window_var.get()
        if(len(canal_1) != 0):            #Apply only if data available
            self.plot(self.tab1, self.tab2, canal_1, canal_2, canal_3, win_var)


    def open_file(self):
        """Opens dialog to select a file, reads data from file and plots the data"""
        ftypes = [('Text files', '*.txt'), ('All files', '*')]
        dlg = filedialog.Open(root, filetypes = ftypes)
        fl = dlg.show()
        if fl != '':
            # Open file for reading
            arch = open(fl, "r")
            datos_arch = arch.read()
            # Searches for every channel, delimited by L1, L2 and L3 tags.
            canal_1 = extraer_int_tag(datos_arch, 'L1')
            canal_2 = extraer_int_tag(datos_arch, 'L2')
            canal_3 = extraer_int_tag(datos_arch, 'L3')

            print("Amount of samples in channel 1: %s" %len(canal_1))
            print("Amount of samples on channel 2: %s" %len(canal_2))
            print("Amount of samples on channel 3: %s" %len(canal_3))
            message_string = "Amount of samples channel 1: {0} \n".format(len(canal_1))
            message_string += "Amount of samples channel 2: {0} \n".format(len(canal_2))
            message_string += "Amount of samples channel 3: {0} \n".format(len(canal_3))
            self.show_message(self.text_message, message_string)

            global g_canal_1, g_canal_2, g_canal_3
            #Keep a copy of the original values
            g_canal_1 = canal_1[:]            #Copy list by value not by reference
            g_canal_2 = canal_2[:]
            g_canal_3 = canal_3[:]

            self.window_var.set(1)        #Option rectangular window
            self.plot(self.tab1, self.tab2, canal_1, canal_2, canal_3, win_var=1)


    def save_file(self):
        ftypes = [('Text files', '*.txt'), ('All files', '*')]
        dlg = filedialog.SaveAs(root, filetypes = ftypes)
        fl = dlg.show()
        if fl != '':
            global g_canal_1, g_canal_2, g_canal_3
            if (len(g_canal_1) > 0):
                grabar(g_canal_1, g_canal_2, g_canal_3, fl)
                self.f_saved = True               #Sampled data saved
            else:
                print("No samled data to save")
                message_string = "No samled data to save\n"
                self.show_message(self.text_message, message_string)
コード例 #50
0
ファイル: client.py プロジェクト: ben-pearce/Sandpit
class Interface(Frame):

    def __init__(self, parent):
        self.parent = parent;
        Frame.__init__(self, self.parent);

        self.queue = queue.Queue(); # we have to use a queue because tkinter is not thread safe...
        
        self.chat_box = ScrolledText(self.parent, height=25);
        self.chat_box.grid(row=0);

        self.message_box = Entry(self.parent);
        self.message_box.grid(row=1, sticky='we');

        self.user_list = Listbox(self.parent, width=15, height=25);
        self.user_list.grid(row=0, column=1);
        
        self.send_button = Button(self.parent, text="Send", width=15, command=self.send_message);
        self.send_button.grid(row=1, column=1);

        self.menu = Menu(self.parent);
        server = Menu(self.menu, tearoff=0);
        
        self.menu.add_cascade(label="Server", menu=server);
        server.add_command(label="Connect", command=self.show_connect_box);
        server.add_command(label="Disconnect");
        
        root.config(menu=self.menu);

        self.write_chat_box("", "Use the menu to connect to a server.");

        self.parent.after(100, self.check_queue);

    def check_queue(self):
        try:
            f = self.queue.get(0);
            f();
            self.parent.after(100, self.check_queue);
        except queue.Empty:
            self.parent.after(100, self.check_queue);
    
    def write_chat_box(self, name, message):
        self.chat_box.insert(INSERT, "[{0}] {1}: {2}\r\n".format(strftime("%H:%M:%S"), name, message));
        
    def new_user(self, name):
        self.user_list.insert(END, name);

    def show_connect_box(self):
        self.connect_box = Toplevel();
        self.connect_box.title("Connect to a server");

        Label(self.connect_box, text="Name: ", width=10, anchor=W).grid(row=0, column=0);
        self.user_name_box = Entry(self.connect_box, width=35);
        self.user_name_box.grid(row=0, column=1, sticky='we');

        Label(self.connect_box, text="Address: ", width=10, anchor=W).grid(row=1, column=0);
        self.address_box = Entry(self.connect_box, width=35);
        self.address_box.grid(row=1, column=1, sticky='we');

        Label(self.connect_box, text="Port: ", width=10, anchor=W).grid(row=2, column=0);
        self.port_box = Entry(self.connect_box, width=35);
        self.port_box.grid(row=2, column=1, sticky='we');

        Button(self.connect_box, text="Connect", width=35, command=self.connect).grid(row=3, column=1);
        Button(self.connect_box, text="Cancel", width=15, command=self.connect_box.destroy).grid(row=3, column=0);

    def connect(self):
        self.user_name = self.user_name_box.get();
        self.address = self.address_box.get();
        self.port = self.port_box.get();

        if(len(self.user_name) == 0):
            messagebox.showinfo("Error", "Please enter a user name.", parent=self.connect_box);
            return;
        if(len(self.address) == 0):
            messagebox.showinfo("Error", "Please enter a server address.", parent=self.connect_box);
            return;
        if(len(self.port) == 0):
            messagebox.showinfo("Error", "Please enter a server port.", parent=self.connect_box);
            return;
        
        self.port = int(self.port);
        
        self.connect_box.destroy();
        
        self.client = ChatClient(self.user_name, self.address, self.port, self);
        self.client.start();

    def send_message(self):
        name = self.user_name;
        message = self.message_box.get();
        self.queue.put(
            lambda: self.client.write("%msg%{0}%{1}%".format(name, message))
        );
コード例 #51
0
ファイル: main_gui.py プロジェクト: achieverForever/NLP
class App(Frame):
  
    def __init__(self, parent):
        Frame.__init__(self, parent)   
         
        self.parent = parent
        
        self.initUI()
        
        self.bmm = BMMSegment(4)
        self.mp = MaxProbabilitySegment()
        self.tagger = HMM_Viterbi_POS_TAGGER()
        self.parser = TopDownParser()
        self.cykParser = CYKParser()
  
    def initUI(self):
      
        self.parent.title("双向最大匹配分词")
        self.pack(fill=BOTH, expand=1)

        self.columnconfigure(0, weight=3)
        self.columnconfigure(1, weight=3)
        self.columnconfigure(2, pad=7)
        self.rowconfigure(1, weight=3)
        self.rowconfigure(5, weight=3)

        self.menubar = Menu(self.parent)
        self.fileMenu = Menu(self.menubar, tearoff=0)
        self.fileMenu.add_command(label="读入规则文件", command=self.onLoadRules_CYK)
        self.fileMenu.add_separator()
        self.fileMenu.add_command(label="退出", command=self.parent.quit)
        self.menubar.add_cascade(label="文件", menu=self.fileMenu)

        self.parent.config(menu=self.menubar)

        
        self.label1 = Label(self, text="请输入PCFG语法规则或加载规则文件(如:S -> NP VP 0.1)")
        self.label1.grid(sticky=W, pady=4, padx=5)
        
        self.inputText = ScrolledText(self)
        self.inputText.grid(row=1, column=0, columnspan=2, rowspan=3, 
            padx=5, sticky=E+W+N)
        self.inputText.tag_config('highlight', background='yellow')

        self.label2 = Label(self, text='请输入文本:')
        self.label2.grid(row=4, column=0, sticky=W, pady=4, padx=5)

        self.outputText = ScrolledText(self)
        self.outputText.grid(row=5, column=0, columnspan=2, rowspan=3, 
            padx=5, sticky=E+S+W)

        self.rightFrame = Frame(self)
        self.rightFrame.grid(row=1, column=3, rowspan=7)

        self.bmmBtn = Button(self.rightFrame, text="双向最大匹配", command=self.onBMM)
        self.bmmBtn.pack(side="top", expand=True, pady=8)

        self.mpBtn = Button(self.rightFrame, text="最大概率分词", command=self.onMP)
        self.mpBtn.pack(side="top", expand=True, pady=8)

        self.hmmBtn = Button(self.rightFrame, text='HMM词性标注', command=self.onHMM)
        self.hmmBtn.pack(side="top", expand=True, pady=8)

        self.parseBtn = Button(self.rightFrame, text='语法分析', command=self.onTopdownParse)
        self.parseBtn.pack(side="top", expand=True, pady=8)

        self.cykBtn = Button(self.rightFrame, text='PCFG语法分析', command=self.onCYK)
        self.cykBtn.pack(side="top", expand=True, pady=8)

        self.reBtn = Button(self.rightFrame, text='RegEx提取信息', command=self.onRE)
        self.reBtn.pack(side="top", expand=True, pady=8)

        # HINT: Place additional button here

        self.quitBtn = Button(self.rightFrame, text="退出", command=self.onQuit)
        self.quitBtn.pack(side="top", expand=True, pady=8)


    def onQuit(self):
        self.quit()


    ##############################  BMM Segmentation #########################################
    
    def onBMM(self):
        self.outputText.delete('1.0', END)
        inStr = self.inputText.get('1.0', END).strip()

        start = time.clock()
        result = self.bmm.BMM(inStr, self.inputText)

        self.outputText.insert(INSERT, result)
        elapsed = time.clock() - start

        if result != '':
            self.label2['text'] = '分词结果    耗时: ' + '{0:.1f} ms'.format(elapsed*1000)


    ######################### Maximum Probability Segmentation ###############################

    def onMP(self):
        self.outputText.delete('1.0', END)
        inStr = self.inputText.get('1.0', END).strip()

        start = time.clock()
        result = self.mp.MaxProbability(inStr)

        self.outputText.insert(INSERT, result)
        elapsed = time.clock() - start

        if result != '':
            self.label2['text'] = '分词结果    耗时: ' + '{0:.1f} ms'.format(elapsed*1000)


    ############################## HMM Pos-tagging ##########################################

    def onHMM(self):
        self.outputText.delete('1.0', END)
        inStr = self.inputText.get('1.0', END).strip()
        if inStr == '':
            return 

        start = time.clock()

        segmented = self.mp.MaxProbability(inStr)

        obs = [w.strip('/') for w in segmented.split()]
        result = self.tagger.Viterbi(obs)
        elapsed = time.clock() - start

        self.outputText.insert(INSERT, result)

        if result != '':
            self.label2['text'] = '词性标注结果     耗时: ' + '{0:.1f} ms'.format(elapsed*1000)


    ##############################  Top-down parsing #########################################

    def onTopdownParse(self):
        inStr = self.outputText.get('1.0', END).strip()
        if inStr == '':
            sentence = ['the', 'old', 'man', 'cried']
            self.outputText.insert(INSERT, ' '.join(sentence))
        else:
            sentence = inStr.strip().split()

        start = time.clock()
        succeed = self.parser.parse(sentence)
        elapsed = time.clock() - start

        if succeed:
            self.label2['text'] = '语法分析完成     结果:成功       耗时:' + '{0:.1f} ms'.format(elapsed*1000)
            newWindow = Toplevel(self)
            newWindow.title('自顶向下语法分析')
            self.textbox = Entry(newWindow)
            self.textbox.pack(fill=X, expand=1)
            self.tree = Treeview(newWindow)
            self.tree.heading('#0', text='语法树', anchor='w')
            self.tree.pack(fill=BOTH, expand=1)

            parseString = self.parser.printParseTree()
            self.textbox.insert(INSERT, parseString)

            self.buildParseTree_TopDown('', 'S', self.parser.rules, self.parser.choices)            
        else:
            self.label2['text'] = '语法分析完成     结果:失败       耗时:' + '{0:.1f} ms'.format(elapsed*1000)

    def onLoadRules_TopDown(self):
        fname = askopenfilename(initialdir='./data', initialfile='rules.txt')
        if fname != '':
            self.inputText.delete('1.0', END)
            with open(fname) as f:
                self.inputText.insert(INSERT, f.read())
            self.parser.loadRules(fname)

    def buildParseTree_TopDown(self, parent, symbol, rules, choices):
        if choices[symbol] == -1:
            newNode = self.tree.insert(parent, 'end', text=symbol, open=True)
            self.tree.insert(newNode, 'end', text=' | '.join(rules[symbol][0]))
        else:
            c = choices[symbol]
            newParent = self.tree.insert(parent, 'end', text=symbol, open=True)
            for symbl in rules[symbol][c]:
                self.buildParseTree_TopDown(newParent, symbl, rules, choices)
    

    ##############################  CYK-PCFG parsing #########################################

    def onLoadRules_CYK(self):
        fname = askopenfilename(initialdir='./data', initialfile='rules_pcfg.txt')
        if fname != '':
            self.inputText.delete('1.0', END)
            with open(fname) as f:
                self.inputText.insert(INSERT, f.read())
            self.parser.loadRules(fname)

    def buildParseTree_CYK(self, parent, beg, end, symbol_id):
        backPt = self.cykParser.BP[beg][end][symbol_id]
        symbol = self.cykParser.id2symb[symbol_id]

        if backPt.s == -1:
            newNode = self.tree.insert(parent, 'end', text=symbol, open=True)
            self.tree.insert(newNode, 'end', text=self.cykParser.words[beg-1], open=True)
        else:
            newParent = self.tree.insert(parent, 'end', text=symbol, open=True)
            self.buildParseTree_CYK(newParent, beg, backPt.s, backPt.Y)
            self.buildParseTree_CYK(newParent, backPt.s+1, end, backPt.Z)

    def onCYK(self):
        inStr = self.outputText.get('1.0', END).strip()
        if inStr == '':
            sentence = 'fish people fish tanks'
            self.outputText.insert(INSERT, sentence)
        else:
            sentence = inStr

        start = time.clock()
        parseString, prob = self.cykParser.parse(sentence)
        elapsed = time.clock() - start

        self.label2['text'] = 'PCFG语法分析完成     结果:成功       耗时:' + '{0:.1f} ms'.format(elapsed*1000)
        newWindow = Toplevel(self)
        newWindow.title('PCFG语法分析')
        self.textbox = Entry(newWindow)
        self.textbox.pack(fill=X, expand=1)
        self.tree = Treeview(newWindow)
        self.tree.heading('#0', text='语法树 (概率:{0:.8f})'.format(prob), anchor='w')
        self.tree.pack(fill=BOTH, expand=1)

        self.textbox.insert(INSERT, parseString)

        self.buildParseTree_CYK('', 1, len(self.cykParser.words), self.cykParser.symb2id['S'])

    def onRE(self):
        window = Toplevel(self)
        window.title('正则表达式信息提取')
        label = Label(window)
        label.pack()
        result = ScrolledText(window)
        result.pack(fill=BOTH, expand=1)

        htmlFile = 'data/凤凰网.html'
        
        start = time.clock()
        titles = regex.fetchTitles(htmlFile)
        links = regex.fetchLinks(htmlFile)
        elapsed = time.clock() - start

        label['text'] = '耗时:  {0:.1f} ms'.format(elapsed*1000)

        result.insert(INSERT, 'Titles:\n')
        result.insert(INSERT, '\n'.join(titles))

        result.insert(INSERT, '\n\nLinks:\n')
        result.insert(INSERT, '\n'.join(links))
コード例 #52
0
class AppletEditTimecard(object):  # pylint: disable=too-many-instance-attributes
    """"""

    def __init__(self, parent):
        """"""

        self.parent = parent
        self.timecard_obj = None
        self.edit_amt_app = None
        self.root = tkinter.Toplevel()
        self.root.iconify()
        self.root.title('Edit Timecard')
        self.root.geometry('800x%s' % 600)
        self.msgvar = tkinter.StringVar(self.root)
        self.date = tkinter.StringVar(self.root)
        tkinter.Label(
            self.root,
            text='Description'
        ).grid(row=0, column=0)
        self.msg = tkinter.Message(
            self.root,
            textvariable=self.msgvar
        ).grid(row=0, column=1, sticky=tkinter.E)
        tkinter.Label(
            self.root,
            text='Date'
        ).grid(row=1, column=0, sticky=tkinter.E)
        tkinter.Entry(
            self.root,
            textvariable=self.date
        ).grid(row=1, column=1, sticky=tkinter.W)
        tkinter.Label(
            self.root,
            text='Notes'
        ).grid(row=2, column=0, sticky=tkinter.E)
        self.notes_entry = ScrolledText(self.root, height=10)
        self.notes_entry.grid(row=2, column=1, sticky=tkinter.W)
        tkinter.Label(
            self.root,
            text='Period Start'
        ).grid(row=3, column=0, sticky=tkinter.E)
        self.period_start = tkinter.StringVar(self.root)
        self.period_start_entry = tkinter.Entry(self.root, textvariable=self.period_start)
        self.period_start_entry.grid(row=3, column=1, sticky=tkinter.W)
        period_end_label = tkinter.Label(self.root, text='Period End')
        period_end_label.grid(row=4, column=0, sticky=tkinter.E)
        self.period_end = tkinter.StringVar(self.root)
        self.period_end_entry = tkinter.Entry(self.root, textvariable=self.period_end)
        self.period_end_entry.grid(row=4, column=1, sticky=tkinter.W)
        message_label = tkinter.Label(self.root, text='Message')
        message_label.grid(row=5, column=0, sticky=tkinter.E)
        self.message_entry = tkinter.Text(self.root, height=2)
        self.message_entry.grid(row=5, column=1, sticky=tkinter.W)
        button_frame = tkinter.Frame(self.root)
        button_frame.grid(row=6, column=1, sticky=tkinter.E)
        save_button = tkinter.Button(
            button_frame,
            text="Save",
            name="save-button",
            command=self.save_btn,
            padx=7, pady=2)
        save_button.pack(side='left')
        edit_amounts_btn = tkinter.Button(
            button_frame,
            text="Edit Amounts",
            name="edit-amounts-button",
            command=self.edit_amounts_btn_cb,
            padx=7, pady=2)
        edit_amounts_btn.pack(side='left')
        cancel_button = tkinter.Button(
            button_frame,
            text="Cancel",
            name="cancel-button",
            command=self.cancel_btn,
            padx=7, pady=2)
        cancel_button.pack(side='left')

    def cancel_btn(self):
        """"""

        self.parent.root.deiconify()
        self.root.iconify()

    def edit_amounts_btn_cb(self):
        """"""
        if self.edit_amt_app is None:
            self.edit_amt_app = AppletEditTimecardAmounts(self)
        self.root.iconify()
        self.edit_amt_app.root.deiconify()
        self.edit_amt_app.set_edit_form(self.timecard_obj)

    def form_to_obj(self):
        """Update Timecard obj from form"""

        self.timecard_obj.period_start = dt.strptime(self.period_start.get(),
                        api.DATE_INPUT_FORMAT).strftime(api.DATE_ISO_FORMAT)
        self.timecard_obj.period_end = dt.strptime(
            self.period_end.get(), api.DATE_INPUT_FORMAT).strftime(api.DATE_ISO_FORMAT)
        self.timecard_obj.date = dt.strptime(self.date.get(), api.DATE_INPUT_FORMAT).strftime(api.DATE_ISO_FORMAT)
        self.timecard_obj.message = self.message_entry.get('1.0', 'end-1c')
        self.timecard_obj.notes = self.notes_entry.get('1.0', 'end-1c')

    def save_btn(self):
        """Saves edited timecard before posting."""

        self.form_to_obj()
        print(self.timecard_obj.to_dict())
        result = api.TimecardSchema().load(self.timecard_obj.to_dict())
        if result.errors:
            print(result.errors)
        else:
            lib.save_timecard(self.timecard_obj.to_dict())
            self.root.iconify()
            self.parent.root.deiconify()
            self.parent.load()

    def set_edit_form(self, timecard_dict):
        """"""

        self.timecard_obj = api.Timecard(**timecard_dict)
        self.root.title('Edit Timecard Number %s' % self.timecard_obj.id)
        self.date.set(dt.strptime(
                self.timecard_obj.date,
                api.DATE_ISO_FORMAT).strftime(api.DATE_INPUT_FORMAT))
        self.notes_entry.delete('1.0', tkinter.END)
        self.notes_entry.insert(
            tkinter.END, self.timecard_obj.notes if self.timecard_obj.notes else '')
        self.period_start.set(
            dt.strptime(
                self.timecard_obj.period_start,
                api.DATE_ISO_FORMAT).strftime(api.DATE_INPUT_FORMAT))
        self.period_end.set(
            dt.strptime(
                self.timecard_obj.period_end, api.DATE_ISO_FORMAT).strftime(api.DATE_INPUT_FORMAT))
        self.message_entry.delete('1.0', tkinter.END)
        self.message_entry.insert(
            tkinter.END, self.timecard_obj.message if self.timecard_obj.message else '')

        self.update_summary()


    def update_summary(self):
        """"""

        set_edit_timecard_msg(self.msgvar, self.timecard_obj)
コード例 #53
0
def onlineconversion(Ref,tab_onlineconversion):

##online conversion tab
# Title
    r=0
    tle_onlineconversion = Label(tab_onlineconversion, text="PTV Online Conversion", font=("Arial Bold", 30))
    tle_onlineconversion.grid(column=0, row=r)
    
    #ticket
    r=r+1
    tkt_lbl_onlineconversion=Label(tab_onlineconversion, text="Ticket", font=("Arial",10))
    tkt_lbl_onlineconversion.grid(column=0, row=r)
    ticket_onlineconversion = Entry(tab_onlineconversion,width=10)
    ticket_onlineconversion.grid(column=1, row=r)
    
    #conversion start date
    r=r+1
    conversion_start_lbl_onlineconversion=Label(tab_onlineconversion,text="Conversion Start Date (example: 2018-1-31)", font=("Arial",10))
    conversion_start_lbl_onlineconversion.grid(column=0, row=r)
    conversion_start_date_onlineconversion = DateEntry(tab_onlineconversion, font=('Helvetica', 10, tk.NORMAL), border=0)
    conversion_start_date_onlineconversion.grid(column=1,row=r)
    
    #conversion end date
    r=r+1
    conversion_end_lbl_onlineconversion=Label(tab_onlineconversion,text="Conversion End Date (example: 2018-1-31)", font=("Arial",10))
    conversion_end_lbl_onlineconversion.grid(column=0, row=r)
    conversion_end_date_onlineconversion = DateEntry(tab_onlineconversion, font=('Helvetica', 10, tk.NORMAL), border=0)
    conversion_end_date_onlineconversion.grid(column=1,row=r)
    
    #Conversion
    r=r+1
    conversion_lbl_onlineconversion1=Label(tab_onlineconversion,text="Define conversion", font=("Arial",15))
    conversion_lbl_onlineconversion1.grid(column=0, row=r+4)
    conversion_lbl_onlineconversion2=Label(tab_onlineconversion,text="Pattern: 'name:cpk'", font=("Arial",10))
    conversion_lbl_onlineconversion2.grid(column=0, row=r+5)
    conversion_lbl_onlineconversion3=Label(tab_onlineconversion,text="Example: 'Homepage:abE304245Sgbrw'", font=("Arial",10))
    conversion_lbl_onlineconversion3.grid(column=0, row=r+6)
    conversion_onlineconversion=[]
    for i in list(range(0,9)):
        conversion_onlineconversion.append(PairEntry(tab_onlineconversion,font=("Arial",10,tk.NORMAL),border=0))
        conversion_onlineconversion[i].grid(column=1,row=r)
        i=i+1
        r=r+1
        
    #campaign start date
    r=r+1
    campaign_start_lbl_onlineconversion=Label(tab_onlineconversion,text="Campaign Start Date (example: 2018-1-31)", font=("Arial",10))
    campaign_start_lbl_onlineconversion.grid(column=0, row=r)
    campaign_start_date_onlineconversion = DateEntry(tab_onlineconversion, font=('Helvetica', 10, tk.NORMAL), border=0)
    campaign_start_date_onlineconversion.grid(column=1,row=r)
    
    
    #campaign end date
    r=r+1
    campaign_end_lbl_onlineconversion=Label(tab_onlineconversion,text="Campaign End Date (example: 2018-1-31)", font=("Arial",10))
    campaign_end_lbl_onlineconversion.grid(column=0, row=r)
    campaign_end_date_onlineconversion = DateEntry(tab_onlineconversion, font=('Helvetica', 10, tk.NORMAL), border=0)
    campaign_end_date_onlineconversion.grid(column=1,row=r)
    
    #ISCIs
    r=r+1
    ISCI_lbl_onlineconversion=Label(tab_onlineconversion,text="ISCIs", font=("Arial",10))
    ISCI_lbl_onlineconversion.grid(column=0, row=r)
    #ISCIs_onlineconversion = AutocompleteEntry(tab_onlineconversion)
    #ISCIs_onlineconversion.build(entries=commercials)
    #ISCIs_onlineconversion.LISTBOX_HEIGHT=10
    #ISCIs_onlineconversion.pack()  
    ISCIs_onlineconversion = ScrolledText(tab_onlineconversion,width  = 25, height = 6)
    ISCIs_onlineconversion.grid(column=1, row=r)
    
    # Networks
    r=r+1
    Network_lbl_onlineconversion1=Label(tab_onlineconversion,text="Neworks", font=("Arial",10))
    Network_lbl_onlineconversion1.grid(column=0, row=r)
    Network_lbl_onlineconversion2=Label(tab_onlineconversion,text="Example: 'Adobe:ABC,ESPNHD,CCHD'", font=("Arial",10))
    Network_lbl_onlineconversion2.grid(column=0, row=r+1)
    network_onlineconversion=[]
    for i in list(range(0,3)):
        network_onlineconversion.append(PairEntry(tab_onlineconversion,font=("Arial",10,tk.NORMAL),border=0))
        network_onlineconversion[i].grid(column=1,row=r)
        i=i+1
        r=r+1
        
    # lift cuts
    r=r+1
    Lift_lbl_onlineconversion=Label(tab_onlineconversion,text="Lift Analysis", font=("Arial",10))
    Lift_lbl_onlineconversion.grid(column=0,row=r)
    Lift_onlineconversion = Listbox(tab_onlineconversion, selectmode = "multiple",height=5 )
    Lift_List=['Overall','Network','NetworkDaypart','Day','Frequency','Commerical']
    for i in list(range(0,len(Lift_List))):
        Lift_onlineconversion.insert(i,Lift_List[i])
    Lift_onlineconversion.grid(column=1,row=r)

    
    #submit button
    r=r+1
    def clicked_onlineconversion():
        error_message=''
        ticket_input=''
        
        #check ticket number input
        try:
            ticket=ticket_onlineconversion.get()
            tkt=int(ticket)
            ticket_input=ticket_input+"ticket='"+ticket+"' \n"
        except:
            error_message="Please submit a ticket in number. \n"
        
        #Check all date field
        all_dates=[]
        dates = namedtuple("dates", ["name", "widget"])
        date_fields=[dates('conversion_start_date',conversion_start_date_onlineconversion),
                     dates('conversion_end_date',conversion_end_date_onlineconversion),
                     dates('tv_campaign_start_date',campaign_start_date_onlineconversion),
                     dates('tv_campaign_end_date',campaign_end_date_onlineconversion)]
        for dt in date_fields:
            try:
                d=[int(x) for x in dt.widget.get()]
                all_dates.append(datetime(d[0],d[1],d[2]))
                d=[str(x) for x in d]
                ticket_input=ticket_input+dt.name+"=datetime("+d[0]+","+d[1]+","+d[2]+") \n"
            except:
                error_message=error_message+"Please input a valid "+dt.name+". \n"
        #print(date_fields)      
        
        try:
            if all_dates[0]>all_dates[1]:
                error_message=error_message+"Please have conversion end date after conversion start date. \n"
        except:
            print()
        try:
            if all_dates[2]>all_dates[3]:
                error_message=error_message+"Please have campaign end date after campaign start date. \n"
        except:
            print()

        #Check all conversions
        error_conversion=''
        conversion=[x.get() for x in conversion_onlineconversion]
        conversion=[x for x in conversion if x[0]!='' or x[1]!='']
        
        if len(conversion)==0:
            error_conversion=error_conversion+"Please define conversions. \n"
        conv_name=[x[0].replace(' ','') for x in conversion]
        conv_pixel=[x[1].replace(' ','') for x in conversion]
        if '' in conv_name or '' in conv_pixel:
            error_conversion=error_conversion+"Please define all conversions. \n"
        wrong_pixel=[x for x in conv_pixel if re.compile('[A-Za-z0-9]+').sub('', x)!='']
        if len(wrong_pixel)>0:
            error_conversion=error_conversion+"Please make sure conversion pixels can only have number or letter. \n"
        wrong_name=[x for x in conv_name if re.compile('[A-Za-z0-9_]+').sub('', x)!='' or re.compile('[A-Za-z]+').sub('', x[0])!='' ]
        if len(wrong_name)>0:
            error_conversion=error_conversion+"Please make sure conversion names must starts with letter and can only contain letter, number or '_'. \n"
         
        if error_conversion=='':
            ticket_input=ticket_input+"conversions = namedtuple('conversions', ['pixel', 'name']) \n"
            ticket_input=ticket_input+"segment=["+",".join(["conversions('"+x[1]+"','"+x[0]+"')" for x in conversion])
            ticket_input=ticket_input+"] \n"
        else:
            error_message=error_message+error_conversion

        #check ISCIs
        error_ISCI=''
        ISCIs=ISCIs_onlineconversion.get(1.0,END)
        ISCIs=[x for x in ISCIs.split("\n") if x!='']
        if len(ISCIs)==0: 
            error_ISCI=error_ISCI+"Please input ISCIs. \n"
        commercials=pd.read_csv(Ref+"Vizio_Commercial_IDs.csv")
        commercials=list(commercials['commercial_id'].unique())
        ISCIs_wrong=[x for x in ISCIs if x not in commercials]
        if len(ISCIs_wrong)>0:
            error_ISCI=error_ISCI+"Please check following ISCIs: "+",".join(ISCIs_wrong)+". \n"
        if error_ISCI=='':
            ticket_input=ticket_input+"ISCI=['"+",'".join(ISCIs)+"'] \n"
        else:
            error_message=error_message+error_ISCI
        
        
        #Check Networks
        error_network=''
        network=[x.get() for x in network_onlineconversion]
        network=[[x[0].replace(' ',''),x[1].replace(' ','')] for x in network if x[0]!='' or x[1]!='']
        
        if len(network)==0:
            error_network=error_network+"Please define plans. \n"
        plan=[x[0].replace(' ','') for x in network]
        networks=[x[1].replace(' ','') for x in network]

        if '' in plan or '' in networks:
            error_network=error_network+"Please define all plans. \n"
        wrong_name=[x for x in plan if re.compile('[A-Za-z0-9_]+').sub('', x)!='' or re.compile('[A-Za-z]+').sub('', x[0])!='' ]
        if len(wrong_name)>0:
            error_network=error_network+"Please make sure plan names must starts with letter and can only contain letter, number or '_'. \n"
        
        affiliate=pd.read_csv(Ref+'Vizio_Networks_Affiliates.csv')
        affiliate=list(affiliate['Station_affiliate'].unique())
        
        for n in networks:
            nw=n.split(',')
            nw_wrong=[n for n in nw if n not in affiliate]
            if len(nw_wrong)>0:
                error_network=error_network+"Please check following network names: "+",".join(nw_wrong)+". \n"
        
        if error_network=='':
            ticket_input=ticket_input+"Networks=["
            ticket_input=ticket_input+",".join(["[['"+x[1].replace(",","','")+"'],'"+x[0]+"']" for x in network])
            ticket_input=ticket_input+"] \n"
        else:
            error_message=error_message+error_network 
            
        #check lift cuts
        Lift=Lift_onlineconversion.curselection()
        lift=[]
        for i in Lift:
            lift.append(Lift_List[i])
        if len(lift)==0: 
            error_message=error_message+"Please select lift analysis. \n"
        else:
            ticket_input=ticket_input+"Deliverable=['"+",'".join(lift)+"'] \n"
        
        #final output
        if error_message!="":
            messagebox.showinfo('Error', error_message)
        else:
            messagebox.showinfo('Ticket Input', ticket_input)
    
    submit_onlineconversion = Button(tab_onlineconversion, text="Submit", command=clicked_onlineconversion)
    submit_onlineconversion.grid(column=0, row=r)
コード例 #54
0
ファイル: TextEditor.py プロジェクト: Drax-il/TextEditor
class Application(tkinter.Tk):
    def __init__(self):
        """Initialize widgets, methods."""

        tkinter.Tk.__init__(self)
        self.grid()

        fontoptions = families(self)
        font = Font(family="Verdana", size=10)

        menubar = tkinter.Menu(self)
        fileMenu = tkinter.Menu(menubar, tearoff=0)
        editMenu = tkinter.Menu(menubar, tearoff=0)
        fsubmenu = tkinter.Menu(editMenu, tearoff=0)
        ssubmenu = tkinter.Menu(editMenu, tearoff=0)

        # adds fonts to the font submenu and associates lambda functions
        for option in fontoptions:
            fsubmenu.add_command(label=option, command = lambda: font.configure(family=option))
        # adds values to the size submenu and associates lambda functions
        for value in range(1,31):
            ssubmenu.add_command(label=str(value), command = lambda: font.configure(size=value))

        # adds commands to the menus
        menubar.add_cascade(label="File",underline=0, menu=fileMenu)
        menubar.add_cascade(label="Edit",underline=0, menu=editMenu)
        fileMenu.add_command(label="New", underline=1,
                             command=self.new, accelerator="Ctrl+N")
        fileMenu.add_command(label="Open", command=self.open, accelerator="Ctrl+O")
        fileMenu.add_command(label="Save", command=self.save, accelerator="Ctrl+S")
        fileMenu.add_command(label="Exit", underline=1,
                             command=exit, accelerator="Ctrl+Q")
        editMenu.add_command(label="Copy", command=self.copy, accelerator="Ctrl+C")
        editMenu.add_command(label="Cut", command=self.cut, accelerator="Ctrl+X")
        editMenu.add_command(label="Paste", command=self.paste, accelerator="Ctrl+V")
        editMenu.add_cascade(label="Font", underline=0, menu=fsubmenu)
        editMenu.add_cascade(label="Size", underline=0, menu=ssubmenu)
        editMenu.add_command(label="Color", command=self.color)
        editMenu.add_command(label="Bold", command=self.bold, accelerator="Ctrl+B")
        editMenu.add_command(label="Italic", command=self.italic, accelerator="Ctrl+I")
        editMenu.add_command(label="Underline", command=self.underline, accelerator="Ctrl+U")
        editMenu.add_command(label="Overstrike", command=self.overstrike, accelerator="Ctrl+T")
        editMenu.add_command(label="Undo", command=self.undo, accelerator="Ctrl+Z")
        editMenu.add_command(label="Redo", command=self.redo, accelerator="Ctrl+Y")
        self.config(menu=menubar)

        """Accelerator bindings. The cut, copy, and paste functions are not
        bound to keyboard shortcuts because Windows already binds them, so if
        Tkinter bound them as well whenever you typed ctrl+v the text would be
        pasted twice."""
        self.bind_all("<Control-n>", self.new)
        self.bind_all("<Control-o>", self.open)
        self.bind_all("<Control-s>", self.save)
        self.bind_all("<Control-q>", self.exit)
        self.bind_all("<Control-b>", self.bold)
        self.bind_all("<Control-i>", self.italic)
        self.bind_all("<Control-u>", self.underline)
        self.bind_all("<Control-T>", self.overstrike)
        self.bind_all("<Control-z>", self.undo)
        self.bind_all("<Control-y>", self.redo)

        self.text = ScrolledText(self, state='normal', height=30, wrap='word', font = font, pady=2, padx=3, undo=True)
        self.text.grid(column=0, row=0, sticky='NSEW')

        # Frame configuration
        self.grid_columnconfigure(0, weight=1)
        self.resizable(True, True)

    """Command functions. *args is included because the keyboard bindings pass
    two arguments to the functions, while clicking in the menu passes only 1."""

    def new(self, *args):
        """Creates a new window."""
        app = Application()
        app.title('Python Text Editor')
        app.option_add('*tearOff', False)
        app.mainloop()

    def color(self):
        """Changes selected text color."""
        try:
            (rgb, hx) = tkinter.colorchooser.askcolor()
            self.text.tag_add('color', 'sel.first', 'sel.last')
            self.text.tag_configure('color', foreground=hx)
        except TclError:
            pass

    def bold(self, *args):
        """Toggles bold for selected text."""
        try:
            current_tags = self.text.tag_names("sel.first")
            if "bold" in current_tags:
                self.text.tag_remove("bold", "sel.first", "sel.last")
            else:
                self.text.tag_add("bold", "sel.first", "sel.last")
                bold_font = Font(self.text, self.text.cget("font"))
                bold_font.configure(weight="bold")
                self.text.tag_configure("bold", font=bold_font)
        except TclError:
            pass

    def italic(self, *args):
        """Toggles italic for selected text."""
        try:
            current_tags = self.text.tag_names("sel.first")
            if "italic" in current_tags:
                self.text.tag_remove("italic", "sel.first", "sel.last")
            else:
                self.text.tag_add("italic", "sel.first", "sel.last")
                italic_font = Font(self.text, self.text.cget("font"))
                italic_font.configure(slant="italic")
                self.text.tag_configure("italic", font=italic_font)
        except TclError:
            pass

    def underline(self, *args):
        """Toggles underline for selected text."""
        try:
            current_tags = self.text.tag_names("sel.first")
            if "underline" in current_tags:
                self.text.tag_remove("underline", "sel.first", "sel.last")
            else:
                self.text.tag_add("underline", "sel.first", "sel.last")
                underline_font = Font(self.text, self.text.cget("font"))
                underline_font.configure(underline=1)
                self.text.tag_configure("underline", font=underline_font)
        except TclError:
            pass

    def overstrike(self, *args):
        """Toggles overstrike for selected text."""
        try:
            current_tags = self.text.tag_names("sel.first")
            if "overstrike" in current_tags:
                self.text.tag_remove("overstrike", "sel.first", "sel.last")
            else:
                self.text.tag_add("overstrike", "sel.first", "sel.last")
                overstrike_font = Font(self.text, self.text.cget("font"))
                overstrike_font.configure(overstrike=1)
                self.text.tag_configure("overstrike", font=overstrike_font)
        except TclError:
            pass

    def undo(self, *args):
        """Undo function"""
        try:
            self.text.edit_undo()
        except TclError:
            pass

    def redo(self, *args):
        """Redo function"""
        try:
            self.text.edit_redo()
        except TclError:
            pass

    def copy(self, *args):
        """Copy text"""
        self.clipboard_clear()
        self.clipboard_append(self.text.selection_get())

    def cut(self, *args):
        """Cut text"""
        self.copy
        self.text.delete("sel.first", "sel.last")

    def paste(self, *args):
        """Paste text"""
        insertion = self.selection_get(selection = "CLIPBOARD")
        self.text.insert(0.0, insertion)

    def open(self, *args):
        """Opens a file dialog to open a plain text file."""
        filename = tkinter.filedialog.askopenfilename()

        with open(filename) as f:
            text = f.read()

        self.text.delete("1.0", "end")
        self.text.insert('insert', text)

    def save(self, *args):
        try:
            """Opens a file dialog to save the text in plain text format."""
            text = self.text.get("1.0", "end")
            filename = tkinter.filedialog.asksaveasfilename()

            with open(filename, 'w') as f:
                f.write(text)
        except FileNotFoundError:
            pass

    def exit(self, *args):
        """Exits the program."""
        self.quit()
コード例 #55
0
ファイル: Express.py プロジェクト: liukangxu/ExpressManager
class ExpressQuery(Frame):
    def __init__(self, master):
        Frame.__init__(self, master)
        self.root = master
        self.root.bind_all('<F5>', self.update_all_posts)
        self.root.bind_all('<Escape>', self.clear_input)
        self.all_posts = {}  # 运单列表
        self.root.title('快递助手 v1.2')
        self.root.iconbitmap('logo.ico')
        self.root.resizable(width=False, height=False)

        self.auto_company_url = 'http://www.kuaidi100.com/autonumber/autoComNum?text='
        self.query_url = 'http://www.kuaidi100.com/query?'

        with open('company_codes.json', 'r', encoding='utf-8') as f:
            self.company_codes = json.loads(f.read())
            self.company_names = dict((v, k) for k, v in self.company_codes.items())
        with open('state.json', 'r', encoding='utf-8') as f:
            self.state = json.loads(f.read())

        parent_frame = Frame(self.root)
        parent_frame.grid(padx=10, pady=10, stick=E + W + N + S)

        add_post_group = Frame(parent_frame)
        post_id_label = Label(add_post_group, text='运单号:')
        self.post_id_var = tkinter.StringVar()  # 运单号
        self.post_id_field = Entry(add_post_group, width=20, textvariable=self.post_id_var)
        self.post_id_field.bind('<Return>', self.handle_add_post)
        post_note_label = Label(add_post_group, text='备注:')
        self.post_note_var = tkinter.StringVar()  # 运单注释
        post_note_field = Entry(add_post_group, width=20, textvariable=self.post_note_var)
        post_note_field.bind('<Return>', self.handle_add_post)
        post_company_label = Label(add_post_group, text='公司:')
        self.post_company_name_var = tkinter.StringVar()
        self.post_company_field = Combobox(add_post_group, textvariable=self.post_company_name_var,
                                           values=list(self.company_names.values()), width=12)
        post_add_button = Button(add_post_group, text='添加', width=10, command=self.handle_add_post)
        clear_input_button = Button(add_post_group, text='清空', width=10, command=self.clear_input)

        post_id_label.grid(row=0, column=0)
        self.post_id_field.grid(row=0, column=1)
        post_note_label.grid(row=0, column=2)
        post_note_field.grid(row=0, column=3)
        post_company_label.grid(row=0, column=4)
        self.post_company_field.grid(row=0, column=5)
        post_add_button.grid(row=0, column=6, padx=5)
        clear_input_button.grid(row=0, column=7, padx=5)
        self.post_id_field.focus_set()

        show_posts_group = Frame(parent_frame)
        self.posts = Treeview(show_posts_group, height=10, selectmode='browse',
                              columns=('note', 'company_name', 'state', 'last_update'))  # 运单列表框
        self.x_scrollbar = Scrollbar(show_posts_group, orient=tkinter.HORIZONTAL, command=self.posts.xview)
        self.y_scrollbar = Scrollbar(show_posts_group, orient=tkinter.VERTICAL, command=self.posts.yview)
        self.posts.config(xscroll=self.x_scrollbar.set, yscroll=self.y_scrollbar.set)
        self.posts.column('#0', width=130)
        self.posts.heading('#0', text='运单号')
        self.posts.column('note', width=130)
        self.posts.heading('note', text='备注')
        self.posts.column('company_name', width=80)
        self.posts.heading('company_name', text='公司名称')
        self.posts.column('state', width=180)
        self.posts.heading('state', text='运单状态')
        self.posts.column('last_update', width=150)
        self.posts.heading('last_update', text='最后更新')
        self.posts.bind('<<TreeviewSelect>>', self.show_post_detail)
        self.posts.bind('<Delete>', self.remove_post)
        self.post_detail = ScrolledText(show_posts_group, bg='white', width=92, height=16, state=tkinter.DISABLED)
        self.posts.grid(row=0, column=0, sticky=W + N + S)
        self.x_scrollbar.grid(row=1, column=0, sticky=E + W)
        self.y_scrollbar.grid(row=0, column=1, sticky=N + S)
        self.post_detail.grid(row=2, column=0, sticky=W + N + S, padx=(0, 10))
        status_label = Label(parent_frame, text='F5 更新全部运单动态')

        add_post_group.grid(row=0, column=0)
        show_posts_group.grid(row=1, column=0)
        status_label.grid(row=2, column=0)

        self.get_history()

    # 获取历史记录
    def get_history(self):
        try:
            with open('history.json', 'r', encoding='utf-8') as f:
                self.all_posts = json.loads(f.read())
            for post_id in self.all_posts:
                self.posts.insert('', 0, post_id,
                                  text=post_id,
                                  values=(self.all_posts[post_id]['note'],
                                          self.all_posts[post_id]['company_name'],
                                          self.state[self.all_posts[post_id]['state']],
                                          self.all_posts[post_id]['last_update']))
        except ValueError:
            with open('history.json', 'w', encoding='utf-8') as f:
                json.dump(self.all_posts, f)
            print('No history record found')

    # 保存运单记录
    def save_history(self):
        with open('history.json', 'w', encoding='utf-8') as f:
            json.dump(self.all_posts, f)

    # 新增运单
    def handle_add_post(self, event=None):
        if self.post_id_var.get() == '':
            return

        if self.post_company_name_var.get():
            company_code = self.company_codes[self.post_company_name_var.get()]
        else:
            try:
                with request.urlopen(self.auto_company_url + self.post_id_var.get()) as response:
                    company_code = json.loads(response.read().decode())['auto'][0]['comCode']
            except IndexError:
                return

        post = {
            'post_id': self.post_id_var.get(),
            'company_code': company_code,
            'company_name': self.company_names[company_code],
            'note': self.post_note_var.get()}

        self.all_posts[post['post_id']] = post

        try:
            self.posts.index(post['post_id'])
        except tkinter.TclError:
            self.posts.insert('', 0, self.post_id_var.get(), text='%s' % self.post_id_var.get())

        handle_add_post = threading.Thread(target=self.handle_add_post_thread, args=(post,))
        handle_add_post.start()

        self.clear_input()

    def handle_add_post_thread(self, post):
        self.update_post_detail_thread(post)
        self.posts.selection_set(post['post_id'])
        self.save_history()

    # 清空输入框
    def clear_input(self, event=None):
        self.post_id_var.set('')
        self.post_note_var.set('')
        self.post_company_name_var.set('')
        self.post_id_field.focus_set()

    # 移除运单
    def remove_post(self, event=None):
        self.all_posts.pop(self.posts.selection()[0])
        self.posts.delete(self.posts.selection()[0])
        self.post_detail.config(state=tkinter.NORMAL)
        self.post_detail.delete('1.0', tkinter.END)
        self.post_detail.config(state=tkinter.DISABLED)
        self.save_history()
        self.clear_input()

    # 更新全部运单动态
    def update_all_posts(self, event=None):
        update_all_posts = threading.Thread(target=self.update_all_posts_thread)
        update_all_posts.start()

    def update_all_posts_thread(self):
        pool = ThreadPool(4)
        posts = list(self.all_posts.values())
        pool.map(self.update_post_detail, posts)
        pool.close()
        pool.join()
        self.save_history()

    # 更新单个运单状态
    def update_post_detail(self, post=None):
        update_post_detail  = threading.Thread(target=self.update_post_detail_thread)
        update_post_detail.start()

    def update_post_detail_thread(self, post=None):
        if not post:
            post = self.all_posts[self.posts.selection()[0]]
        with request.urlopen(self.query_url + 'type=' + post['company_code'] + '&postid=' + post['post_id'])\
                as response:
            obj = json.loads(response.read().decode())
            self.all_posts[post['post_id']]['status'] = obj['status']
            if obj['status'] == '200':
                self.all_posts[post['post_id']]['data'] = obj['data']
                self.all_posts[post['post_id']]['state'] = obj['state']
                self.all_posts[post['post_id']]['last_update'] = obj['data'][0]['time']
            else:
                self.all_posts[post['post_id']]['data'] = [{'time': '快递公司参数异常',
                                                            'context': '单号不存在或者已经过期'}]
                self.all_posts[post['post_id']]['state'] = '-1'
                self.all_posts[post['post_id']]['last_update'] = ''
        self.posts.item(post['post_id'],
                        values=(post['note'], post['company_name'], self.state[post['state']], post['last_update']))

    # 显示运单详情
    def show_post_detail(self, event=None):
        selected_post = self.all_posts[self.posts.selection()[0]]
        self.post_id_var.set(selected_post['post_id'])
        self.post_note_var.set(selected_post['note'])
        self.post_company_name_var.set(selected_post['company_name'])

        self.post_detail.config(state=tkinter.NORMAL)  # 允许编辑消息记录文本框
        self.post_detail.delete('1.0', tkinter.END)
        for x in selected_post['data']:
            self.post_detail.insert('end', x['time'] + '\t' + x['context'] + '\n')
        self.post_detail.config(state=tkinter.DISABLED)  # 禁止编辑消息记录文本框
コード例 #56
0
ファイル: baisib.py プロジェクト: smilemaster/python-spider
        urlList.append((name, pmUrl))
    return urlList

id =1 #视频个数
def write():
    global  id
    while id<10:
        url_name = get()
        for item in url_name:
            urllib.request.urlretrieve(item[1], 'video\\%s.mp4' % (item[0]))
            text.insert(END,str(id)+'.'+item[1]+'\n'+item[0]+'\n')
            url_name.pop(0)  # 删除已经有的
            id +=1
    varl.set('视频抓取完毕!')

def start():
    thr = threading.Thread(target=write)
    thr.start()

root  = Tk()
root.title('视频爬取1.0')
#root.geometry('500x300')# 坐标,大小
text = ScrolledText(root,font=('微软雅黑', 10)) # 文本滚动条
text.grid()
button = Button(root,text='开始爬取',font=('微软雅黑',10),command=start) # 按钮控件
button.grid()
varl = StringVar()
label = Label(root,font=('微软雅黑', 10),fg='red',textvariable = varl)
label.grid()
varl.set('熊猫已准备')
root.mainloop()
コード例 #57
0
ファイル: uis.py プロジェクト: qiiyang/elflab
class GenericGUI(elflab.abstracts.UIBase):
    # CONSTANTS
    DEFAULT_FOLDER = r"d:\data_dump"
    DEFAULT_FN = r"datalog"
    PATH_LENGTH = 50
    FN_LENGTH = 20

    VAR_NUM_FORMAT = "{}{}={:.5g};     "
    VAR_STR_FORMAT = "{}{}={};     "
    PARAM_LENGTH = 15

    UI_REFRESH = 0.1  # Update ui every #seconds
    STATUS_REFRESH = 1.0  # Update the status frame every # seconds
    CONTROLLER_REFRESH = 5.0  # Update controller status every #seconds

    # default values to pass on to the kernel
    DEFAULT_PLOT_REFRESH_INTERVAL = 0.5  # Interval between plot refreshes in s
    DEFAULT_PLOT_LISTEN_INTERVAL = 0.05  # Interval between listening events in s

    def __init__(self, Kernel, Experiment, Controller=None, subplots=None):  # subplots: overwrite if not None
        # 0=stoped, 1=running, 2=paused
        self.state = -1

        # saving arguments
        self.Kernel = Kernel
        self.Experiment = Experiment
        self.Controller = Controller
        self.subplots = subplots

        self.params = Experiment.default_params.copy()
        if Experiment.param_order is None:
            self.param_order = list(self.params.keys())
        else:
            self.param_order = Experiment.param_order
        self.var_order = Experiment.var_order
        self.var_titles = Experiment.var_titles

        # declare objects
        self.kernel = None
        self.experiment = None
        self.controller = None

        # setting gui root
        self.root = tk.Tk()
        try:
            title = "{}: {}".format(Kernel.title, Experiment.title)
        except Exception:
            title = "Undefined Kernel Title"
        self.root.title(title)

        # Declare containers
        self.folder_str = self.DEFAULT_FOLDER
        self.filename_var = tk.StringVar()
        self.filename_var.set(self.DEFAULT_FN)

        # Declare other variables
        self.controller_time = self.status_time = time.perf_counter()

        self.instrument_lock = multiprocessing.Lock()
        self.data_lock = multiprocessing.Lock()
        self.ui_lock = multiprocessing.Lock()
        self.controller_lock = multiprocessing.Lock()

        self.kernel_kwargs = {
            "plot_refresh_interval": self.DEFAULT_PLOT_REFRESH_INTERVAL,
            "plot_listen_interval": self.DEFAULT_PLOT_LISTEN_INTERVAL,
            "data_lock": self.data_lock,
            "instrument_lock": self.instrument_lock,
        }

        self.controller_kwargs = {}

        # Define styles
        style = ttk.Style()
        style.configure("RedFG.TButton", foreground="red")
        style.configure("GreenBG.TButton", background="green")

        # Define the scrolling frame
        self.ybar = ttk.Scrollbar(self.root, orient=tk.VERTICAL)
        self.ybar.grid(row=0, column=1, sticky="ns")

        self.xbar = ttk.Scrollbar(self.root, orient=tk.HORIZONTAL)
        self.xbar.grid(row=1, column=0, sticky="we")

        self.mainCanvas = tk.Canvas(self.root)
        self.mainCanvas.grid(row=0, column=0, sticky="nswe")

        self.root.columnconfigure(0, weight=1)
        self.root.rowconfigure(0, weight=1)

        self.mainFrame = ttk.Frame(self.mainCanvas)
        self.mainCanvas.create_window((0, 0), window=self.mainFrame, anchor=tk.NW)

        # Contents - layout frames
        self.fileFrame = ttk.LabelFrame(self.mainFrame, text="Data File")
        self.fileFrame.grid(row=0, column=0, columnspan=3, sticky="we")

        self.paramFrame = ttk.LabelFrame(self.mainFrame, text="Parameters")
        self.paramFrame.grid(row=1, column=0, rowspan=3, sticky="nswe")

        self.commentFrame = ttk.LabelFrame(self.mainFrame, text="comments")
        self.commentFrame.grid(row=1, column=1, sticky="nwe")

        self.commandFrame = ttk.LabelFrame(self.mainFrame, text="Program Control")
        self.commandFrame.grid(row=1, column=2, sticky="nwe")

        self.controlFrame = ttk.Frame(self.mainFrame, relief="solid")
        self.controlFrame.grid(row=2, column=1, columnspan=2, sticky="nwe", padx=5, pady=5)

        self.statusFrame = ttk.LabelFrame(self.mainFrame, text="status")
        self.statusFrame.grid(row=3, column=1, columnspan=2, sticky="nwe")

        # File options
        self.file_label1 = ttk.Label(self.fileFrame, text='file name: "(time stamp)_')
        self.file_label1.pack(side=tk.LEFT)
        self.file_entry = ttk.Entry(self.fileFrame, width=self.FN_LENGTH, textvariable=self.filename_var)
        self.file_entry.pack(side=tk.LEFT)
        self.file_label2 = ttk.Label(self.fileFrame, text='.dat"')
        self.file_label2.pack(side=tk.LEFT)

        self.folder_button = ttk.Button(self.fileFrame, text="directory", command=self.change_folder)
        self.folder_button.pack(side=tk.LEFT, padx=(32, 0))

        self.folder_label = ttk.Label(self.fileFrame, width=self.PATH_LENGTH, justify=tk.LEFT)
        self.folder_label.pack(side=tk.LEFT)
        self.set_folder(self.folder_str)

        # Parameters
        self.param_vars = {}
        r = 0
        for par in self.param_order:
            w = ttk.Label(self.paramFrame, text=par)
            w.grid(column=0, row=r, sticky="nw")
            self.param_vars[par] = tk.StringVar()
            self.param_vars[par].set(self.params[par])
            w = ttk.Entry(self.paramFrame, width=self.PARAM_LENGTH, textvariable=self.param_vars[par])
            w.grid(column=0, row=r + 1, sticky="nw", pady=(0, 8))
            r += 2

            # Comments box
        self.comment_button = ttk.Button(
            self.commentFrame, text="update", command=self.update_comment, state="disabled"
        )
        self.comment_button.grid(row=0, column=0, sticky="nw")
        self.comment_box = ScrolledText(self.commentFrame, width=40, height=8)
        self.comment_box.insert(0.0, Experiment.default_comments)
        self.comment_box.grid(row=1, column=0, sticky="nw")

        # commands
        self.kernelLabel = ttk.Label(
            self.commandFrame,
            text="stopped",
            anchor=tk.CENTER,
            foreground="white",
            background="dim gray",
            relief="groove",
        )
        self.kernelLabel.grid(column=1, row=1, sticky="ew")

        self.buttonStart = ttk.Button(self.commandFrame, text="start", command=self.start_kernel)
        self.buttonStart.grid(column=1, row=2, sticky="ew")

        self.buttonPause = ttk.Button(self.commandFrame, text="pause", command=self.pause_kernel, state="disabled")
        self.buttonPause.grid(column=1, row=3, sticky="ew")

        self.buttonQuit = ttk.Button(self.commandFrame, text="quit", style="RedFG.TButton", command=self.quit)
        self.buttonQuit.grid(column=1, row=4, sticky="ew")

        self.buttonPlot = ttk.Button(self.commandFrame, text="plot", command=self.kernel_plot, state="disabled")
        self.buttonPlot.grid(column=2, row=1, sticky="ew")

        self.buttonAutoOn = ttk.Button(
            self.commandFrame, text="autoscale: on", command=self.kernel_autoscaleOn, state="disabled"
        )
        self.buttonAutoOn.grid(column=2, row=2, sticky="ew")

        self.buttonAutoOff = ttk.Button(
            self.commandFrame, text="autoscale: off", command=self.kernel_autoscaleOff, state="disabled"
        )
        self.buttonAutoOff.grid(column=2, row=3, sticky="ew")

        self.buttonClear = ttk.Button(
            self.commandFrame, text="clear plots", command=self.kernel_clearPlot, state="disabled"
        )
        self.buttonClear.grid(column=2, row=4, sticky="ew")

        for child in self.commandFrame.winfo_children():
            child.grid_configure(padx=5, pady=5)

        # Status
        st = ""
        for var in self.var_order:
            st = self.VAR_STR_FORMAT.format(st, self.var_titles[var], "not available")
        self.statusLabel = ttk.Label(self.statusFrame, text=st, justify=tk.LEFT, foreground="blue")
        self.statusLabel.grid(sticky="nw")

    def quit(self):
        if self.kernel is not None:
            self.kernel.quit()
        if self.controller is not None:
            self.controller.terminate()
        self.root.quit()

    def start(self):
        # Calculate the wrapping length for status
        self.mainFrame.update()
        w = self.commentFrame.winfo_reqwidth() + self.commandFrame.winfo_reqwidth() - 1
        self.statusLabel.configure(wraplength=w)

        # Update Frames and Define the scrolling
        self.mainFrame.update()
        self.mainCanvas.config(
            width=self.mainFrame.winfo_reqwidth(),
            height=self.mainFrame.winfo_reqheight(),
            scrollregion=(0, 0, self.mainFrame.winfo_reqwidth(), self.mainFrame.winfo_reqheight()),
        )

        self.ybar.config(command=self.mainCanvas.yview)
        self.xbar.config(command=self.mainCanvas.xview)
        self.mainCanvas.config(xscrollcommand=self.xbar.set, yscrollcommand=self.ybar.set)

        # Start the gui
        self.root.after(0, self.update_interface)
        self.root.mainloop()

    def error_box(self, err):
        messagebox.showerror(
            "Error", "An error has occurred, try checking the values entered.\n  error code:\n    {}".format(err)
        )

    def change_folder(self):
        folder = filedialog.askdirectory()
        self.set_folder(folder)

    def set_folder(self, folder):
        self.folder_str = folder
        l = len(folder)
        if l <= self.PATH_LENGTH:
            folder_txt = folder
        else:
            folder_txt = "...{}".format(self.folder_str[-self.PATH_LENGTH + 3 : l])
        self.folder_label.config(text=folder_txt)

    def update_comment(self):
        with open(self.comments_file, "a") as f:
            f.write("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n")
            f.write("\nUPDATE:\n")
            f.write("Local time (YYYY/MM/DD, HH:MM:SS): {}\n".format(time.strftime("%Y/%m/%d, %H:%M:%S")))
            f.write("____________________________________________________________\n")
            t = self.comment_box.get(0.0, tk.END)
            f.write(t)

    # Recursively disable / enable widgets
    def set_widget_state(self, w, state):
        if "frame" in w.winfo_class().lower():
            for child in w.winfo_children():
                self.set_widget_state(child, state)
        elif "text" not in w.winfo_class().lower():
            w.configure(state=state)

    # Refresh UI according to the state
    def set_ui_state(self, state):
        with self.ui_lock:
            self.state = state
            # Disable / enable widgets
            if state > 0:
                s1 = "disable"
                s2 = "normal"
                self.buttonStart.configure(text="stop", style="GreenBG.TButton", command=self.stop_kernel)
            else:
                s1 = "normal"
                s2 = "disable"
                self.buttonStart.configure(text="start", style="TButton", command=self.start_kernel)

            self.set_widget_state(self.fileFrame, s1)
            self.set_widget_state(self.paramFrame, s1)

            self.comment_button.configure(state=s2)
            self.buttonPause.configure(state=s2)
            self.buttonPlot.configure(state=s2)
            self.buttonAutoOn.configure(state=s2)
            self.buttonAutoOff.configure(state=s2)
            self.buttonClear.configure(state=s2)
            self.set_widget_state(self.controlFrame, s2)

            # update state label
            if state == 0:
                self.kernelLabel.configure(text="stopped", foreground="white", background="dim gray")
            elif state == 1:
                self.kernelLabel.configure(text="running", background="green", foreground="white")
                self.buttonPause.configure(text="pause", style="TButton", command=self.pause_kernel)
            else:
                self.kernelLabel.configure(text="paused", background="yellow", foreground="")
                self.buttonPause.configure(text="resume", style="GreenBG.TButton", command=self.resume_kernel)

    def start_kernel(self):
        try:
            # Read parameters
            for par in self.params:
                self.params[par] = self.param_vars[par].get()
            if self.kernel is not None:
                self.kernel.quit()

            # Parse file names, and create the comments file
            filename = self.filename_var.get()
            timestring = time.strftime("%Y.%m.%d_%H.%M.%S")
            self.data_file = os.path.join(self.folder_str, "{0}_{1}.dat".format(timestring, filename))
            self.comments_file = os.path.join(self.folder_str, "{0}_{1}_comments.txt".format(timestring, filename))

            with open(self.comments_file, "w") as f:
                f.write('experiment: "{}"\n'.format(self.Experiment.title))
                f.write("Local time (YYYY/MM/DD, HH:MM:SS): {}\n".format(time.strftime("%Y/%m/%d, %H:%M:%S")))
                f.write("____________________________________________________________\n")
                t = self.comment_box.get(0.0, tk.END)
                f.write(t)
                f.write("\n\nParameters:\n")
                for par in self.param_order:
                    f.write("   {} = {}\n".format(par, self.params[par]))

            # Start the experiment and the kernel
            self.experiment = self.Experiment(params=self.params, filename=self.data_file)
            if self.subplots is not None:
                self.experiment.plotXYs = self.subplots
            self.kernel = self.Kernel(self.experiment, **self.kernel_kwargs)
            self.kernel.start()

            # Restart a controller instance
            if self.controller is not None:
                with self.controller_lock:
                    self.controller.terminate()
            if self.Controller is not None:
                self.controller = self.Controller(kernel=self.kernel, **self.controller_kwargs)
                self.update_controller()
        except Exception as err:
            self.error_box(err)
            print(traceback.format_exc())
        else:
            with self.ui_lock:
                self.buttonStart.configure(text="stop", style="GreenBG.TButton", command=self.stop_kernel)

    def stop_kernel(self):
        self.kernel.stop()

    def pause_kernel(self):
        self.kernel.pause()
        with self.ui_lock:
            self.buttonPause.configure(text="resume", style="GreenBG.TButton", command=self.resume_kernel)

    def resume_kernel(self):
        self.kernel.resume()
        with self.ui_lock:
            self.buttonPause.configure(text="pause", style="TButton", command=self.pause_kernel)

    def kernel_plot(self):
        self.kernel.plot()

    def kernel_autoscaleOn(self):
        self.kernel.autoscaleOn()

    def kernel_autoscaleOff(self):
        self.kernel.autoscaleOff()

    def kernel_clearPlot(self):
        self.kernel.clearPlot()

    # book keeping: update the controller status
    def update_controller(self):
        self.controller_time = time.perf_counter()

    def update_status(self):
        st = ""
        with self.data_lock:
            for var in self.var_order:
                v = self.kernel.current_values[var]
                if isinstance(v, float):
                    st = self.VAR_NUM_FORMAT.format(st, self.var_titles[var], v)
                else:
                    st = self.VAR_STR_FORMAT.format(st, self.var_titles[var], v)

        with self.ui_lock:
            self.statusLabel.configure(text=st)

        self.status_time = time.perf_counter()

    # book keeping: update the interface
    def update_interface(self):
        if (self.kernel is None) or self.kernel.flag_stop or self.kernel.flag_quit:
            new_state = 0
        elif self.kernel.flag_pause:
            new_state = 2
        else:
            new_state = 1
        if new_state != self.state:
            self.set_ui_state(new_state)

        t = time.perf_counter()

        if (self.state > 0) and (t - self.status_time > self.STATUS_REFRESH):
            self.update_status()

        if (self.state > 0) and (t - self.controller_time > self.CONTROLLER_REFRESH):
            self.update_controller()

        self.root.after(round(self.UI_REFRESH * 1000.0), self.update_interface)
コード例 #58
0
class CmdlAppGui():
    def __init__(self, title, cb_input):
        self.title = title
        self.cb_input = cb_input  # the callback function for user input
        self.here = False  # the gui is not here, yet

        self.root = tk.Tk()
        self.root.title(title)
        self.frm = ttk.Frame(master=self.root, padding="3 3 12 12")

        self.build(self.frm)
        self.here = True


    def start(self):
        self.frm.mainloop()
        self.here = False  # the gui is no longer here

    def put_msg(self, text, style=0):
        # display user mesages in the left window
        if self.here:
            if style == 1:
                self.scrollmsg.insert(tk.INSERT, text, 'bold')
            else:
                self.scrollmsg.insert(tk.INSERT, text, '')
            self.scrollmsg.yview_scroll(99,'pages')
        else:
            print("GUI msg: {0}".format(text))

    def put_data(self, text, style=0):
        # display user data in the right window
        if self.here:
            if style == 1:
                self.scrolldata.insert(tk.INSERT, text, 'bold')
            else:
                self.scrolldata.insert(tk.INSERT, text, '')
            self.scrolldata.yview_scroll(99,'pages')
        else:
            print("GUI data: {0}".format(text))

    def build(self, frm):
        # layout of the gui elements
        frm.grid(column=0, row=0, sticky=(tk.N, tk.W, tk.E, tk.S))
        frm.columnconfigure(0, weight=1)
        frm.columnconfigure(1, weight=2)
        frm.rowconfigure(0, weight=1)

        self.scrollmsg = ScrolledText(frm, wrap=tk.WORD, width=40)
        self.scrollmsg.grid(column=0, row=1, sticky="EW")
        self.scrollmsg.tag_config('bold', font=('Courier',10,'bold'))
        
        self.scrolldata = ScrolledText(frm, wrap=tk.WORD, width=40)
        self.scrolldata.grid(column=1, row=1, rowspan=9, sticky="NS")
        self.scrolldata.tag_config('bold', font=('Courier',10,'bold'))
        
        self.entrytext = tk.StringVar()
        self.entry = ttk.Entry(frm, textvariable=self.entrytext)
        self.entry.grid(column=0, row=3, sticky='EW')
        self.entry.bind("<Return>", self.on_press_enter)

        btn_quit = ttk.Button(frm, text="QUIT",
                            command=self.finish)
        btn_quit.grid(column=0,
                            row=9, sticky="EW")

        for child in frm.winfo_children():
            child.grid_configure(padx=5, pady=5)
            
        self.entry.focus_set() # set the focus on the entry field

    def on_press_enter(self, event):
        # react to the enter key: send the text input to the callback function
        text = self.entrytext.get()
        self.cb_input(text)

        if self.here:
            self.entrytext.set('')
            self.entry.focus_set() # set the focus on the entry field

    def finish(self):  # program call to terminate GUI
        self.here = False
        self.entry.unbind("<Return>")
        self.root.destroy()
コード例 #59
0
class OptimizerMainWindow:
    """
    classdocs
    """

    # TODO: change that name
    def reactToClick(self, event):
        a = AddRestrictionDialog(self)

    def __init__(self, optimizer):

        # always have a reference to model/controller
        self.optimizer = optimizer

        # setup main GUI and make stretchable
        self.guiRoot = Tk()
        self.guiRoot.title("OPTIMIZR")
        self.guiRoot.columnconfigure(1, weight=1)
        self.guiRoot.rowconfigure(0, weight=1)

        # left (settings) and right (sequences) part
        self.frameLeft = Frame(self.guiRoot)
        self.frameLeft.grid(row=0, column=0, sticky=W + E + N + S)
        self.frameLeft.columnconfigure(0, weight=1)
        self.frameRight = Frame(self.guiRoot)
        self.frameRight.grid(row=0, column=1, sticky=W + E + N + S)
        self.frameRight.columnconfigure(0, weight=1)
        self.frameRight.rowconfigure(0, weight=1)
        self.frameRight.rowconfigure(1, weight=1)

        self.frameSpeciesControll = LabelFrame(self.frameLeft, text="Species", pady=10, padx=10)
        self.frameSpeciesControll.columnconfigure(1, weight=1)
        self.frameOptimizationControll = LabelFrame(self.frameLeft, text="Optimization", pady=10, padx=10)
        self.frameRestrictionControll = LabelFrame(self.frameLeft, text="Restriction Enzymes", pady=10, padx=10)
        self.frameSpeciesControll.grid(row=0, column=0, sticky=W + E, padx=10, pady=10)
        self.frameOptimizationControll.grid(row=1, column=0, sticky=W + E, padx=10, pady=10)
        self.frameRestrictionControll.grid(row=2, column=0, sticky=W + E, padx=10, pady=10)

        # Species Controll
        Label(self.frameSpeciesControll, text="Source:").grid(row=0, column=0)
        Label(self.frameSpeciesControll, text="Target:").grid(row=1, column=0)

        self.comboSourceSpecies = Combobox(self.frameSpeciesControll, state="readonly")
        self.comboSourceSpecies.grid(row=0, column=1, pady=5, sticky="ew")
        self.comboTargetSpecies = Combobox(self.frameSpeciesControll, state="readonly")
        self.comboTargetSpecies.grid(row=1, column=1, pady=5, sticky="we")
        self.buttonSpeciesList = Button(self.frameSpeciesControll, text="Edit Species List")
        self.buttonSpeciesList.grid(row=2, column=1, pady=5, sticky="e")

        self.comboSourceSpecies.bind("<<ComboboxSelected>>", self.actionOptimizerSettingsChanged)
        self.comboTargetSpecies.bind("<<ComboboxSelected>>", self.actionOptimizerSettingsChanged)

        # Optimization Controll
        Label(self.frameOptimizationControll, text="Optimization Strategy:").grid(row=0, column=0)
        self.comboOptimizationStrategy = Combobox(self.frameOptimizationControll, state="readonly")
        self.comboOptimizationStrategy.grid(row=0, column=1)
        self.comboOptimizationStrategy["values"] = self.optimizer.possibleOptimizationStrategies
        self.comboOptimizationStrategy.bind("<<ComboboxSelected>>", self.actionOptimizerSettingsChanged)

        # Restriction Enzymes
        self.listRestriction = Listbox(self.frameRestrictionControll)
        self.listRestriction.grid(row=0, column=0, columnspan=3, pady=5, sticky=W + E)
        self.frameRestrictionControll.columnconfigure(0, weight=1)
        self.buttonRestricionAdd = Button(self.frameRestrictionControll, text=" + ")
        self.buttonRestricionDel = Button(self.frameRestrictionControll, text=" - ")
        self.buttonRestricionAdd.grid(row=1, column=1, padx=5)
        self.buttonRestricionDel.grid(row=1, column=2, padx=5)

        # Source Sequence Frame
        self.frameSourceSequence = LabelFrame(self.frameRight, text="Source Sequence", padx=10, pady=10)
        self.frameResultSequence = LabelFrame(self.frameRight, text="Result Sequence", padx=10, pady=10)
        self.frameSourceSequence.grid(row=0, column=0, sticky="wens", padx=10, pady=10)
        self.frameResultSequence.grid(row=1, column=0, sticky="wens", padx=10, pady=10)

        self.buttonSourceLoad = Button(self.frameSourceSequence, text=" Load ")
        self.textSourceSeq = ScrolledText(self.frameSourceSequence, height=10)
        self.buttonSourceLoad.grid(row=0, column=1, sticky="e", pady=5)
        self.textSourceSeq.grid(row=1, column=0, columnspan=2, sticky="wens")
        self.frameSourceSequence.columnconfigure(0, weight=1)
        self.frameSourceSequence.rowconfigure(1, weight=1)
        self.textSourceSeq.frame.columnconfigure(1, weight=1)
        self.textSourceSeq.frame.rowconfigure(0, weight=1)

        self.buttonOptimize = Button(self.frameResultSequence, text=" OPTIMIZE! ")
        self.buttonOptimize.bind("<ButtonRelease>", self.actionOptimize)

        self.buttonRemoveRestriction = Button(self.frameResultSequence, text=" RESTRICTION-B-GONE! ")
        self.buttonRemoveRestriction.bind("<ButtonRelease>", self.actionRemoveRestricion)

        self.buttonSaveResult = Button(self.frameResultSequence, text=" Save ")
        self.textResultSequence = ScrolledText(self.frameResultSequence, height=10)
        self.buttonOptimize.grid(column=0, row=0, pady=5, sticky="w")
        self.buttonRemoveRestriction.grid(column=1, row=0, pady=5, padx=10, sticky="w")
        self.textResultSequence.grid(row=1, column=0, columnspan=4, sticky="wens")
        self.buttonSaveResult.grid(row=2, column=3, pady=5, sticky="e")
        self.frameResultSequence.columnconfigure(2, weight=1)
        self.frameResultSequence.rowconfigure(1, weight=1)
        self.textResultSequence.frame.columnconfigure(1, weight=1)
        self.textResultSequence.frame.rowconfigure(0, weight=1)

        self.textSourceSeq.bind("<<Modified>>", self.actionSequenceModified)
        self.textResultSequence.bind("<<Modified>>", self.actionSequenceModified)

        # generate color tags for textboxes
        for i in range(101):

            # green for normal codons
            (r, g, b) = colorsys.hsv_to_rgb(210 / 360, i / 100, 1.0)
            colorHex = "#%02x%02x%02x" % (int(r * 255), int(g * 255), int(b * 255))

            self.textSourceSeq.tag_config("normal" + str(i), background=colorHex)
            self.textResultSequence.tag_config("normal" + str(i), background=colorHex)

            # red for codons with restriction sites
            (r, g, b) = colorsys.hsv_to_rgb(5 / 360, i / 100, 1.0)
            colorHex = "#%02x%02x%02x" % (int(r * 255), int(g * 255), int(b * 255))

            self.textSourceSeq.tag_config("restrict" + str(i), background=colorHex)
            self.textResultSequence.tag_config("restrict" + str(i), background=colorHex)

        # Set (minimum + max) Window size
        self.guiRoot.update()
        self.guiRoot.minsize(self.guiRoot.winfo_width(), self.guiRoot.winfo_height())

        self.buttonRestricionAdd.bind("<ButtonRelease>", self.reactToClick)
        self.buttonRestricionDel.bind("<ButtonRelease>", self.actionRestrictionEnzymeDelete)
        self.buttonSpeciesList.bind("<ButtonRelease>", self.actionEditSpeciesButton)

        self.buttonSourceLoad.bind("<ButtonRelease>", self.actionLoadSequence)
        self.buttonSaveResult.bind("<ButtonRelease>", self.actionSaveSequence)

        # TEST
        #         self.listRestriction.insert("end", "EcoRI")
        #         self.listRestriction.insert("end", "BamHI")
        #

        # dummy event to manually trigger update
        self.guiRoot.bind("<<Update>>", self.actionUpdate)

        self.actionUpdate(None)

        self.guiRoot.mainloop()

    def actionRestrictionEnzymeDelete(self, event):
        try:
            selectedEnzyme = self.listRestriction.selection_get()
            self.optimizer.restrictionEnzymeList.remove(selectedEnzyme)
            self.guiRoot.event_generate("<<Update>>")
        except tkinter.TclError:
            # no selection
            pass

    def actionUpdate(self, event):
        #         print("update called")

        # clear list of restriction enzymes
        self.listRestriction.delete(0, "end")
        for r in self.optimizer.restrictionEnzymeList:
            self.listRestriction.insert("end", r)

        self.comboSourceSpecies.delete(0, "end")
        self.comboTargetSpecies.delete(0, "end")

        speciesValues = list()
        for (taxid, name) in self.optimizer.speciesList:
            speciesValues.append(taxid + ": " + name)

        self.comboSourceSpecies["values"] = speciesValues
        self.comboTargetSpecies["values"] = speciesValues

        if self.comboSourceSpecies.get() not in speciesValues:
            self.comboSourceSpecies.set("")
        if self.comboTargetSpecies.get() not in speciesValues:
            self.comboTargetSpecies.set("")

        self.textSourceSeq.edit_modified(True)
        self.textResultSequence.edit_modified(True)

        self.optimizer.saveConfig("config.ini")

    def actionEditSpeciesButton(self, event):
        speciesListDialog = SpeciesListDialog(self)

    def actionOptimizerSettingsChanged(self, event=None):
        #         print("Something happened")
        strategy = self.comboOptimizationStrategy.get()
        sourceString = self.comboSourceSpecies.get()
        targetString = self.comboTargetSpecies.get()

        if not (strategy and sourceString and targetString):
            return

        sourceTaxid = sourceString.split(":")[0]
        targetTaxid = targetString.split(":")[0]

        self.optimizer.setOptimizer(sourceTaxid, targetTaxid, strategy)

        self.textSourceSeq.edit_modified(True)
        self.textResultSequence.edit_modified(True)

    #         self.optimizer.testPrint()

    def actionOptimize(self, event=None):
        self.optimizer.runOptimization()
        self.textSourceSeq.edit_modified(True)
        self.textResultSequence.edit_modified(True)

    def actionRemoveRestricion(self, event=None):
        self.optimizer.runRestricionRemoval()
        self.textSourceSeq.edit_modified(True)
        self.textResultSequence.edit_modified(True)

    def actionSequenceModified(self, event=None):
        # necessary if, otherwise -> infinite loop
        if self.textSourceSeq.edit_modified():

            seq = self.textSourceSeq.get("1.0", "end").strip()
            seq = stripCharsNotInList(seq.upper(), ["A", "C", "G", "T"])
            self.optimizer.setSourceSeq(seq)

            oldInsert = self.textSourceSeq.index("insert")
            self.textSourceSeq.delete("1.0", "end")

            sourceCodons = self.optimizer.getCodonsForPrint(True)
            if not sourceCodons:
                self.textSourceSeq.insert("end", self.optimizer.sourceSequence)
            else:
                for (co, sc, r) in sourceCodons:
                    if sc:
                        if not r:
                            self.textSourceSeq.insert("end", co, "normal" + str(int(sc * 100)))
                            # print("normal"+str(int(sc*100)))
                        else:
                            self.textSourceSeq.insert("end", co, "restrict" + str(int(sc * 100)))
                    else:
                        # remainder without color
                        self.textSourceSeq.insert("end", co)

            self.textSourceSeq.mark_set("insert", oldInsert)

            # reset the modified status at the very end
            self.textSourceSeq.edit_modified(False)

        if self.textResultSequence.edit_modified():

            seq = self.textResultSequence.get("1.0", "end").strip()
            #             self.optimizer.setOptimizedSeq(seq)

            oldInsert = self.textResultSequence.index("insert")
            self.textResultSequence.delete("1.0", "end")

            targetCodons = self.optimizer.getCodonsForPrint(False)
            if not targetCodons:
                self.textSourceSeq.insert("end", self.optimizer.optimizedSequence)
            else:
                for (co, sc, r) in targetCodons:
                    if sc:
                        if not r:
                            self.textResultSequence.insert("end", co, "normal" + str(int(sc * 100)))
                            # print("normal"+str(int(sc*100)))
                        else:
                            self.textResultSequence.insert("end", co, "restrict" + str(int(sc * 100)))
                    else:
                        # remainder without color
                        self.textResultSequence.insert("end", co)

            self.textSourceSeq.mark_set("insert", oldInsert)

            self.textResultSequence.edit_modified(False)

    def actionLoadSequence(self, event=None):
        filename = tkinter.filedialog.askopenfilename()
        if filename:
            seq = sequenceIO.readFile(filename)
            self.textSourceSeq.delete("1.0", "end")
            self.textSourceSeq.insert("end", seq)
            self.textSourceSeq.edit_modified(True)

    def actionSaveSequence(self, event=None):
        filename = tkinter.filedialog.asksaveasfilename()
        if filename:
            #             print("file is " + filename)
            with open(filename, mode="w") as fd:
                fd.write(self.optimizer.optimizedSequence)
コード例 #60
-1
ファイル: auto_mailer.py プロジェクト: pokk/Mailer
class AppGUI(Frame):
    def __init__(self, master=None):
        # Avoiding to send it continuously.
        self.lock = False

        Frame.__init__(self, master)
        self.grid()
        self.master = master
        # Setting for ComboBox.
        self.url_lang_combobox_str = StringVar()
        self.url_lang_combobox_list = lang_list
        # UI components.
        self.receiver_email_text = Label(self, text="Receiver:")
        self.receiver_email_field = Entry(self, width=50)
        self.subject_text = Label(self, text='Subject:')
        self.subject_field = Entry(self, width=50)
        self.receiver_name_text = Label(self, text='Name:')
        self.receiver_name_field = Entry(self, width=50)
        self.url_lang_text = Label(self, text='Link lang:')
        self.url_lang_combobox = Combobox(self, textvariable=self.url_lang_combobox_str, values=self.url_lang_combobox_list, state='readonly')
        self.send_progressbar = Progressbar(self, orient='horizontal', length=500, mode='determinate', maximum=300)
        self.send_button = Button(self, text='Send', command=self._send_mail)
        self.quit_button = Button(self, text='Exit', command=self.__exit)
        self.log_msg_text = ScrolledText(self)
        # Attachment.
        self.mail_attachment_list = attachment_list[:]
        self.url_lang_link_title = None
        self.url_lang_link = copy.deepcopy(content_link)
        # Mailer
        self._mailer = None

        # Let Mailer can control components.
        Mailer.window_content = self

        self.__create_widgets()

    def _send_mail(self):
        if not self.lock:
            threading.Thread(target=self.__send_mail).start()
        else:
            messagebox.showinfo('Warning', "Now it's processing...")

    def _choose(self, event):
        # arr = self.url_lang_link.get(self.url_lang_combobox_str.get())  # Get the array by choosing language.
        pass

    def _modify_content_url_link(self):
        link_arr = self.url_lang_link.get(self.url_lang_combobox_str.get())
        content = self._mailer.content
        for index in range(len(link_arr)):
            content_index = content.index(self.url_lang_link_title[index]) + len(self.url_lang_link_title[index])
            content = content[:content_index] + '\n' + link_arr[index] + content[content_index:]

        self._mailer.content = content
        return False

    def _make_mailer(self):
        self.mail_attachment_list = attachment_list[:]  # Clone a list.
        if atta_lang_list[self.url_lang_combobox.current()]:
            for i in range(len(self.mail_attachment_list)):
                # Only from the third file to the end file can change language.
                if i > 2:
                    # Modify the file name.
                    att = self.mail_attachment_list[i].split('.')
                    self.mail_attachment_list[i] = ''.join([' ', atta_lang_list[self.url_lang_combobox.current()], '.']).join(att)

        # ** IMPORTANT, we set the content path here!!
        path = 'content.docx'
        if self.url_lang_combobox.get() == lang_list[2] or self.url_lang_combobox.get() == lang_list[3]:
            path = 'content chinese.docx'
        if debug_log:
            print(self.mail_attachment_list)

        # ** IMPORTANT, we have to new an object here. Otherwise, we couldn't check the error checking.
        return Mailer(content_path=path, attachment_list=self.mail_attachment_list)

    def __create_widgets(self):
        """
        Construct all of the UI components.
        """

        self.receiver_email_text.grid(row=0, column=0)
        self.receiver_email_field.grid(row=0, column=1, columnspan=6)
        self.subject_text.grid(row=1, column=0)
        self.subject_field.grid(row=1, column=1, columnspan=6)
        self.subject_field.insert(0, 'Osaka Mariko Apartment Location & Condition')
        self.receiver_name_text.grid(row=2, column=0)
        self.receiver_name_field.grid(row=2, column=1, columnspan=6)
        self.url_lang_text.grid(row=3, column=0)
        self.url_lang_combobox.grid(row=3, column=2, columnspan=2)
        self.send_progressbar.grid(row=4, column=0, columnspan=7)
        self.send_button.grid(row=5, column=2)
        self.quit_button.grid(row=5, column=3)
        self.log_msg_text.grid(row=6, column=0, columnspan=7)

        # Default setting.
        self.url_lang_combobox.current(0)
        self.url_lang_combobox.bind("<<ComboboxSelected>>", self._choose)

    def __exit(self):
        if not self.lock:
            self.log_msg_text.insert(END, '\n\n -- Bye Bye --\n')
            self.master.quit()
        else:
            messagebox.showinfo('Error', "Now it's processing...please wait it ;)")

    @DecoratorThreadLockerApp()
    @DecoratorErrorCheckAndInitApp()
    def __send_mail(self):
        self.send_progressbar.start()  # Start processing the progress.
        ending = 'Welcome to use my application :)' if self._mailer.send_mail() \
            else '** Your sending was failed :( please send it again!'
        self.log_msg_text.insert(END, ending)
        self.send_progressbar.stop()  # Stop processing the progress.