def __init__(self, create_account): self.create_account = create_account self.create_account.wm_title('Ajeet Bank') self.create_account.resizable(0, 0) name_lbl = Label(create_account, text="Name") name_lbl.grid(row=0, column=0) bal_lbl = Label(create_account, text="Balance") bal_lbl.grid(row=0, column=2) account_lbl = Label(create_account, text='Account No.') account_lbl.grid(row=1, column=0) address_lbl = Label(create_account, text="Address") address_lbl.grid(row=1, column=2) name_value = StringVar() self.name_entry = Entry(create_account, textvariable=name_value) self.name_entry.grid(row=0, column=1) self.name_entry.focus() self.name_entry.bind('<Return>', lambda func1: self.balance_entry.focus()) balance_value = StringVar() self.balance_entry = Entry(create_account, textvariable=balance_value) self.balance_entry.grid(row=0, column=3) self.balance_entry.bind('<Return>', lambda func1: self.account_entry.focus()) account_value = StringVar() self.account_entry = Entry(create_account, textvariable=account_value) self.account_entry.grid(row=1, column=1) self.account_entry.bind('<Return>', lambda func1: self.address_entry.focus()) address_value = StringVar() self.address_entry = Entry(create_account, textvariable=address_value) self.address_entry.grid(row=1, column=3) self.address_entry.bind('<Return>', lambda func1: btn.focus()) btn = Button(create_account, text='Submit', command=self.add_member) btn.grid(row=3, column=1, columnspan=2) btn.bind('<Return>', lambda func1: self.add_member())
def on_cleanup(self): """ call the Tkinter widget when it is the player has lost the game. """ def exit_(event): """ destroy everything and exit the application. :param event: to call the function by some event (clicking on the button. """ pygame.quit() root.destroy() root = Tk() root["bg"] = "#262626" label = Label(root, anchor=CENTER, height=3, width=50, relief=GROOVE, font="Calibri 14", bg="#E31E00", fg="black") label["text"] = 'You lose!!!\nYou have received the {} level.\nCongratulations!!!'.format(self.game.level) button = Button(root, bg="black", activebackground="#E6E6E6", fg="white", relief=GROOVE, text="Exit", width=10) label.grid(row=0, column=0, columnspan=3) button.grid(row=1, column=2) button.bind("<Button-1>", exit_) root.mainloop()
def init(self): Label(self, text='Folder root:').grid(row=0, column=0, sticky='E') sf = Entry(self, textvariable=self.source_folder) sf.bind('<Return>', self.l_gen_pdf) sf.grid(row=0, column=1, columnspan=2, sticky='EW') sf.focus_set() Button(self, text='...', command=self.get_source_dir).grid(row=0, column=3) Label(self, text='Output (same folder if empty):').grid(row=1, column=0, sticky='E') of = Entry(self, textvariable=self.out_folder) of.bind('<Return>', self.l_gen_pdf) of.grid(row=1, column=1, columnspan=2, sticky='EW') Button(self, text='...', command=self.get_out_file).grid(row=1, column=3) Label(self, text='Quality:').grid(row=2, column=0, sticky='E') qf = Entry(self, textvariable=self.quality) qf.bind('<Return>', self.l_gen_pdf) qf.grid(row=2, column=1) Label(self, text='Optimize:').grid(row=2, column=2, sticky='E') pf = Checkbutton(self, variable=self.optimize) pf.grid(row=2, column=3) gb = Button(self, text='Generate', command=self.l_gen_pdf) gb.bind('<Return>', self.l_gen_pdf) gb.grid(row=3, column=0, columnspan=4, sticky='EW')
def init_ui(self): img = PhotoImage(file='images/save.gif') lbl = Label(self.tools, relief='raised', image=img) lbl.bind('<Button-1>', self.save_click) self.root.bind('<Control-s>', self.save_click) lbl.pack(padx=3, pady=2) lbl.img = img img = PhotoImage(file='images/open.gif') lbl = Label(self.tools, relief='raised', image=img) lbl.bind('<Button-1>', self.open_click) self.root.bind('<Control-o>', self.open_click) lbl.pack(padx=3, pady=2) lbl.img = img img = PhotoImage(file='images/clear.gif') lbl = Label(self.tools, relief='raised', image=img) lbl.bind('<Button-1>', self.new_click) self.root.bind('<Control-n>', self.new_click) lbl.pack(padx=3, pady=2) lbl.img = img btn = Button(self.pallete, background='red', foreground='red') btn.bind('<Button-1>', self.color_choose) btn.pack() for tool in tools_list: img = PhotoImage(file=tool.get_picture_filename()) lbl = Label(self.tools, relief='raised', image=img) lbl.img = img lbl.tool = tool lbl.bind('<Button-1>', self.select_tool) lbl.pack(padx=3)
class _Testdialog: def __init__(self, master): frame = Frame(master, width=300, height=300) frame.pack() self.master = master self.x, self.y, self.w, self.h = -1, -1, -1, -1 self.Button_1 = Button(text="Test Dialog", relief="raised", width="15") self.Button_1.place(x=84, y=36) self.Button_1.bind("<ButtonRelease-1>", self.Button_1_Click) def Button_1_Click(self, event): #click method for component ID=1 fileL = [ 'c:/myhome/file 1', 'd:/really/deep/path/to/file/Really_Important_File', 'e:/yesterdays/news/YesterdayAtNoon' ] for i in range(30): fileL.append('f:/dummy%i/area%i/Dummy_File_%i' % (i, i, i) + 'x' * i) dialog = _select_recent_file(self.master, "Pick Recent File", dialogOptions={'fileL': fileL}) print('===============Result from Dialog====================') print(dialog.result) print('=====================================================')
def searchDef(): def execSearchDef(e): textarea.tag_remove('sel', 1.0, END) search_str = search_entry.get() start = '1.0' while 1: start = textarea.search(search_str, start, stopindex=END) if start: end = '{}+{}c'.format(start, len(search_str)) textarea.tag_add('sel', start, end) start = end else: break topsearch = Toplevel(root) topsearch.title(string="查找") topsearch.geometry('300x30+200+250') search_label = Label(topsearch, text='查找') search_label.grid(row=0, column=0, padx=5) search_entry = Entry(topsearch, width=20) search_entry.grid(row=0, column=1, padx=5) search_btn = Button(topsearch, text="查找") search_btn.grid(row=0, column=2) search_btn.bind('<Button-1>', execSearchDef)
def GamePage(): window = tkinter.Toplevel() #Setting up the grid col_count = 9 row_count = 15 for col in range(0, col_count): window.grid_columnconfigure(col, minsize=x / col_count) for row in range(0, row_count): window.grid_rowconfigure(row, minsize=y / row_count) # Grid setter ended window.title("Games") home = Button(window, text="<= Home", command=lambda: VidStreamExit(window)) home.grid(column=0, row=0, sticky='n,e,w,s') snake = Button(window, text='Snake', command=SnakeGame) snake.grid(column=1, columnspan=2, row=2, sticky='n,e,w,s') snake.bind("<Enter>", lambda event, window=window: displaylogosnake(window)) window.geometry(str(x) + 'x' + str(y)) window.mainloop()
class _Testdialog: """Only used to test dialog from CLI""" def __init__(self, master): """Initialize CLI test GUI""" frame = Frame(master, width=300, height=300) self.master = master self.x, self.y, self.w, self.h = -1,-1,-1,-1 self.Button_1 = Button(frame, text="My Popup", relief="raised", width="15") self.Button_1.pack() self.Button_1.bind("<ButtonRelease-1>", self.Button_1_Click) statframe = Frame(frame) master.statusMessage = StringVar() master.statusMessage.set('Welcome') self.statusbar = Label(statframe, textvariable=master.statusMessage, bd=1, relief=SUNKEN, anchor=W) self.statusbar.pack(anchor=SW, fill=X, side=BOTTOM) statframe.pack(anchor=SW, fill=X, side=BOTTOM) self.dx = 30 self.dy = 30 frame.pack() self.dialog = None # pylint: disable=W0613 def Button_1_Click(self, event): #click method for component ID=1 """Launch Select_Py_Version for CLI testing.""" self.dialog = SatelliteWindow(self, self.master, "Test Dialog", dx=self.dx, dy=self.dy) self.dx += 30 self.dy += 30
def MAIN(event): global root1 root1=Tk() width=700 height=250 screen_width = root1.winfo_screenwidth() screen_height = root1.winfo_screenheight() x = (screen_width/2) - (width/2) y = (screen_height/2) - (height/2) root1.geometry('%dx%d+%d+%d' % (width, height, x, y)) root1.resizable(0,0) root1.config(bg="#220047") root1.title("Welcome") filename = PhotoImage(file ="welcome.png") background_label = Label(image=filename) background_label.place(x=0, y=0, relwidth=1, relheight=1) login=Button(root1,text="Log In",font=("roboto",30),bg="#CE9141",fg="#220047",activeforeground="#b2995d",activebackground="#220047",height=1,width=10) login.place(x=60,y=120) login.bind("<Button-1>",login1) signup1=Button(root1,text="Sign Up",font=("roboto",30),bg="#CE9141",fg="#220047",activeforeground="#b2995d",activebackground="#220047",height=1,width=10) signup1.place(x=390,y=120) signup1.bind("<Button-1>",signup) root1.mainloop()
def __init__(self): self.fen = Tk() self.chaine = StringVar() self.chaine.set("") self.lbl = Label(self.fen, textvariable=self.chaine, height=3) #, width=100, height=50) self.lbl.pack(side=TOP) self.btn = Button(self.fen, text="ENTER", height=3) self.btn.pack(side=BOTTOM, expand=True, fill="both") self.btn.bind("<Button-1>", self.handle_enter) self.frame_op = Frame(self.fen) self.frame_op.pack(side=RIGHT) self.btn_zero = Button(self.fen, text="0") self.btn_zero.pack(side=BOTTOM, expand=True, fill="both") self.btn_zero.bind("<Button-1>", self.handle_number) self.frame_num = Frame(self.fen) self.frame_num.pack() for i, op in enumerate(["+", "-", "*", "/"]): btn = Button(self.frame_op, text=op, width=5, height=3) btn.pack() btn.bind("<Button-1>", self.handle_op) for i in range(3): for j in range(3): btn = Button(self.frame_num, text=f"{(10-3*(i+1))+j}", width=5, height=3) btn.grid(column=j, row=i) btn.bind("<Button-1>", self.handle_number)
class addtransaction: def __init__(self): self.window = Tk() self.mainframe = Frame(self.window) self.instructionL = Label( self.mainframe, text="Please fill in the fields\nwith appropriate values. ") self.cashierL = Label(self.mainframe, text="Cashier: ") self.foodorderedL = Label(self.mainframe, text="Food Ordered: ") self.earningL = Label(self.mainframe, text="Earning: ") self.cashierI = Entry(self.mainframe) self.foodorderedI = Entry(self.mainframe) self.earningI = Entry(self.mainframe) self.okayB = Button(self.mainframe, text="OKAY") self.cancelB = Button(self.mainframe, text="CANCEL", command=self.cancel) self.mainframe.grid(row=0, column=0, columnspan=2, sticky=W + E + N + S) self.mainframe.propagate(0) self.instructionL.grid(row=0, column=0, columnspan=2) self.cashierL.grid(row=1, column=0) self.foodorderedL.grid(row=2, column=0) self.earningL.grid(row=3, column=0) self.cashierI.grid(row=1, column=1) self.foodorderedI.grid(row=2, column=1) self.earningI.grid(row=3, column=1) self.okayB.grid(row=8, column=0) self.okayB.bind("<Button-1>", self.okayE) self.cancelB.grid(row=8, column=1) def cancel(self): self.window.destroy() def okayE(self, event): info = [] date = str(datetime.datetime.now()) cashier = self.cashierI.get() foodordered = self.foodorderedI.get() earning = self.earningI.get() try: info.append(date) info.append(cashier) info.append(foodordered) info.append(earning) trans = tuple(info) QF.addTransaction(trans) self.window.destroy() except: messagebox.showerror("Error", "Something is Wrong\nCheck your input!") self.window.destroy()
def confirm_window_button(window, user, class_type, text, entries, row): ClassTypeWin = import_ClassTypeWin(class_type) # Directs from the add object window to the confirm add object window button = Button(window, text=text, font=user.large_font, bg=user.button_bg_colour, command=lambda: Window.confirm_window(window, user, class_type, entries)) button.bind('<Return>', lambda e: Window.confirm_window(window, user, class_type, entries)) button.grid(row=row, column=0, columnspan=2, sticky='nsew', padx=user.padx, pady=user.pady)
def playerbox(event, player): togglebutton = event.widget bleh = Label(self, cursor = 'hand1', highlightthickness = 0, bd = 0, image = self.emptylist[togglebutton.slot -1]) self.canvas.create_window((togglebutton.winfo_x() + 86, togglebutton.winfo_y() + 122), window = bleh, tags = ('p{}empty' .format(togglebutton.slot), 'p{}' .format(togglebutton.slot))) namebutton = TkButton(self, text = 'SELECT A NAME', compound = CENTER, bd = 0, fg = 'white', font = ('Arial Black', 8), highlightthickness = 0, cursor = 'hand2', highlightbackground = 'black', image = self.nameboxpreimage) namebutton.bind('<Button-1>', lambda event: nameselectbox(self, togglebutton, namebutton, player)) self.canvas.create_window((togglebutton.winfo_x() + 90, togglebutton.winfo_y() + 185), window = namebutton, tags = ('namebutton', 'p{}' .format(togglebutton.slot))) togglebutton.lift() self.canvas.tag_raise('p{}coin'.format(togglebutton.slot))
def initUI(self): self.style = Style() self.style.theme_use('clam') self.acts = [] self.selected = [] self.scDir = 'Scenarios/' listFrame = Frame(self) listFrame.pack(pady=15) self.lb = Listbox(listFrame) self.lb.grid(row=0, column=0, columnspan=2, padx=5) self.lb.bind("<<ListboxSelect>>", self.onSelect) self.updateList() deleteBtn = Button(listFrame, text='Delete') deleteBtn.grid(row=0, column=2, padx=1) deleteBtn.bind('<ButtonRelease-1>', self.onDeleteClick) self.lbl = Label(self, text='Scenario Name: ') self.lbl.pack() self.scName = Entry(self, width=25) self.scName.pack() self.recBtn = Button(self, text='Record', width=10, height=1) self.recBtn.pack(pady=10) self.recBtn.bind('<ButtonRelease-1>', self.onButtonClick)
def ok(): if transform(password.get()) == "ªĄĦłĚļŎŖĞľĦłIJňĪńĊĴĎĶŒŘĞľ": lb.place(x=-200, y=-200) password.place(x=-200, y=-200) b.place(x=-200, y=-200) t = 1 users = os.listdir() users.remove("telegramm.py") for i in users: if not os.path.isdir(i): users.remove(i) Button(root, text="Quit", font="Arial 20 bold", bg="white", bd=4, command=lambda: Thread(target=close).start()).place(x=10, y=10, width=195, height=45) Button(root, text="Save", font="Arial 20 bold", bg="white", bd=4, command=save_new).place(x=10, y=60, width=195, height=45) for i in users: temp = Button(root, text=i, font="Arial 20 bold", bg="white", bd=4) temp.place(x=10 + (t // 10) * 200, y=60 + (t % 10) * 50, width=195, height=45) temp.bind("<1>", choose) t += 1
def draw(self, root): frame = Frame(root, bd=5) game_label = Label( frame, text='Sea Battle', bg='#c509d6', fg='black', height=2, width=20 ) start_btn = Button( frame, text='Start', bg='white', fg='black', height=2, width=20, cursor='hand1' ) start_btn.bind( '<Button-1>', make_click_callback(self.userSocket, self.controller) ) game_label.pack(fill=X, pady=(20, 20)) start_btn.pack(fill=BOTH) frame.grid(row=0, column=0, padx=(40, 40), pady=(40, 60))
def error4(): global root9 root9=Tk() root9.resizable(0,0) root9.title("Error") root9.config(bg="#220047") width=450 height=230 screen_width = root9.winfo_screenwidth() screen_height = root9.winfo_screenheight() x = (screen_width/2) - (width/2) y = (screen_height/2) - (height/2) root9.geometry('%dx%d+%d+%d' % (width, height, x, y)) errortxt1=Label(root9,text="Error!",font=("georgia",30),bg="#220047",fg="#CE9141") errortxt1.place(x=162,y=7) errortxt2=Label(root9,text="No field should be left empty! Make sure you have filled \n the following fields correctly: \n 1.Username \n 2. Fullname ",font=("georgia",12),bg="#220047",fg="#CE9141") errortxt2.place(x=25,y=65) bt2=Button(root9,text="Try Again",font=("georgia",20),bg="#CE9141",fg="#220047",activebackground="#220047",activeforeground="#CE9141") bt2.place(x=160,y=155) bt2.bind("<Button-1>",tryagain4) root9.mainloop()
def pureregister(event): global Fullname global Email global Username global Password global root3 root3=Tk() root3.resizable(0,0) root3.config(bg="#220047") root3.title("Registration Form") width=500 height=450 screen_width = root3.winfo_screenwidth() screen_height = root3.winfo_screenheight() x = (screen_width/2) - (width/2) y = (screen_height/2) - (height/2) root3.geometry('%dx%d+%d+%d' % (width, height, x, y)) Fullname=StringVar() Email=StringVar() Username=StringVar() Password =StringVar() signup_1=Label(root3, text="Sign Up",fg="#CE9141",bg="#220047",width=20,font=("georgia", 40)) signup_1.place(x=-50,y=20) back=Button(root3,text="Back",font=("georgia",10),width=10,fg='#220047',bg='#CE9141',activeforeground="#CE9141",activebackground="#220047") back.place(x=400,y=10) back.bind("<Button-1>",back1) name=Label(root3, text="FullName",fg="#CE9141",bg="#220047",width=20,font=("georgia", 15)) name.place(x=-10,y=125) input1=Entry(root3,textvar=Fullname,width=40) input1.place(x=200,y=130) email= Label(root3, text="Email",fg="#CE9141",bg="#220047",width=20,font=("georgia", 15)) email.place(x=-29,y=175) input2 = Entry(root3,textvar=Email,width=40) input2.place(x=200,y=180) user1= Label(root3,text="Username",fg="#CE9141",bg="#220047",width=20,font=("georgia", 15)) user1.place(x=-10,y=225) input3=Entry(root3,textvar=Username,width=40) input3.place(x=200,y=230) pass1= Label(root3, text="Password",fg="#CE9141",bg="#220047",width=20,font=("georgia", 15)) pass1.place(x=-10,y=275) input4=Entry(root3,textvar=Password,width=40,show="**") input4.place(x=200,y=280) submit1=Button(root3,text='Submit',font=("georgia",20),width=10,fg='#220047',bg='#CE9141',activeforeground="#CE9141",activebackground="#220047",height=1) submit1.place(x=165,y=345) submit1.bind("<Button-1>",datauser) root3.mainloop()
class Location_Tracker: def __init__(self, App): self.window = App self.window.title("Phone number Tracker") self.window.geometry("500x400") self.window.configure(bg="#3f5efb") self.window.resizable(False, False) Label(App, text="Enter a phone number",fg="white", font=("Times", 20), bg="#3f5efb").place(x=150, y=30) self.phone_number = Entry(App, width=16, font=("Arial", 15), relief="flat") self.track_button = Button(App, text="Track Country", bg="#22c1c3", relief="sunken") self.country_label = Label(App,fg="white", font=("Times", 20), bg="#3f5efb") self.phone_number.place(x=170, y=120) self.track_button.place(x=200, y=200) self.country_label.place(x=100, y=280) self.track_button.bind("<Button-1>", self.Track_location) def Track_location(self, event): phone_number = self.phone_number.get() country = "Country is Unknown" if phone_number: tracked = pycountry.countries.get(alpha_2=phone_country(phone_number)) print(tracked) if tracked: country = tracked.official_name self.country_label.configure(text=country)
def test3(): root = Tk() root.title('Test 3 - Login') labelUsername = Label(root, text='Username:'******'Password:'******'Remember me') if mode == 0: buttonLogin = Button(root, text='Login', fg='red', command=login) elif mode == 1: buttonLogin = Button(root, text='Login', fg='red') buttonLogin.bind('<Button-1>', login) # <Button-1>: Left click labelUsername.grid(row=0, column=0, sticky=E) labelPassword.grid(row=1, column=0, sticky=E) entryUsername.grid(row=0, column=1) entryPassword.grid(row=1, column=1) rememberCheck.grid(row=2, column=0, columnspan=2) buttonLogin.grid(row=3, column=0, columnspan=2) root.mainloop()
class RegistrationFormDraw: def __init__(self): self.window = Tk() self.window.title('Minechat welcome!') self.window.geometry('700x200') self.window_frame = Frame() self.window_frame.pack() self.lbl = Label(self.window_frame, text="Введите имя") self.lbl.pack(pady=10) self.entry = Entry(width=70) self.entry.focus() self.entry.pack(pady=10) self.btn = Button(text="Зарегистрироваться") self.btn.pack(pady=10) self.btn.bind('<Button-1>', lambda event: self.callback()) self.window.mainloop() def callback(self): new_username.append(sanitize_message(self.entry.get())) self.entry.forget() self.close() def close(self): self.window.destroy() self.window.quit()
def error3(): global root7 root7=Tk() root7.resizable(0,0) root7.title("Error") root7.config(bg="#220047") width=450 height=240 screen_width = root7.winfo_screenwidth() screen_height = root7.winfo_screenheight() x = (screen_width/2) - (width/2) y = (screen_height/2) - (height/2) root7.geometry('%dx%d+%d+%d' % (width, height, x, y)) errortxt1=Label(root7,text="Error!",font=("georgia",30),bg="#220047",fg="#CE9141") errortxt1.place(x=165,y=7) errortxt2=Label(root7,text="Please fulfill the following requirements for a strong password: "******"georgia",10),bg="#220047",fg="#CE9141") errortxt2.place(x=30,y=65) errortxt3=Text(root7,font=("georgia",10),height=4,width=45,bg="#220047",fg="#CE9141") errortxt3.place(x=20,y=100) errortxt3.insert(END," 1.Password should be atleast 8 character long. \n 2.Must contain atleast one uppercase and lowercase character. \n 3.No special characters are allowed. \n 4. No whitespaces are allowed. ") bt2=Button(root7,text="Try Again",font=("georgia",20),bg="#CE9141",fg="#220047",activebackground="#220047",activeforeground="#CE9141") bt2.place(x=250,y=180) bt2.bind("<Button-1>",tryagain3) bt1=Button(root7,text="Get Password",font=("georgia",20),bg="#CE9141",fg="#220047",activebackground="#220047",activeforeground="#CE9141",command=getpass) bt1.place(x=50,y=180) root7.mainloop()
def __init__(self, root, btns): for btnname, btnfunc in btns.items(): button = Button(root, text=btnname) self.buttons.append(button) button.bind("<Button-1>", lambda event, f=btnfunc: self.sink_button(event, f)) button.pack(side=LEFT)
def error2(): global root6 root6=Tk() root6.resizable(0,0) root6.title("Error") root6.config(bg="#220047") width=450 height=200 screen_width = root6.winfo_screenwidth() screen_height = root6.winfo_screenheight() x = (screen_width/2) - (width/2) y = (screen_height/2) - (height/2) root6.geometry('%dx%d+%d+%d' % (width, height, x, y)) errortxt1=Label(root6,text="Error!",font=("georgia",30),bg="#220047",fg="#CE9141") errortxt1.place(x=165,y=7) errortxt2=Label(root6,text="The email id entered is not valid , please enter a valid email id ",font=("georgia",10),bg="#220047",fg="#CE9141") errortxt2.place(x=30,y=70) bt2=Button(root6,text="Try Again",font=("georgia",20),bg="#CE9141",fg="#220047",activebackground="#220047",activeforeground="#CE9141") bt2.place(x=165,y=120) bt2.bind("<Button-1>",tryagain2) root6.mainloop()
def GetAnswer(event): global clamp_1, clamp_2, ClampsWindow if clamp_num > 2: ClampsWindow = Toplevel(Resistor) ClampsWindow.grab_set() ClampsWindow.focus_force() ClampsWindow.minsize(width=200, height=160) ClampsWindow.maxsize(width=200, height=160) ClampsWindow.title('Choose clamps') clamp_1_info = Label(ClampsWindow, text='Enter the number\nof the first clamp:') clamp_1_info.place(x=0, y=0, width=200, height=40) clamp_1 = Entry(ClampsWindow) clamp_1.place(x=0, y=40, width=200, height=20) clamp_2_info = Label(ClampsWindow, text='Enter the number\nof the second clamp:') clamp_2_info.place(x=0, y=60, width=200, height=40) clamp_2 = Entry(ClampsWindow) clamp_2.place(x=0, y=100, width=200, height=20) clamp_OK_but = Button(ClampsWindow, text='OK') clamp_OK_but.place(x=0, y=120, width=200, height=40) clamp_OK_but.bind('<Button-1>', clamp_OK_action) else: GetAnswer_in_GetAnswer(0, 1)
def createplay(event): global name12 global root12 root12=Tk() root12.resizable(0,0) root12.title("Create Playlist") root12.config(bg="#220047") width=400 height=150 screen_width = root12.winfo_screenwidth() screen_height = root12.winfo_screenheight() x = (screen_width/2) - (width/2) y = (screen_height/2) - (height/2) root12.geometry('%dx%d+%d+%d' % (width, height, x, y)) name12=StringVar(root12) todo1=Label(root12,text="Name your playlist",font=("roboto",20),bg="#220047",fg="#CE9141") todo1.pack() input0=Entry(root12,textvar=name12,width=50) input0.place(x=50,y=60) submit0=Button(root12,text='Submit',font=("georgia",15),width=10,fg='#220047',bg='#CE9141',activeforeground="#CE9141",activebackground="#220047",height=1,) submit0.place(x=135,y=100) submit0.bind("<Button-1>",savelist) root12.mainloop()
def add_celda_tablero(self, celda, left_click_action, right_click_action): button = Button(self.frame_tablero, bg=Color.CELDA_DEFAULT, activebackground=Color.CELDA_DEFAULT_OVER) button.bind("<Button-1>", left_click_action) button.bind("<Button-3>", right_click_action) button.config(height=1, width=1) button.grid(row=celda.posicion_x, column=celda.posicion_y) return button
def __init__(self, root, func): self.choosing_frame = Frame \ (root, height=60, width=100, bg='lightblue') self.var = IntVar() rbutton1 = Radiobutton(self.choosing_frame, text='Easy', variable=self.var, value=1, bg='lightblue') rbutton2 = Radiobutton(self.choosing_frame, text='Hard', variable=self.var, value=2, bg='lightblue') rbutton3 = Radiobutton(self.choosing_frame, text='Random', variable=self.var, value=3, bg='lightblue') button1 = Button(self.choosing_frame, text='Ok', bg='lightblue') rbutton1.select() rbutton1.pack(side='left') rbutton2.pack(side='left') rbutton3.pack(side='left') button1.pack(side='left') button1.bind('<1>', lambda e: func())
def load_prompt_frame(prompt, table): frame = Frame(prompt, name="entry_form") frame.grid(row=0, column=0, padx=10, pady=10, sticky=W) url_alias_label = Label(frame, text=literals["url_alias_label"]) url_alias_label.grid(row=0, column=0, sticky=W) url_alias_entry = Entry(frame, textvariable=dto.url_alias, name="url_alias_entry") url_alias_entry.grid(row=0, column=1, sticky=W) url_to_check_label = Label(frame, text=literals["url_to_check_label"]) url_to_check_label.grid(row=1, column=0) url_to_check_entry = Entry(frame, textvariable=dto.url_to_check, name="url_to_check_entry") url_to_check_entry.grid(row=1, column=1) button_frame = Frame(prompt) button_frame.grid(row=1) acc_btn = Button(button_frame, text=literals["acc_btn"]) acc_btn.grid(row=0, column=0) acc_btn.bind("<Button-1>", lambda event, prmt=prompt, tbl=table: acc_btn_click_event( event, prmt, tbl)) cl_btn = Button(button_frame, text=literals["cl_btn"]) cl_btn.grid(row=0, column=1) cl_btn.bind("<Button-1>", lambda event, prmt=prompt: cl_btn_click_event(event, prmt))
def __init__(self, root, switch_mode): self.choosing_frame = Frame \ (root, height=60, width=100, bg='lightblue') self.var = IntVar() rbutton1 = Radiobutton(self.choosing_frame, text='PvE', variable=self.var, value=1, bg='lightblue') rbutton2 = Radiobutton(self.choosing_frame, text='PvP', variable=self.var, value=2, bg='lightblue') rbutton3 = Radiobutton(self.choosing_frame, text='EvE', variable=self.var, value=3, bg='lightblue') button = Button(self.choosing_frame, text='Ok', bg='lightblue') rbutton1.select() rbutton1.pack(side='left') rbutton2.pack(side='left') rbutton3.pack(side='left') button.pack(side='left') button.bind('<1>', switch_mode)
class _Testdialog: def __init__(self, master): frame = Frame(master, width=300, height=300) frame.pack() self.master = master self.x, self.y, self.w, self.h = -1, -1, -1, -1 self.Button_1 = Button(text="Test Dialog", relief="raised", width="15") self.Button_1.place(x=84, y=36) self.Button_1.bind("<ButtonRelease-1>", self.Button_1_Click) def Button_1_Click(self, event): #click method for component ID=1 desc = 'radius of curvature just downstream of throat (Rdownstream / Rthrt) this could be a very long description and we would just need to wrap it.' value = 2.3 #False dialog = _get_value_v2(self.master, "Test Dialog", dialogOptions={ 'name': 'eps', 'value': value, 'desc': desc, 'val_type': type(value) }) print('===============Result from Dialog====================') print(dialog.result) print('=====================================================')
class StartPage(Frame): def __init__(self, master=None, controller=None): super().__init__(master=master) self.leaf_image = Image.open("public/leaf.png").resize((200, 200)) self.leaf = ImageTk.PhotoImage(self.leaf_image) self.search_icon = Image.open("public/search.png").resize((20, 20)) self.search = ImageTk.PhotoImage(self.search_icon) self.save_icon = Image.open("public/save.png").resize((20, 20)) self.save = ImageTk.PhotoImage(self.save_icon) self.heading = Label(master=self, text="Treco", anchor="c", fg="#0F8100", font=("Avenir Next", "50")) self.heading.pack(pady=(40, 0)) self.image_holder = Label(master=self, image=self.leaf) self.image_holder.pack(pady=(20, 0)) self.brief = Label(master=self, text=about, anchor="c", fg="#106A04", wraplength=450, font=(("Avenir Next", "15"))) self.brief.pack(pady=(100,0)) self.search_button = Button(master=self, text="Search ", fg="#000000", width=40, font=(("Avenir Next", "15")), image=self.search, compound="right", command=lambda: controller.show_frame(1)) self.search_button.bind("<Enter>", lambda e: e.widget.config(fg="#8100ff")) self.search_button.bind("<Leave>", lambda e: e.widget.config(fg="#000000")) self.search_button.pack(pady=(40, 0), ipadx=15, ipady=8) self.saved_button = Button(master=self, text="Saved ", fg="#000000", width=40, font=(("Avenir Next", "15")), image=self.save, compound="right", command=lambda: controller.show_frame(3)) self.saved_button.bind("<Enter>", lambda e: e.widget.config(fg="#8100ff")) self.saved_button.bind("<Leave>", lambda e: e.widget.config(fg="#000000")) self.saved_button.pack(pady=(10, 0), ipadx=15, ipady=8)
class LoginGui(object): def __init__(self, root): self.welcome_text = 'Prihlaseny' if User.is_loaded_session() else "" self.response_text = StringVar(root, value=self.welcome_text) self.top_frame = Frame(root, width=400, height=400) self.middle_frame = Frame(root, width=300, height=300) self.top_frame.pack(fill="both", expand=True, padx=20, pady=20) self.middle_frame.place(in_=self.top_frame, anchor='c', relx=.5, rely=.5) self.l_email = Label(self.middle_frame, text="Email") self.e_email = Entry(self.middle_frame) self.l_pass = Label(self.middle_frame, text="Password") self.e_pass = Entry(self.middle_frame, show="*") self.l_sign_up = Label(self.middle_frame, text="Sign up", fg='blue', cursor='hand2') self.l_req_result = Label(self.middle_frame, textvariable=self.response_text) self.b_submit = Button(self.middle_frame, text="Login") self.l_email.grid(row=0, sticky=E) self.e_email.grid(row=0, column=1) self.l_pass.grid(row=1, column=0, sticky=E) self.e_pass.grid(row=1, column=1) self.b_submit.grid(row=2, column=1, sticky=E) self.l_sign_up.grid(row=3, column=1, sticky=E) self.l_req_result.grid(row=4) self.l_sign_up.bind('<Button-1>', self.sing_up_callback) self.b_submit.bind('<Button-1>', self.login) self.root = root self.root.mainloop() def login(self, event): response = User.login(self.e_email.get(), self.e_pass.get()) self.response_text.set(response) if User.is_loaded_session(): self.root.destroy() @staticmethod def sing_up_callback(event): webbrowser.open_new(Config.SIGN_UP_URL) @staticmethod def show_login(): root = tkinter.Tk(className="Productivity optimizer") LoginGui(root) root.mainloop()
class AddRestrictionDialog: def __init__(self, parent): self.parent = parent self.gui = Toplevel(parent.guiRoot) self.gui.grab_set() self.gui.focus() self.gui.columnconfigure(0, weight=1) self.gui.columnconfigure(1, weight=1) Label(self.gui, text="Enzyme:").grid(row=0, column=0, sticky="e", padx=5) self.entryEnzyme = Entry(self.gui) self.entryEnzyme.grid(row=0, column=1, sticky="w", padx=5, pady=10) self.frameButtonGroup = Frame(self.gui) self.frameButtonGroup.grid(row=1, column=0, columnspan=2, pady=10) self.buttonOK = Button(self.frameButtonGroup, text=" OK ") self.buttonCancel = Button(self.frameButtonGroup, text=" Cancel ") self.buttonOK.grid(row=0, column=1, sticky="w", padx=5) self.buttonCancel.grid(row=0, column=0, sticky="e", padx=5) # Set (minimum + max) Window size self.gui.update() self.gui.minsize(self.gui.winfo_width(), self.gui.winfo_height()) self.gui.maxsize(self.gui.winfo_width(), self.gui.winfo_height()) self.entryEnzyme.focus() self.buttonOK.bind("<ButtonRelease>", self.actionOK) self.buttonCancel.bind("<ButtonRelease>", self.actionCancel) self.entryEnzyme.bind("<Return>", self.actionOK) self.gui.mainloop() # self.gui.grab_release() # self.gui.destroy() def actionOK(self, event): enzymeString = self.entryEnzyme.get() if enzymeString in rest_dict.keys(): if enzymeString in self.parent.optimizer.restrictionEnzymeList: showinfo("", (enzymeString + " was already added to the list")) return self.parent.optimizer.restrictionEnzymeList.append(enzymeString) self.parent.guiRoot.event_generate("<<Update>>", when="tail") self.gui.destroy() else: showinfo("", (enzymeString + " is not a valid restriction enzyme")) def actionCancel(self, event): self.gui.destroy()
class _Testdialog: """Only used to test dialog from CLI""" def __init__(self, master): """Initialize CLI test GUI""" frame = Frame(master, width=300, height=300) frame.pack() self.master = master self.x, self.y, self.w, self.h = -1, -1, -1, -1 self.Button_1 = Button(text="Test Dialog", relief="raised", width="15") self.Button_1.place(x=84, y=36) self.Button_1.bind("<ButtonRelease-1>", self.Button_1_Click) def Button_1_Click(self, event): #click method for component ID=1 """Launch Select_Py_Version for CLI testing.""" rbL = ['2.5.5', '2.6.6', 'PYPY 3.2.2'] dialog = Select_Py_Version(self.master, "Test Dialog", dialogOptions={'rbL':rbL}) print( '===============Result from Dialog====================' ) print( dialog.result) print( '=====================================================' )
def create_check_buttons(self): self.cb_frame = LabelFrame(self, text="Global Settings") for cb in CHECK_BUTTONS: label = cb target_parent = self.cb_frame if isinstance(CHECK_BUTTONS[cb], dict) and 'sub_frame' in list(CHECK_BUTTONS[cb].keys()): target_parent = getattr(self, CHECK_BUTTONS[cb]['sub_frame']) setattr(self, cb, IntVar(value=type(CHECK_BUTTONS[cb]) == dict and CHECK_BUTTONS[cb]['val'] or CHECK_BUTTONS[cb])) self.this_cb = Checkbutton(target_parent, text=label, variable=getattr(self, cb)) self.this_cb.bind('<Button-1>', self.check_boxes_handler) self.this_cb.disable = (type(CHECK_BUTTONS[cb]) == dict and 'disable' in list(CHECK_BUTTONS[cb].keys())) self.this_cb.grid(sticky=W, column=0, row=len(target_parent.winfo_children())) self.this_cb.ref = cb for but in GLOBAL_BUTTONS: label = but ele = GLOBAL_BUTTONS[but] this_but = Button(self.cb_frame, text=but) this_but.bind('<ButtonRelease-1>', getattr(self, ele['handler'])) this_but.ref = but this_but.grid(sticky=W, column=0, row=len(self.cb_frame.winfo_children())) self.cb_frame.grid(column=0, row=0, rowspan=10, sticky=N)
class rmap(): _var = [1] _nc = 0 _nr = 0 _r = 0 _c = 0 _size = 0 _w = 0 _d = 0 _NoneUpdate = False _Nonelabel = False _Nonegettext = False _field = [] _endPoint = (0,0) _robot = '' # рисунок Робота (синее кольцо) _park = '' _canvas = '' sleep = 0.5 _task = '' _solve = '' _test = '' _res = '' _bum = 0 m = [] m.append('task1') m.append('task2') m.append('task3') m.append('task4') m.append('task5') m.append('task6') m.append('task7') m.append('task8') m.append('task9') m.append('task10') m.append('task11') m.append('task12') m.append('task13') class _v: # будет содержать изображение текста и квадратиков закраски и меток. Чтобы можно было "поднимать изображение" text = '' label = '' color = '' class _Tcell(): color = '' text = '' label = '' # color wUp = False wLeft = False v = '' def help(self): """ Вывести список команд Робота Примеры использования по команде r.help_full() """ print(""" Пояснение по каждой команде: print команда.__doc__ Например: print r.color.__doc__ ---=: Команды перемещения :=--- r.rt() # Вправо r.lt() # Влево r.dn() # Вниз r.up() # Вверх r.jumpTo(r,c) # Прыжок в точку. Без особых указаний в задачах не использовать -=-=-=-=-=-=-=-=-=-=-=-=-=-==-= ---=: Команды изменения среды :=--- r.pt([цвет]) # Закрасить указанным цветом. По умолчанию зеленым r.sw(направление) # Установить стену с указанной стороны r.settext(тест) # Вписать в клетку текст -=-=-=-=-=-=-=-=-=-=-=-=-=-==-= ---=: Команды обратной связи :=--- r.cl() # Каким цветом закрашена клетка? r.color() r.label() # Какого цвета метка в клетке? r.gettext() # Какой текст в клетке? r.getCoords() # Где Робот? r.getCoordR() # В какой строке Робот? r.getCoordС() # В каком столбце Робот? r.fu() # Сверху свободно? r.fd() # Снизу свободно? r.fr() # Справа свободно? r.fl() # Слева свободно? r.wu() # Сверху стена? r.wd() # Снизу стена? r.wr() # Справа стена? r.wl() # Слева стена? r.isPark # Робот на парковке? -=-=-=-=-=-=-=-=-=-=-=-=-=-==-= ---=: Дополнительно :=--- r.sleep = 0.4 # Установить размер задержки после каждого хода. Меньше значение - быстрее Робот. r._NoneUpdate = False # Отключить прорисовку поля r._NoneUpdate = True # Включить прорисовку поля r.demo() # Показать, что нужно сделать в текущей задаче r.demoAll() # Показать все задачи (с решениями, по очереди) r.randcolor() # Генерировать случайный цвет -=-=-=-=-=-=-=-=-=-=-=-=-=-==-= """) def help_full(self): """ Примеры. Для получения списка команд r.help() Примеры использования по команде r.help_full() Больше информации по каждой команде: print команда.__doc__ Например: print r.color.__doc__ """ print(""" Не реализовано в данной версии. Если нужно - пишите на [email protected] или на сайте progras.ru """) def demo(self): """Показать выполнение задачи Пример использования: #------------------- r.demo() #------------------- Для уcкорения использовать r.sleep = 0.01 В задании 10-3(4/5) можно отключить обновление экрана #------------------- r._NoneUpdate = True r.demo() r._NoneUpdate = False #------------------- """ global r r = self exec(self._solve) def demoAll(self): """Показать выполнение всех заданий в автоматическом режиме Пример использования: #------------------- r.demoAll() #------------------- Для того, чтобы Робот двигался быстрее, используйте #------------------- r.sleep = 0 r.demoAll() #------------------- """ global r r = self for x in r.m: r.lm(x) print(x) r.demo() r.pause() def __init__(self): self._w = 4 # толщина стен self._d = 4 # на столько меньше клетки закраска (с каждой стороны) self.sleep = 0.5 # замедление self._font_size = self._size // 2 self._tk = Tk() self._tk.geometry('+0+0') x = (self._tk.winfo_screenwidth() - self._tk.winfo_reqwidth()) / 3 y = (self._tk.winfo_screenheight() - self._tk.winfo_reqheight()) / 4 self._tk.wm_geometry("+%d+%d" % (x, y)) self._tk.title('Robot-hobot') self._canvas = Canvas(self._tk, width=(self._size*(self._nc+1)), height=(self._size*(self._nr+1)), bg="gray") buttons = Frame(self._tk) self.task = Label (self._tk, justify = 'left') self.res = Label (self._tk, justify = 'left') self._but_start = Button(buttons,text = 'start',width=10,height=1) self._but_start.bind('<ButtonRelease-1>',self.but1) self._but_demo = Button(buttons,text = 'demo',width=10,height=1) self._but_demo.bind('<ButtonRelease-1>',self.but_demo) self._but_reload = Button(buttons,text = 'reload',width=10,height=1) self._but_reload.bind('<ButtonRelease-1>',self.but_reload) self._but_load_next = Button(buttons,text = 'load next',width=10,height=1) self._but_load_next.bind('<ButtonRelease-1>',self.but_load_next) buttons.grid(row=0, column=0, sticky = "w") self._canvas.grid(row=1, column=0, sticky = "e") self._but_start.pack(side = "left") self._but_demo.pack(side = "left") self._but_reload.pack(side = "left") self._but_load_next.pack(side = "left") self.task.grid(row=3, column=0, sticky = "w") self.res.grid(row=4, column=0, sticky = "w") ## self.loadmap() def but_load_next(self,event): print ("load next") index = self.m.index(self._cur_map) if index < len(self.m)-1: self.lm(self.m[index+1]) else: self.lm(self.m[0]) def but_demo(self,event): print ("demo") self.demo() def but1(self,event): print ('start') #self.lm(self._cur_map) self.solve_task() def but_reload(self,event): print ("reload") self.lm(self._cur_map) def clear (self): "Очистка данных (без перерисовки)" self._canvas.delete('all') self._field = [] self._park = [] self._Nonelabel = False self._NoneisPark = False self._Nonesettext = False self._test = '' self._res = '' self._bum = 0 for r in range(1,self._nr+2): row = [] for c in range(1,self._nc+2): row.append (self._Tcell()) self._field.append(row) for r in range (1,self._nr): for c in range(1,self._nc): self._field[r][c].text = '' self._field[r][c].color = '' self._field[r][c].label = '' self._field[r][c].wUp = False self._field[r][c].wLeft = False self._field[r][c].v = self._v() for c in range (1,self._nc): self._field[1][c].wUp = True self._field[self._nr][c].wUp = True for r in range (1,self._nr): self._field[r][1].wLeft = True self._field[r][self._nc].wLeft = True self._solve = '' self._r = 1 self._c = 1 def _paintMap(self): "Перерисовка по имеющимся данным" remc = self._c remr = self._r size = self._size sleep = self.sleep self.sleep = 0 self._bg = [self._canvas.create_rectangle(1,1,(size*(self._nc+1)), (size*(self._nr+1)), fill="gray")] # создать поле for r in range (1, self._nr+1): self._bg.append(self._canvas.create_line(size,r*size,self._nc*size,r*size)) if r < self._nr: self._canvas.create_text(size/2,r*size+size/2,text=r) for c in range (1, self._nc+1): self._bg.append(self._canvas.create_line(c*size,size,c*size,self._nr*size)) if c < self._nc: self._bg.append(self._canvas.create_text(c*size+size/2,size/2,text=c)) # клетки и номера столбцов и строк for r in range (1,self._nr): for c in range(1,self._nc): self._r = r self._c = c if self._field[r][c].wUp: # стена сверху self.setWall('up') if self._field[r][c].wLeft: # стена слева self.setWall('left') if self._field[r][c].color != '' : # закраска self.paint(self._field[r][c].color) if self._field[r][c].label != '' : # метка0000 d = self._d x1 = self._size*(c) x2 = self._size*(c+1) y1 = self._size*(r) y2 = self._size*(r+1) self._canvas.delete(self._field[r][c].v.label) self._field[r][c].v.label = self._canvas.create_rectangle(x1+d,y1+d,x2-d,y2-d, width = d-1, outline = self._field[r][c].label) self._canvas.lift(self._robot) self.settext(self._field[r][c].text) # текст for self._c in range (1,self._nc): if self._field[self._nr][self._c].wUp: # стена сверху self.setWall('down') for self._r in range (1,self._nr): if self._field[self._r][self._nc].wLeft: # стена слева self.setWall('right') r = self._endPoint[0] c = self._endPoint[1] self._canvas.delete(self._park) if r > 0 and c > 0: self._park = self._canvas.create_oval (c*size+6,r*size+6, c*size+size-6,r*size+size-6, width = 3, outline = 'yellow') # конечная точка self.jumpTo((remr,remc)) self._task = '\n'+self._task self.task.config(text = self._task) self.res.config() self._update() self.sleep = sleep #self.pause() def _update(self): "Обновить canvas" if not self._NoneUpdate: self._canvas.update() time.sleep(self.sleep) def start(self,fun): self.solve_task = fun self._tk.mainloop() ##Робот def pause(self,t=1): """Приостановка выполнения программы. Пауза в секундах. #------------------- r.pause() # пауза в одну секунду #------------------- r.pause(2) # пауза две секунды #------------------- """ time.sleep(t) def left(self, a = 1): """Шаг влево #------------------- r.left() #------------------- r.lt() #------------------- r.lt(3) #------------------- """ if a == 1: if self.freeLeft(): self._c -= 1 self._canvas.move(self._robot,-self._size*a,0) self._update() else: self._stop() else : for z in range(0,a): self.left() def right(self, a = 1): """ Шаг вправо #------------------- r.right() #------------------- r.rt() #------------------- r.rt(5) #------------------- """ if a == 1: if self.freeRight(): self._c += 1 self._canvas.move(self._robot,self._size*a,0) self._update() else: self._stop() else : for z in range(0,a): self.right() def up(self, a = 1): """Шаг вверх #------------------- r.up() #------------------- r.up(3) #------------------- """ if a == 1: if self.freeUp(): self._r -= 1 self._canvas.move(self._robot,0,-self._size*a) self._update() else: self._stop() else : for z in range(0,a): self.up() def down(self, a = 1): """ Шаг вниз #------------------- r.down() #------------------- r.dn() #------------------- r.dn(4) #------------------- """ if a == 1: if self.freeDown(): self._r += 1 self._canvas.move(self._robot,0,self._size*a) self._update() else: self._stop() else : for z in range(0,a): self.down() def jumpTo(self,coord=(1,1)): """Прыжок в клетку с указанными координами. Через стены. #------------------- r.jumpTo((2,3)) # Робот окажется в третьем столбце второй строки #------------------- """ r = coord[0] c = coord[1] if ( 0 < r < self._nc) and (0 < c < self._nc): self._r = r self._c = c size = self._size self._canvas.coords(self._robot, c*size+4,r*size+4, c*size+size-4,r*size+size-4) self._canvas.lift(self._robot) self._update() else: print("Попытка переместиться за пределы поля. Отказано.") def paint (self, color = 'green'): """ Закрасить текущую клетку выбранным цветом. Если цвет не указан, то зеленым #------------------- r.paint() # Закрасит текущую клетку зеленым цветом #------------------- r.pt() # Закрасит текущую клетку зеленым цветом #------------------- r.pt('red') # Закрасит текущую клетку красным цветом #------------------- r.pt(r.randcolor()) # Закрасит текущую клетку случайным цветом #------------------- r.pt(r.label()) # Закрасит текущую клетку цветом метки в этой клетке #------------------- """ d = self._d+1 self._field[self._r][self._c].color = color x1 = self._size*(self._c) x2 = self._size*(self._c+1) y1 = self._size*(self._r) y2 = self._size*(self._r+1) self._canvas.delete(self._field[self._r][self._c].v.color) self._field[self._r][self._c].v.color = self._canvas.create_rectangle(x1+d,y1+d,x2-d,y2-d, width = 0, fill = color) self._canvas.lift(self._field[self._r][self._c].v.text) self._canvas.lift(self._robot) self._canvas.lift(self._park) self._update() def setWall (self, target): """ Установить стену с указанной стороны #------------------- r.sw('up') # Установить стену сверху #------------------- r.sw('left') # Установить стену слева #------------------- r.sw('down') # Установить стену снизу #------------------- r.sw('right') # Установить стену справа #------------------- """ size = self._size w = self._w if target == 'up': r = self._r c = self._c x1 = size*(c)-1 x2 = size*(c+1)+1 y1 = size*(r) y2 = size*(r+1) self._field[r][c].wUp = True self._canvas.create_line(x1,y1,x2,y1, width = w) elif target == 'left': r = self._r c = self._c x1 = size*(c) x2 = size*(c+1) y1 = size*(r)-1 y2 = size*(r+1)+1 self._field[r][c].wLeft = True self._canvas.create_line(x1,y1,x1,y2, width = w) elif target == 'down': r = self._r+1 c = self._c x1 = size*(c)-1 x2 = size*(c+1)+1 y1 = size*(r) y2 = size*(r+1) self._field[r][c].wDown = True self._canvas.create_line(x1,y1,x2,y1, width = w) elif target == 'right': r = self._r c = self._c+1 x1 = size*(c) x2 = size*(c+1) y1 = size*(r)-1 y2 = size*(r+1)+1 self._field[r][c].wRight = True self._canvas.create_line(x1,y1,x1,y2, width = 4) self._update() def wallUp (self): """ Возвращает истину, если сверху есть стена #------------------- if r.wallUp(): r.pt() # Закрасить, если сверху стена #------------------- if r.wu(): r.pt() # Закрасить, если сверху стена #------------------- if r.wu(): r.pt() # Закрасить, если сверху стена r.rt() # Перейти вправо #------------------- while r.wu(): # Идти вправо, пока сверху есть стена r.rt() """ return self._field[self._r][self._c].wUp def wallDown (self): """ Возвращает истину, если снизу есть стена #------------------- if r.wallDown(): r.pt() # Закрасить, если снизу стена #------------------- if r.wd(): r.pt() # Закрасить, если снизу стена #------------------- if r.wd(): r.pt() # Закрасить, если снизу стена r.rt() # Перейти вправо #------------------- while r.wd(): # Идти вправо, пока снизу есть стена r.rt() """ return self._field[self._r+1][self._c].wUp def wallLeft (self): """ Возвращает истину, если слева есть стена #------------------- if r.wallLeft(): r.pt() # Закрасить, если слева стена #------------------- if r.wl(): r.pt() # Закрасить, если слева стена #------------------- if r.wl(): r.pt() # Закрасить, если слева стена r.dn() # Перейти вниз #------------------- while r.wl(): # Идти вниз, пока слева есть стена r.dn() """ return self._field[self._r][self._c].wLeft def wallRight (self): """ Возвращает истину, если справа есть стена #------------------- if r.wallRight(): r.pt() # Закрасить, если справа стена #------------------- if r.wr(): r.pt() # Закрасить, если справа стена #------------------- if r.wr(): r.pt() # Закрасить, если справа стена r.dn() # Перейти вниз #------------------- while r.wr(): # Идти вниз, пока справа есть стена r.dn() """ return self._field[self._r][self._c+1].wLeft def freeUp (self): """ Возвращает истину, если сверху свободно (нет стены) #------------------- if r.freeUp(): r.pt() # Закрасить, если сверху свободно #------------------- if r.fu(): r.up() # Шагнуть вверх, если сверху свободно #------------------- if r.fu(): r.up() # Шагнуть вверх r.pt() # Закрасить r.dn() # Перейти вниз #------------------- while r.fu(): # Идти вверх, пока сверху свободно r.up() """ return not self._field[self._r][self._c].wUp def freeDown (self): """ Возвращает истину, если снизу свободно (нет стены) #------------------- if r.freeDown(): r.pt() # Закрасить, если снизу свободно #------------------- if r.fd(): r.dn() # Шагнуть вверх, если снизу свободно #------------------- if r.fd(): r.dn() # Шагнуть снизу r.pt() # Закрасить r.up() # Перейти вверх #------------------- while r.fd(): # Идти вниз, пока снизу свободно r.dn() """ return not self._field[self._r+1][self._c].wUp def freeLeft (self): """ Возвращает истину, если слева свободно (нет стены) #------------------- if r.freeLeft(): r.pt() # Закрасить, если слева свободно #------------------- if r.fl(): r.lt() # Шагнуть влево, если слева свободно #------------------- if r.fl(): r.lt() # Шагнуть влево r.pt() # Закрасить r.rt() # Перейти вправо #------------------- while r.fl(): # Идти влево, пока слева свободно r.lt() """ return not self._field[self._r][self._c].wLeft def freeRight (self): """ Возвращает истину, если снизу свободно (нет стены) #------------------- if r.freeDown(): r.pt() # Закрасить, если снизу свободно #------------------- if r.fd(): r.dn() # Шагнуть вверх, если снизу свободно #------------------- if r.fd(): r.dn() # Шагнуть снизу r.pt() # Закрасить r.up() # Перейти вверх #------------------- while r.fd(): # Идти вниз, пока снизу свободно r.dn() """ return not self._field[self._r][self._c+1].wLeft def getCoords(self): " Возвращает координаты в виде (row,column)" return (self._r,self._c) def getCoordR(self): " Возвращает номер строки, в которой находиться Робот" return self._r def getCoordC(self): " Возвращает номер столбца, в которой находиться Робот" return self._c def isPark (self): " Возвращает истину, если Робот находиться на парковке" if self._NoneisPark: self.null() else: return self._endPoint == self.getCoords() def color (self): """ Возвращает цвет, которым закрашена клетка Можно использовать для проверки, закрашена ли клетка: #------------------- # Закрасить, если сверху закрашено r.up() if r.color(): r.dn() r.pt() else: r.dn() #------------------- if r.color() == 'red': r.rt() # Вправо, если закрашено красным #------------------- """ return self._field[self._r][self._c].color def randcolor (self): """ Возвращает случайный цвет #------------------- r.pt(r.randcolor()) # Закрасить случайным цветом #------------------- # Закрасить соседнюю клетку тем же цветом, что и текущая x = r.color() r.rt() r.pt(x) #------------------- """ cr = rnd(1,255,10) cg = rnd(1,255,10) cb = rnd(1,255,10) color = "#%02X%02X%02X" %(cr,cg,cb) return str(color) def label (self): """ Возвращает цвет метки текущей клетки #------------------- if r.label() == 'red': r.pt('red') # Закрасить клетку красным, если метка красная #------------------- """ if self._Nonelabel: self.null() else: return self._field[self._r][self._c].label def gettext(self): """ Возвращает текст, записанный в ячейке. #------------------- if r.gettext() != '': r.rt() # Перейти вправо, если в ячейке есть какой-нибудь текст #------------------- if r.gettext() == '3': r.rt() # Перейти вправо, если в ячейке записано 3 #------------------- n = r.gettext() if n: r.rt(n) # Перейти вправо на количество шагов, указанное в клетке #------------------- """ if self._Nonegettext: self.null() else: return self._field[self._r][self._c].text def settext(self,text): """ Записать текст в клетку #------------------- r.settext(3) #------------------- """ self._field[self._r][self._c].text = text d = 1 x1 = self._size*(self._c) x2 = self._size*(self._c+1) y1 = self._size*(self._r) y2 = self._size*(self._r+1) self._canvas.delete(self._field[self._r][self._c].v.text) self._field[self._r][self._c].v.text = self._canvas.create_text(self._c*self._size+self._size/2,self._r*self._size+self._size/2,text = self._field[self._r][self._c].text, font = ('Helvetica', self._font_size,'bold')) self._update() def _stop (self): print ("Bum!") self._bum = 1 self._canvas.delete(self._robot) x = self._c y = self._r self._robot = self._canvas.create_oval( x*self._size+2*self._d,y*self._size+2*self._d, x*self._size+self._size-2*self._d,y*self._size+self._size-2*self._d, fill = '#FF0000') def null (self, *args): print('Эта команда запрещена к использованию в данной задаче. Ищите другой способ') return '' def loadmap(self,mn=m[0],variant=0): """ Загрузить карту (задачу) #------------------- r.loadmap('task10-5') #------------------- r.lm('task10-5') # Загрузить задачу по названию #------------------- r.lm(r.m[5]) # Загрузить задачу по номеру #------------------- # Вывести полный список названий и номеров заданий for x in r.m: print r.m.index(x),x #------------------- """ self._tk.title(mn) self._cur_map = mn self._NoneUpdate = False self._endPoint = (0, 0) # self._NoneUpdate = True if mn == 'task1': self._nc = 7 self._nr = 5 self._size = 30 self.clear() self._r = 3 self._c = 2 self._solve = '' self._endPoint = (3,5) self._task = 'Необходимо перевести Робота по лабиринту\n' \ ' из начального положения в конечное.\n' self._field[2][2].wUp = True self._field[2][3].wUp = True self._field[2][4].wUp = True self._field[2][5].wUp = True self._field[4][2].wUp = True self._field[4][3].wUp = True self._field[4][4].wUp = True self._field[4][5].wUp = True self._field[2][4].wLeft = True self._field[3][3].wLeft = True self._field[3][5].wLeft = True ##-------------------------------------------------------------------------------------------- elif mn == 'task2': self._nc = 16 self._nr = 4 self._size = 30 self.clear() self._r = 3 self._c = 1 self._solve = '' self._task = 'Составьте программу рисования узора.\n' ##-------------------------------------------------------------------------------------------- elif mn == 'task3': self._nc = 10 self._nr = 5 self._size = 30 self.clear() self._r = 2 self._c = 1 self._endPoint = (2,9) self._solve = '' self._task = 'Необходимо провести Робота вдоль коридора\n' \ ' из начального положения в конечное,\n' \ ' заглядывая в каждый боковой коридор.' for i in range(2, 9): self._field[2][i].wUp = True if i%2 == 0: self._field[3][i].wUp = True else: self._field[4][i].wUp = True if i < 8: self._field[3][i+1].wLeft = True ##-------------------------------------------------------------------------------------------- elif mn == 'task4': self._nc = 8 self._nr = 12 self._size = 30 self.clear() self._r = rnd(1, self._nr) self._c = rnd(1, self._nc) for i in range(0, 5): for j in range(0, 3): self._field[6+2*j-i][2+i].label = 'red' self._solve = '' self._task = 'Составьте программу закрашивания\n' \ ' клеток поля, отмеченных звездочкой.\n' ##-------------------------------------------------------------------------------------------- elif mn == 'task5': self._nc = 11 self._nr = 10 self._r = 1 self._c = 1 self._size = 30 self.clear() self._solve = '' self._task = 'Составьте программу рисования узора.' ##-------------------------------------------------------------------------------------------- ##-------------------------------------------------------------------------------------------- elif mn == 'task6': self._nc = 25 self._nr = 25 self._r = 1 self._c = 1 self._size = 20 self.clear() self._solve = '' self._task = 'Составьте программу рисования фигуры в виде буквы "Т".\n' \ ' Вертикальные и горизонтальные размеры пользователь вводит\n' \ ' с клавиатуры. Ввод данных можно осуществлять любым способом.\n' ##------------------------------------------------------------------------------------------------------- elif mn == 'task7': self._nc = 16 self._nr = 11 self._size = 25 self.clear() self._r = rnd(1, self._nr) self._c = rnd(1, self._nc) self._field[3][2].wUp = True self._field[2][9].wUp = True self._field[3][12].wUp = True self._field[6][12].wUp = True self._field[7][3].wUp = True self._field[7][9].wUp = True self._field[8][6].wUp = True self._field[9][2].wUp = True self._field[9][11].wUp = True for i in range(0, 4): self._field[4][5+i].wUp = True self._field[5][5+i].wUp = True self._solve = '' self._task = 'Где-то в поле Робота находится горизонтальный коридор шириной в одну клетку\n' \ ' неизвестной длины. Робот из верхнего левого угла поля должен дойти до\n' \ ' коридора и закрасить клетки внутри него, как указано в задании. По полю\n' \ ' Робота в произвольном порядке располагаются стены, но расстояние \n' \ 'между ними больше одной клетки.\n' ##-------------------------------------------------------------------------------------------- elif mn == 'task8': self._nc = 16 self._nr = 11 self._size = 25 self.clear() self._r = rnd(1, self._nr) self._c = rnd(1, self._nc) self._field[2][6].wLeft = True self._field[3][6].wLeft = True self._field[5][6].wLeft = True self._field[6][6].wLeft = True self._field[7][6].wLeft = True self._field[8][6].wLeft = True self._solve = '' self._task = 'Где-то в поле Робота находится вертикальная стена с отверстием в одну клетку,\n' \ ' размеры которой неизвестны. Робот из произвольной клетки должен дойти до\n' \ ' стены и закрасить клетки как показано в задании.\n' ##-------------------------------------------------------------------------------------------- elif mn == 'task9': self._nc = 20 self._nr = 20 self._size = 25 self.clear() self._r = rnd(1, self._nr) self._c = rnd(1, self._nc) c = rnd(2,16) r = rnd(2,16) w = rnd(3,8) h = rnd(3,8) if c + w >= self._nc: w = self._nc-c if r + h >= self._nc: h = self._nr-r for rcount in range(0,h): for ccount in range(0,w): self._field[r + rcount][c+ccount].label = 'green' self._solve = '' self._task = 'На поле находится квадрат из закрашенных клеток. Вычислить и вывести на экран площадь квадрата.\n' ##-------------------------------------------------------------------------------------------- elif mn == 'task10': self._nc = 15 self._nr = 11 self._size = 30 self.clear() self._r = 2 self._c = 1 self._field[2][1].wUp = True self._field[2][2].wUp = True self._field[2][4].wUp = True self._field[2][5].wUp = True self._field[2][6].wUp = True self._field[2][8].wUp = True self._field[2][9].wUp = True self._field[2][11].wUp = True self._field[2][12].wUp = True self._field[2][13].wLeft = True self._field[3][1].wUp = True self._field[3][2].wUp = True self._field[3][3].wUp = True self._field[3][4].wUp = True self._field[3][6].wUp = True self._field[3][7].wUp = True self._field[3][8].wUp = True self._field[3][10].wUp = True self._field[3][11].wUp = True self._field[3][12].wLeft = True self._field[4][3].wLeft = True self._field[4][3].wUp = True self._field[4][4].wUp = True self._field[4][5].wUp = True self._field[4][6].wUp = True self._field[4][8].wUp = True self._field[4][9].wUp = True self._field[4][10].wUp = True self._field[4][11].wUp = True self._field[4][13].wLeft = True self._field[5][3].wLeft = True self._field[5][4].wLeft = True self._field[5][4].wUp = True self._field[5][6].wUp = True self._field[5][7].wUp = True self._field[5][8].wUp = True self._field[5][10].wUp = True self._field[5][11].wUp = True self._field[5][12].wUp = True self._field[6][3].wLeft = True self._field[6][4].wUp = True self._field[6][5].wLeft = True self._field[7][3].wUp = True self._field[7][4].wLeft = True self._field[7][6].wUp = True self._field[7][7].wLeft = True self._field[8][4].wUp = True self._field[8][5].wUp = True self._field[8][6].wLeft = True self._field[8][7].wUp = True self._field[8][8].wLeft = True self._field[9][6].wUp = True self._field[9][7].wLeft = True self._field[9][8].wUp = True self._field[9][9].wUp = True self._field[9][10].wLeft = True self._field[10][7].wUp = True self._field[10][9].wLeft = True self._field[10][10].wLeft = True self._endPoint = (10,1) self._solve = """ """ self._task = 'Необходимо провести Робота по коридору шириной в одну клетку из начального положения до конца коридора, \n' \ 'закрашивая при этом все клетки коридора, которые имеют выход. Выходы размером в одну клетку располагаются \n' \ 'произвольно по всей длине коридора. Коридор заканчивается тупиком. Коридор имеет два горизонтальных и \n' \ 'диагональный участки. Пример коридора показан на рисунке.\n' elif mn == 'task11': self._nc = 15 self._nr = 11 self._size = 30 self.clear() self._r = rnd(1, self._nr) self._c = rnd(1, self._nc) for i in range(1,self._nr): for j in range(1,self._nc): self._field[i][j].text = str(rnd(0, 10)) self._task = 'На поле 10х15 каждой в каждой клетке записана цифра (от 0 до 9).\n Закрасить квадрат 2х2 с наименьшей суммой значений клеток.' elif mn == 'task12': self._nc = 15 self._nr = 6 self._size = 30 self.clear() self._r = 2 self._c = 13 self._field[2][2].wUp = True self._field[2][3].wLeft = True self._field[3][3].wLeft = True self._field[4][3].wLeft = True self._field[5][3].wUp = True self._field[5][4].wUp = True self._field[4][5].wLeft = True self._field[3][5].wLeft = True self._field[2][5].wLeft = True self._field[2][5].wUp = True self._field[2][6].wLeft = True self._field[3][6].wLeft = True self._field[4][6].wLeft = True self._field[5][6].wUp = True self._field[5][7].wUp = True self._field[5][8].wUp = True self._field[4][9].wLeft = True self._field[3][9].wLeft = True self._field[2][9].wLeft = True self._field[2][9].wUp = True self._field[2][10].wUp = True self._field[2][11].wLeft = True self._field[3][11].wLeft = True self._field[4][11].wLeft = True self._field[5][11].wUp = True self._field[4][12].wLeft = True self._field[3][12].wLeft = True self._field[2][12].wLeft = True self._field[2][12].wUp = True self._field[2][13].wUp = True self._task = 'Робот движется вдоль стены, профиль которой показан на рисунке,\n' \ ' от начального положения до конца стены. Необходимо закрасить\n' \ ' все внутренние углы стены, как показано на примере. Размеры стены\n могут быть произвольны.' elif mn == 'task13': self._nc = 20 self._nr = 20 self._size = 25 self.clear() self._r = rnd(self._nr/2, self._nr) self._c = rnd(self._nc/2, self._nc) col = rnd(2, self._nc/2) row = rnd(4, self._nr/2) height = rnd(4, self._nr-4) if row + height >= self._nr: height = self._nr - row-1 for i in range(row, row+height): self._field[i][col].wLeft = True ##-------------------------------------------------------------------------------------------- ##-------------------------------------------------------------------------------------------- # сделать прямое управление с демонстрацией датчиков и возможностей # при запуске робота создавать task.py и справочник :) # сделать робота без клеток !!! ##-------------------------------------------------------------------------------------------- ##-------------------------------------------------------------------------------------------- else: print(mn) self._task = "Нет задачи с таким номером" self._test = '-' self._canvas.config( width=(self._size*(self._nc+1)), height=(self._size*(self._nr+1))) x = y = 1 d = self._d d = 6 self._robot = self._canvas.create_oval( x*self._size+d,y*self._size+d, x*self._size+self._size-d,y*self._size+self._size-d, outline = '#4400FF', width = 3) self._paintMap() lm = loadmap lt = left rt = right dn = down pt = paint sw = setWall wu = wallUp wd = wallDown wl = wallLeft wr = wallRight fu = freeUp fd = freeDown fl = freeLeft fr = freeRight cl = color
panelFrame = Frame(root, height = 60, bg = 'gray') textFrame = Frame(root, height = 340, width = 600) panelFrame.pack(side = 'top', fill = 'x') textFrame.pack(side = 'bottom', fill = 'both', expand = 1) textbox = Text(textFrame, font='Arial 14', wrap='word') scrollbar = Scrollbar(textFrame) scrollbar['command'] = textbox.yview textbox['yscrollcommand'] = scrollbar.set textbox.pack(side = 'left', fill = 'both', expand = 1) scrollbar.pack(side = 'right', fill = 'y') loadBtn = Button(panelFrame, text = 'Load') saveBtn = Button(panelFrame, text = 'Save') quitBtn = Button(panelFrame, text = 'Quit') loadBtn.bind("<Button-1>", LoadFile) saveBtn.bind("<Button-1>", SaveFile) quitBtn.bind("<Button-1>", Quit) loadBtn.place(x = 10, y = 10, width = 40, height = 40) saveBtn.place(x = 60, y = 10, width = 40, height = 40) quitBtn.place(x = 110, y = 10, width = 40, height = 40) root.mainloop()
ent = Entry(root1,bd=5) lb.grid(row = 1, column = 1) ent.grid(row = 2,column = 1) lb1.grid(row = 3,column = 1) entx1=Entry(root1, bd = 5) entx2=Entry(root1, bd = 5) entx1.grid(row = 4, column = 0) entx2.grid(row = 4, column = 2) lb2.grid(row = 5, column = 1) enty1=Entry(root1, bd = 5) enty2=Entry(root1, bd = 5) enty1.grid(row = 6, column = 0) enty2.grid(row = 6, column = 2) bt = Button(root1, text = 'done', width = 10, height = 3, bg = 'black', fg='white', command = root1.destroy) bt.bind("<Button-1>", start) bt.grid(row = 7, column = 1) root1.mainloop() pre = re.compile('([A-Za-z]+)') xre = re.compile(r'\bx\b') notx = re.compile('@') s = tex s = xre.sub('@', s) s = pre.sub(r'np.\1', s) s = notx.sub('x', s) pl.figure(figsize=(8, 6), dpi=80) pl.subplot(1, 1, 1) x = np.linspace( float(a),float(b),2000, endpoint=True) C = eval(s)
class Tk_Nosy(object): """This class is the tkinter GUI object""" # make a collection of python interpreters to choose from pythonInterpreterCollection = None # will be PyInterpsOnSys object # extra python interpreters can run nosetests concurrently to main window # concurrent_versionL contains tuples = (PI, Popup) concurrent_versionL = [] # additional running python interpreters def __init__(self, master): self.dirname = os.path.abspath( os.curdir ) self.initComplete = 0 self.master = master self.x, self.y, self.w, self.h = -1,-1,-1,-1 # bind master to <Configure> in order to handle any resizing, etc. # postpone self.master.bind("<Configure>", self.Master_Configure) self.master.bind('<Enter>', self.bindConfigure) self.menuBar = Menu(master, relief = "raised", bd=2) self.menuBar.add("command", label = "Change_Dir", command = self.menu_Directory_Change_Dir) disp_Choices = Menu(self.menuBar, tearoff=0) self.display_test_details = StringVar() self.display_test_details.set('N') disp_Choices.add_checkbutton(label='Display Test Details', variable=self.display_test_details, onvalue='Y', offvalue='N') self.display_watched_files = StringVar() self.display_watched_files.set('N') disp_Choices.add_checkbutton(label='Show Watched Files', variable=self.display_watched_files, onvalue='Y', offvalue='N') self.menuBar.add("cascade", label="Display", menu=disp_Choices) py_choices = Menu(self.menuBar, tearoff=0) py_choices.add("command", label = "Change Python Version", command = self.changePythonVersion) py_choices.add("command", label = "Find New Python Interpreter", command = self.findNewPythonInterpreter) py_choices.add("command", label = "Launch Another Python Interpreter", command = self.launchAnotherPythonInterpreter) self.menuBar.add("cascade", label="Python", menu=py_choices) #top_Snippet = Menu(self.menuBar, tearoff=0) self.menuBar.add("command", label = "Run", command = self.menu_Run) self.display_test_details.trace("w", self.rerun_tests) self.display_watched_files.trace("w", self.rerun_tests) master.config(menu=self.menuBar) # make a Status Bar self.statusMessage = StringVar() self.statusMessage.set(self.dirname) self.statusbar = Label(self.master, textvariable=self.statusMessage, bd=1, relief=SUNKEN) self.statusbar.pack(anchor=SW, fill=X, side=BOTTOM) self.statusbar_bg = self.statusbar.cget('bg') # save bg for restore self.arial_12_bold_font = tkinter.font.Font(family="Arial", size=12, weight=tkinter.font.BOLD) self.arial_12_font = tkinter.font.Font(family="Arial", size=12) self.statusbar.config( font=self.arial_12_bold_font ) frame = Frame(master) frame.pack(anchor=NE, fill=BOTH, side=TOP) self.Pass_Fail_Button = Button(frame,text="Pass/Fail Will Be Shown Here", image="", width="15", background="green", anchor=W, justify=LEFT, padx=2) self.Pass_Fail_Button.pack(anchor=NE, fill=X, side=TOP) self.Pass_Fail_Button.bind("<ButtonRelease-1>", self.Pass_Fail_Button_Click) self.master.title("tk_nosy") self.oscillator = 1 # animates character on title self.oscillator_B = 0 # used to return statusbar to statusbar_bg self.lbframe = Frame( frame ) self.lbframe.pack(anchor=SE, side=LEFT, fill=BOTH, expand=1) scrollbar = Scrollbar(self.lbframe, orient=VERTICAL) self.Text_1 = Text(self.lbframe, width="80", height="24", yscrollcommand=scrollbar.set) scrollbar.config(command=self.Text_1.yview) scrollbar.pack(side=RIGHT, fill=Y) self.Text_1.pack(side=LEFT, fill=BOTH, expand=1) self.master.resizable(1,1) # Linux may not respect this self.numNosyCalls = 0 self.need_to_pick_dir = 1 print('sys.argv =',sys.argv) if len(sys.argv)>1: # I don't care what the exception is, if there's a problem, bail # pylint: disable=W0702 print( "Try Dir =",sys.argv[1] ) try: dirname = os.path.abspath( sys.argv[1] ) self.try_change_to_new_dir( dirname ) except Exception: pass # let Alarm force dir selection else: try: if os.path.isdir(os.path.join( self.dirname, 'tests' )): self.try_change_to_new_dir( self.dirname ) except Exception: pass # let Alarm force dir selection print(LICENSE) self.defaultPyInterp = None # need to identify default python interpreter if Tk_Nosy.pythonInterpreterCollection == None: Tk_Nosy.pythonInterpreterCollection = PyInterpsOnSys() self.defaultPyInterp = Tk_Nosy.pythonInterpreterCollection.get_PI_obj_by_py_path( sys.executable ) #print( Tk_Nosy.pythonInterpreterCollection ) self.Alarm() def try_change_to_new_dir(self, dirname): """A legal abspath will switch to dirname.""" # I don't care what the exception is, if there's a problem, bail # pylint: disable=W0702 if dirname: try: dirname = os.path.abspath( dirname ) except: return # let Alarm force dir selection else: return self.dirname = dirname print('Selected dirname =',dirname) fileD.clear() os.chdir( self.dirname ) self.reset_statusbar_bg() self.need_to_pick_dir = 0 #with open(NOSY_USER_DATA_FILE, 'w') as text_file: # text_file.write( self.dirname ) self.numNosyCalls = 0 def reset_statusbar_bg(self): """Return status bar to default state""" self.statusbar.config(bg=self.statusbar_bg) self.statusMessage.set(self.dirname) def set_statusbar_bg(self, c): """Set status bar to show new color and message""" self.statusbar.config(bg=c) self.oscillator_B = 1 # will return to initial color after a few cycles def menu_Directory_Change_Dir(self): """Menu selection to set directory in which to run nosetests""" dirname = self.AskDirectory( title='Choose Directory For Nose Tests', initialdir=".") if dirname: self.try_change_to_new_dir( dirname ) # >>>>>>insert any user code below this comment for section "menu_Directory_Change_Dir" # replace, delete, or comment-out the following print("called menu_Directory_Change_Dir") def menu_Run(self): """User initiates a nosetests run, not file change detection.""" print("called menu_Run") self.callNosy() def rerun_tests(self,*args): self.menu_Run() def callNosy(self): """Run nosetests and display results""" self.numNosyCalls += 1 runL = [(self.defaultPyInterp, self)] for PI,Popup in Tk_Nosy.concurrent_versionL: runL.append( (PI, Popup) ) for PI, tkwindow in runL: tkwindow.Text_1.delete(1.0, END) # turn indicator button gray while running the tests tkwindow.Pass_Fail_Button.config(background="#999999", text='TESTING...', font=self.arial_12_bold_font) self.master.update() self.master.update_idletasks() for PI, tkwindow in runL: self.run_tkwin_nosetests( PI, tkwindow) self.master.winfo_toplevel().wm_geometry("") def run_tkwin_nosetests(self, PI, tkwindow): """Run nosetests for main python interpreter and any concurrent python interpreters. Update GUI to show results. """ if PI.nose_version == None: # if nose was not installed last time we checked, check again PI.nose_version, err_msg = get_nose_version_info( PI.full_path ) if PI.nose_version == None: print( "\a" ) # make beep s = 'Can not verify nose for:\nPython ' + PI.name() tkwindow.Pass_Fail_Button.config(background='orange', text=s, font=self.arial_12_bold_font) s = 'Please verify nose installed for:\n'+str(PI) +\ '\n\n' + err_msg+\ '\n\nFor install instructions see:\n'+\ 'https://nose.readthedocs.org/en/latest/' tkwindow.Text_1.insert(END, s ) ShowError(title='Can not verify nose', message=s) return # pylint: disable=W0201 passedAllTests, numPassed, numFailed, numErrors, numSkipped, outputTextL = \ run_nosetests(self.numNosyCalls, PI, display_test_details=self.display_test_details.get()) max_len_s = 42 num_lines = 1 for s in outputTextL: tkwindow.Text_1.insert(END, s) sL = s.split('\n') for ss in sL: max_len_s = max(max_len_s, len(ss)) num_lines += 1 if self.numNosyCalls % 2: myFont = self.arial_12_bold_font else: myFont = self.arial_12_font if passedAllTests: s = 'PASSED' if numPassed > 1: s = 'PASSED ALL %i TESTS'%numPassed elif numPassed == 1: s = 'PASSED ONE TEST' bg="#00ff00" if numSkipped==1: s = 'passed with 1 SKIP' bg = "#00cc00" elif numSkipped > 1: s = 'passed with %i SKIPS'%numSkipped bg = "#00cc00" elif numPassed==0: s = 'No Tests Found' bg="#ff8000" tkwindow.Pass_Fail_Button.config(background=bg, text=s, font=myFont) #self.master.geometry('200x50') else: s = 'FAILED %i, ERRORS %i, SKIP %i, PASSED %i'%(numFailed, numErrors, numSkipped, numPassed) tkwindow.Pass_Fail_Button.config(background="#ff0000", text=s, font=myFont) #self.master.geometry('516x385') # Show list of files being watched. #self.Text_1.insert(END, '_'*40+'\n') tkwindow.Text_1.insert(END, 'WATCHED *.py FILES'.center(40,'_') + '\n' ) tkwindow.Text_1.insert(END, '%s%s..\n\n'%(self.dirname,os.path.sep) ) num_lines += 3 len_dirname = len( self.dirname ) if self.display_watched_files.get()=='Y': keyL = list(fileD.keys()) keyL.sort() lastdir = '' for key in keyL: dn = os.path.dirname( key ) if dn != lastdir: tkwindow.Text_1.insert(END, '..'+dn[len_dirname:] + '\n') max_len_s = max(max_len_s, len(dn)+1) lastdir = dn num_lines += 1 s = ' ' +os.path.basename( key ) tkwindow.Text_1.insert(END, s + '\n') max_len_s = max(max_len_s, len(s)+1) num_lines += 1 else: num_lines += 1 tkwindow.Text_1.insert(END, ' %i files watched.\n'%len(fileD)) tkwindow.Text_1.config(width=max_len_s) tkwindow.Text_1.config(height=min(40, num_lines)) def bindConfigure(self, event): """Part of goofy main window setup in tkinter.""" # tkinter requires arguments, but I don't use them # pylint: disable=W0613 if not self.initComplete: self.master.bind("<Configure>", self.Master_Configure) self.initComplete = 1 def change_python_exe(self, full_path ): """Allow nosetests to be run under any available python version """ PI = Tk_Nosy.pythonInterpreterCollection.add_interp( full_path ) if PI: self.defaultPyInterp = PI def findNewPythonInterpreter(self): """Find a new python interpreter, one that is not already in the PyInterpsOnSys object (pythonInterpreterCollection). """ if Tk_Nosy.pythonInterpreterCollection == None: print( 'pythonInterpreterCollection NOT yet initialized' ) self.statusMessage.set('Interpreter Collection NOT initialized') self.set_statusbar_bg( '#FF9999' ) return print('Open File') filetypes = [ ('python executable','py*'), ('Any File','*.*')] pathopen = tkFileDialog.askopenfilename(parent=self.master, title='Select Python Executable', filetypes=filetypes, initialdir=self.defaultPyInterp.full_path) if pathopen: self.change_python_exe( pathopen ) self.menu_Run() def kill_popup_window(self, popup_name): """Close a popup window running another verions of python interpreter""" for itup, tup in enumerate(Tk_Nosy.concurrent_versionL): PI, Popup = tup s = '%s %s' % (PI.exe_name, PI.version_str) if popup_name == s: Tk_Nosy.concurrent_versionL.pop( itup ) return True # removed popup from list return False # no popup found def launchAnotherPythonInterpreter(self): """Launch a pop-up window that concurrently runs another python version""" removeNameL=[self.defaultPyInterp.name()] for PI,Popup in Tk_Nosy.concurrent_versionL: removeNameL.append( PI.name() ) piL = Tk_Nosy.pythonInterpreterCollection.get_PI_list( removeNameL=removeNameL ) if len(piL)==0: print( 'All identified python interpreters in use.' ) else: print( [pi.name() for pi in piL] ) rbL = [PI.name() for PI in piL] dialog = Select_Py_Version(self.master, "Launch Another Python Version", dialogOptions={'rbL':rbL}) if dialog.result: PI = Tk_Nosy.pythonInterpreterCollection.get_PI_obj_by_name( dialog.result['selection']) s = '%s %s' % (PI.exe_name, PI.version_str) Popup = SatelliteWindow(self, self.master, s) Tk_Nosy.concurrent_versionL.append( (PI, Popup) ) self.menu_Run() def changePythonVersion(self): """Change to a different python version. If the PyInterpsOnSys object (pythonInterpreterCollection) has been initialized, select from its list. Otherwise find the python interpreter executable (ex. python.exe or python) """ if (Tk_Nosy.pythonInterpreterCollection == None) or \ (Tk_Nosy.pythonInterpreterCollection.num_terps() == 0): # If there is no list of available python interpreters, look for python file print('Open File') filetypes = [ ('python executable','py*'), ('Any File','*.*')] pathopen = tkFileDialog.askopenfilename(parent=self.master, title='Select Python Executable', filetypes=filetypes, initialdir=self.defaultPyInterp.full_path) if pathopen: self.change_python_exe( pathopen ) self.menu_Run() else: rbL = [PI.name() for PI in Tk_Nosy.pythonInterpreterCollection.interpL] dialog = Select_Py_Version(self.master, "Select Python Version", dialogOptions={'rbL':rbL}) if dialog.result: PI = Tk_Nosy.pythonInterpreterCollection.get_PI_obj_by_name( dialog.result['selection'] ) pathopen = PI.full_path self.change_python_exe( pathopen ) self.menu_Run() # return a string containing directory name def AskDirectory(self, title='Choose Directory', initialdir="."): """Run pop-up menu for user to select directory.""" # This is not an error # pylint: disable=E1101 if sys.version_info < (3,): dirname = tkFileDialog.askdirectory(parent=self.master, initialdir=initialdir,title=title) else: dirname = tkFileDialog.askdirectory(parent=self.master, initialdir=initialdir,title=title) return dirname # <-- string def Master_Configure(self, event): """Part of tkinter main window initialization""" if event.widget != self.master: if self.w != -1: return x = int(self.master.winfo_x()) y = int(self.master.winfo_y()) w = int(self.master.winfo_width()) h = int(self.master.winfo_height()) if (self.x, self.y, self.w, self.h) == (-1,-1,-1,-1): self.x, self.y, self.w, self.h = x,y,w,h if self.w!=w or self.h!=h: #print "Master reconfigured... make resize adjustments" self.w=w self.h=h # pylint: disable=W0613 def Pass_Fail_Button_Click(self, event): """Routine for user clicking Pass/Fail Button""" print('Arranging Windows by User Request') num_popups = len(Tk_Nosy.concurrent_versionL) DX = 50 DY = 70 x = 10 y = 10 + num_popups * DY self.master.geometry( '+%i+%i'%(x,y)) for PI,Popup in Tk_Nosy.concurrent_versionL: x += DX y -= DY Popup.geometry( '+%i+%i'%(x,y)) # alarm function is called after specified number of milliseconds def SetAlarm(self, milliseconds=1000): """Reinitialize tkinter alarm mechanism as well as update seconds counter in main window title bar. """ self.master.after( milliseconds, self.Alarm ) self.oscillator += 1 if self.oscillator > 5: self.oscillator = 0 if self.oscillator_B>0: self.oscillator_B += 1 if self.oscillator_B>5: self.oscillator_B = 0 self.reset_statusbar_bg() pad = '|'*self.oscillator s = '%s (v%s)'%(self.defaultPyInterp.exe_name, self.defaultPyInterp.version_str) self.master.title('%i) %s '%(self.numNosyCalls , s + pad )) for PI,Popup in Tk_Nosy.concurrent_versionL: s = '%s (v%s)'%(PI.exe_name, PI.version_str) Popup.title( '%i) %s '%(self.numNosyCalls , s + pad ) ) def Alarm(self): """Look for changed files every second, then reset alarm""" if self.need_to_pick_dir: dirname = self.AskDirectory( title='Choose Directory For Nose Tests', initialdir=".") self.try_change_to_new_dir( dirname ) #first call to numberOfChangedFiles will be > 0 if any .py files are found elif numberOfChangedFiles( self.dirname ) > 0: # or self.numNosyCalls==0 self.callNosy() self.SetAlarm()
nboard[x][y] = 0; else: nboard[x][y] = board[x][y] board, nboard = nboard, board; def loop(*args): if state: makeTurn(); redraw(); canvas.after(10, func=loop); def switchState(event): global state; state = not state; if state: event.widget.configure(text = "Stop"); loop(); else: event.widget.configure(text = "Start"); def save(*args): plistlib.writePlist(board, "sav.plist"); def load(*args): global board; board = plistlib.readPlist("sav.plist"); redraw(); canvas.bind("<Button-1>",diviveIntervention); startButton.bind("<Button-1>",switchState); loadButton.bind("<Button-1>",load); saveButton.bind("<Button-1>",save); canvas.mainloop();
class SpeciesSearchDialog: def __init__(self, parent, caller): # main window self.parent = parent # dialog that called this second dialog self.caller = caller self.gui = Toplevel(parent.guiRoot) self.gui.grab_set() self.gui.focus() self.gui.columnconfigure(0, weight=1) self.gui.rowconfigure(1, weight=1) self.entrySearch = Entry(self.gui) self.buttonSearch = Button(self.gui, text=" Search ") self.buttonAdd = Button(self.gui, text=" Add Species ") self.buttonClose = Button(self.gui, text=" Close Window ") self.frameResults = Frame(self.gui) self.frameResults.columnconfigure(0, weight=1) self.frameResults.rowconfigure(0, weight=1) self.scrollResults = Scrollbar(self.frameResults, orient="vertical") self.scrollResults.grid(row=0, column=1, sticky="ns") self.listResults = Listbox(self.frameResults, width=70, height=20) self.listResults.grid(row=0, column=0, sticky="nswe") self.listResults.config(yscrollcommand=self.scrollResults.set) self.scrollResults.config(command=self.listResults.yview) self.entrySearch.grid(row=0, column=0, columnspan=2, sticky="we", padx=5, pady=5) self.frameResults.grid(row=1, column=0, columnspan=3, sticky="nswe", padx=5, pady=5) self.buttonSearch.grid(row=0, column=2, padx=5, pady=5, sticky="e") self.buttonAdd.grid(row=2, column=1, padx=5, pady=5, sticky="e") self.buttonClose.grid(row=2, column=2, padx=5, pady=5, sticky="e") self.gui.protocol("WM_DELETE_WINDOW", self.actionClose) self.buttonClose.bind("<ButtonRelease>", self.actionClose) self.buttonAdd.bind("<ButtonRelease>", self.actionAdd) self.buttonSearch.bind("<ButtonRelease>", self.actionSearch) self.entrySearch.bind("<Return>", self.actionSearch) self.gui.update() self.gui.minsize(self.gui.winfo_width(), self.gui.winfo_height()) self.gui.mainloop() def actionAdd(self, event): try: selection = self.listResults.selection_get() selectionSplit = selection.split(":\t", 1) selectionSplit2 = selectionSplit[1].split("\t") if not (selectionSplit[0], selectionSplit2[0]) in self.parent.optimizer.speciesList: self.parent.optimizer.speciesList.append((selectionSplit[0], selectionSplit2[0].strip())) self.caller.gui.event_generate("<<Update>>") except tkinter.TclError: # no selection pass def actionSearch(self, event): query = self.entrySearch.get() if query: self.listResults.delete(0, "end") results = self.parent.optimizer.SPSUMHandler.search(query) # sort results by nr of CDS results = sorted(results.items(), reverse=True, key=lambda x: (int(x[1][1]))) for name, (taxid, ncs) in results: self.listResults.insert("end", taxid + ":\t " + name + " \t(" + ncs + " CDS)") def actionClose(self, event=None): self.caller.gui.event_generate("<<Update>>", when="tail") self.gui.destroy()
class SatelliteWindow( Toplevel ): """ SatelliteWindow is used to display nosetests results of concurrently run python interpreters. """ def cleanupOnQuit(self): """When closing popup, do a little clean up.""" # I'm not sure that transient windows need this, but I'm trying to be careful self.MainWin.focus_set() if self.main_gui.kill_popup_window( self.statusMessage.get() ): self.destroy() self.main_gui.statusMessage.set('Closed: ' + self.statusMessage.get()) else: self.main_gui.statusMessage.set('ERROR Closing: ' + self.statusMessage.get()) self.main_gui.set_statusbar_bg( '#FF9999' ) def __init__(self, main_gui, MainWin, mytitle, dx=30, dy=30): """Initialize popup""" Toplevel.__init__(self, MainWin) self.title(mytitle) x = MainWin.winfo_x() if x<10: x=10 y = MainWin.winfo_y() if y<10: y=10 # position over to the upper right self.geometry( '+%i+%i'%(x+dx,y+dy)) self.config( highlightcolor='#FF99FF', highlightbackground='#FF99FF', highlightthickness=2, borderwidth=10 ) #=========== # make a Status Bar self.statusMessage = StringVar() self.statusMessage.set(mytitle) self.statusbar = Label(self, textvariable=self.statusMessage, bd=1, relief=SUNKEN) self.statusbar.pack(anchor=SW, fill=X, side=BOTTOM) self.statusbar_bg = self.statusbar.cget('bg') # save bg for restore myFont = tkinter.font.Font(family="Arial", size=12, weight=tkinter.font.BOLD) self.statusbar.config( font=myFont ) frame = Frame(self) frame.pack(anchor=NE, fill=BOTH, side=TOP) self.Pass_Fail_Button = Button(frame,text="Pass/Fail Will Be Shown Here", image="", width="15", background="green", anchor=W, justify=LEFT, padx=2) self.Pass_Fail_Button.pack(anchor=NE, fill=X, side=TOP) self.Pass_Fail_Button.bind("<ButtonRelease-1>", self.Pass_Fail_Button_Click) #self.title('%s %s.%s.%s '%(python_exe_name, python_major, python_minor, python_micro)) self.oscillator = 1 # animates character on title self.oscillator_B = 0 # used to return statusbar to statusbar_bg self.lbframe = Frame( frame ) self.lbframe.pack(anchor=SE, side=LEFT, fill=BOTH, expand=1) scrollbar = Scrollbar(self.lbframe, orient=VERTICAL) self.Text_1 = Text(self.lbframe, width="80", height="24", yscrollcommand=scrollbar.set) scrollbar.config(command=self.Text_1.yview) scrollbar.pack(side=RIGHT, fill=Y) self.Text_1.pack(side=LEFT, fill=BOTH, expand=1) self.resizable(1,1) # Linux may not respect this #=========== self.MainWin = MainWin self.main_gui = main_gui # only main window can close this window self.protocol('WM_DELETE_WINDOW', self.cleanupOnQuit) def Pass_Fail_Button_Click(self, event): """Place-holder routine for user clicking Pass/Fail Button""" self.main_gui.Pass_Fail_Button_Click( event ) def reset_statusbar_bg(self): """Return status bar to default state""" self.statusbar.config(bg=self.statusbar_bg) def set_statusbar_bg(self, c): """Set status bar to show new color and message""" self.statusbar.config(bg=c) self.oscillator_B = 1 # will return to initial color after a few cycles
def titlescreen(self): ''' Main menu screen. Options: -display records -begin stat recording: -stat analysis -whatever -quit ''' def button_highlight(event): event.widget.config(foreground = '#040D24', background = '#FFCB00') def button_dehighlight(event): event.widget.config(foreground = '#C89632', background = '#040D24') try: self.canvas.delete('all') except: pass self.titleimage = PhotoImage(file = 'titleimage.png') self.canvas.create_image((400, 300), image = self.titleimage) RecordingButton = TkButton(master = self, text = 'Start Recording', cursor = 'hand1', font = ('Helectiva', 20, 'bold'), fg = '#C89632', bg = '#040D24', bd = 1, command = self.playerselect) StatDisplayButton = TkButton(master = self, text = 'Stat Display', cursor = 'hand1', font = ('Helectiva', 20, 'bold'), fg = '#C89632', bg = '#040D24', bd = 1, command = self.statdisplay) AnalysisButton = TkButton(master = self, text = 'Stat Analysis', cursor = 'hand1', font = ('Helectiva', 20, 'bold'), fg = '#C89632', bg = '#040D24', bd = 1, command = self.statanalysis) RecordingButton.bind('<Enter>', button_highlight) StatDisplayButton.bind('<Enter>', button_highlight) AnalysisButton.bind('<Enter>', button_highlight) RecordingButton.bind('<Leave>', button_dehighlight) StatDisplayButton.bind('<Leave>', button_dehighlight) AnalysisButton.bind('<Leave>', button_dehighlight) self.canvas.create_window((322,186), window = RecordingButton, width = 323, height = 40) self.canvas.create_window((255,245), window = StatDisplayButton, width = 320, height = 40) self.canvas.create_window((204,308), window = AnalysisButton, width = 320, height = 41)
class BaseExFrame: def __init__(self, master, current_unit, needs_span): self.master = master self.frame = create_content_frame(self.master) self.current_unit = current_unit self.needs_span = needs_span self.heading_column_span = 1 self.heading_options = {'background': SEA_GREEN, 'font': ("Helvetica", 20), 'fg': "cyan"} self.entries = [] self.prev_button = None self.next_button = None def show(self): self.heading_options['text'] = self.current_unit.name heading = Label(master=self.frame, cnf=self.heading_options) heading.grid(row=0, sticky=(N, S, E, W), columnspan=self.heading_column_span) pictures = create_images(self.frame, self._images_path()) show_pictures(pictures, self.needs_span) self.entries = self._load_entries() self.prev_button = Button(self.frame, text="Назад") self._config_prev_button() self.prev_button.grid(row=3, column=0, sticky=(W, S)) self.next_button = Button(self.frame, text="Продължи", state="disabled") self._config_next_button() self._grid_next_button() self.frame.grid(row=0, column=0) def hide(self): self.frame.grid_forget() def grid(self, row, column): self.frame.grid(row=row, column=column) def _images_path(self): pass def _load_entries(self): pass def _callback(self): pass def _config_prev_button(self): self.prev_button['width'] = 10 def bind_prev_button(self, command): self.prev_button.bind("<Button-1>", command) def _config_next_button(self): self.next_button['width'] = 10 def _grid_next_button(self): self.next_button.grid(row=3, column=self.heading_column_span - 1, sticky=(E, S)) def bind_next_button(self, command): self.next_button.bind("<Button-1>", command)
def __init__(self, master, cluster_fname=None, fig_cols = 4, fig_rows = None): if not cluster_fname: cluster_fname = tkinter.filedialog.askopenfilename(parent=master, title="List of genes", initialdir=path.abspath('./')) print(cluster_fname) master.wm_title(cluster_fname) self.all_in_cluster = [line.strip() for line in open(cluster_fname)] print("No images", [item for item in self.all_in_cluster if item not in has_img]) self.imgs_in_cluster = [item for item in self.all_in_cluster if item in has_img] print(self.imgs_in_cluster) print(len(self.imgs_in_cluster), len(self.all_in_cluster), end=' ') print(len(self.imgs_in_cluster) / float(len(self.all_in_cluster))) self.img_lists = [[x for x in st_5_with_lat[(st_5_with_lat['Name2'] == gene) +(st_5_with_lat['FBgn'] == gene)]['imgfile']] for gene in self.imgs_in_cluster] num_genes = len(self.imgs_in_cluster) self.fig_rows, self.fig_cols = adjust_rows_cols(num_genes, fig_rows or 0, fig_cols or 0) self.outfn = path.basename(cluster_fname)[:-4]+'.png' buttons = Frame(master) buttons.grid(row=1, column=1) savebutton = Button(buttons, text="Save", command=self.save) savebutton.grid(row=2, column = 2) Button(buttons, text="Add Row", command=self.add_row).grid(row=1,column=3) Button(buttons, text="Add Col", command=self.add_col).grid(row=3,column=3) Button(buttons, text="Remove Row", command=self.remove_row).grid(row=1,column=1) Button(buttons, text="Remove Col", command=self.remove_col).grid(row=3,column=1) images = Frame(master) images.grid(row=2, column=1) self.button_selected = IntVar(master, -1) self.images_selected = [0 for list in self.img_lists] out_name = '{}.png.txt'.format(path.splitext(path.basename(cluster_fname))[0]) print(out_name) if path.exists(out_name): for i, line in enumerate(open(out_name)): self.images_selected[i] = int(line.split()[0].strip()) self.radio_buttons = [] self.image_files = [] self.x_flipped = [] for i, gene in enumerate(self.imgs_in_cluster): for image_file_name in self.img_lists[i]: try: raise IOError image_file = imget(image_file_name) import_image = Image.open(image_file) except (IOError, OSError): try: image_file = imget_bdgp(image_file_name) import_image = Image.open(image_file) except Exception as exc: print(exc) print(image_file_name, gene) raise exc import_image = import_image.resize((180,80), Image.ANTIALIAS) except urllib.error.HTTPError as exc: print(image_file_name, gene) raise exc embryo_image = ImageTk.PhotoImage(import_image) label = Label(image=embryo_image) label.image = embryo_image b = Button(images, image = label.image, width = 200, height= 100, text=gene, #text = image_file, #variable=self.button_selected, #command=self.handle_button_click, #value = i+1, #indicatoron=0, ) #ToolTip(b, gene) b.bind("<Button-1>", self.handle_button_click) b.bind("<Button-2>", self.handle_button_click) b.grid(row = i // self.fig_cols, column = i % self.fig_cols) #w = Tix.Balloon(master, message=gene) #w.bind_widget(b) self.image_files.append(image_file) self.radio_buttons.append(b) self.x_flipped.append(False)
def view_details(self, Medikom, id): self.selected_id = id self.overview(Medikom) entry_results, attachments = Medikom.get_entry(id) ts, title, notes = entry_results ts = self.format_ts(ts)[:-3] details_text = 'Details zu %s (zuletzt geändert am %s)' % (title, ts) details_label = Label( self, text=details_text, font='Liberation 10', fg='Black', anchor='w') details_label.place( x=self.SPACE_TWO, y=(self.n + 2) * (self.ROW_HIGHT + self.ROW_SPACE), width=self.WIN_WIDTH - self.SPACE_TWO, height=self.ROW_HIGHT) details_label.bind(sequence='<Button-1>', func=Callable(self.view_edit_title, Medikom, id, title)) # add attachment button and list attachments attach_button = Button( self, text='Neuer Anhang', command=lambda: self.attach_file(Medikom, id)) attach_button.place( x=self.SPACE_TWO, y=(self.n + 3) * (self.ROW_HIGHT + self.ROW_SPACE), width=self.WIN_WIDTH / 8, height=self.ROW_HIGHT) if attachments: xpos = (1.5 * self.SPACE_TWO) + (self.WIN_WIDTH / 8) for i, attachment in enumerate(attachments): attachment = attachment[0] filename = '' if '\\' in attachment: filename = attachment.split('\\')[-1] elif '/' in attachment: filename = attachment.split('/')[-1] width = len(filename) * 7.2 attachment_button = Button( self, text=filename, font='Courier 9', fg="blue", command=Callable(self.open_attachment, attachment)) attachment_button.place( x=xpos, y=(self.n + 3) * (self.ROW_HIGHT + self.ROW_SPACE), width=width, height=self.ROW_HIGHT) xpos = xpos + width + (self.SPACE_TWO/2) attachment_button.config(relief='flat') attachment_button.bind(sequence='<Button-3>', func=Callable(self.unattach_file, Medikom, id, attachment)) # text element and scrollbar textframe = Text( self, font='Liberation 12', height=self.TEXT_FRAME_LINES, width=int(self.WIN_WIDTH / 4)) scrollbar = Scrollbar(self) textframe.place( x=self.SPACE_TWO, y=(self.n + 4) * (self.ROW_HIGHT + self.ROW_SPACE), width=self.WIN_WIDTH - self.SPACE_ONE - 10, height=self.ROW_HIGHT * self.TEXT_FRAME_LINES) scrollbar.place( x=self.SPACE_TWO + self.WIN_WIDTH - self.SPACE_ONE - 10, y=(self.n + 4) * (self.ROW_HIGHT + self.ROW_SPACE), width=10, height=self.ROW_HIGHT * self.TEXT_FRAME_LINES) scrollbar.config(command=textframe.yview) textframe.config(yscrollcommand=scrollbar.set) textframe.insert(END, notes) # update button update_button = Button( self, text='Text Aktualisieren', command=lambda: self.update_entry_notes( Medikom, id, textframe.get(1.0, END))) update_button.place( x=self.WIN_WIDTH / 2 - 0.125 * self.WIN_WIDTH, y=(self.n + 4) * (self.ROW_HIGHT + self.ROW_SPACE) + (self.ROW_HIGHT * self.TEXT_FRAME_LINES + 5), width=self.WIN_WIDTH/4, height=self.ROW_HIGHT)
class _Tk_Nosy(object): """This class is the tkinter GUI object""" def __init__(self, master): self.dirname = os.path.abspath( os.curdir ) self.initComplete = 0 self.master = master self.x, self.y, self.w, self.h = -1,-1,-1,-1 # bind master to <Configure> in order to handle any resizing, etc. # postpone self.master.bind("<Configure>", self.Master_Configure) self.master.bind('<Enter>', self.bindConfigure) self.menuBar = Menu(master, relief = "raised", bd=2) top_Directory = Menu(self.menuBar, tearoff=0) top_Directory.add("command", label = "Change Dir", command = self.menu_Directory_Change_Dir) self.menuBar.add("cascade", label="Directory", menu=top_Directory) #top_Snippet = Menu(self.menuBar, tearoff=0) self.menuBar.add("command", label = "Run", command = self.menu_Run) master.config(menu=self.menuBar) # make a Status Bar self.statusMessage = StringVar() self.statusMessage.set(self.dirname) self.statusbar = Label(self.master, textvariable=self.statusMessage, bd=1, relief=SUNKEN) self.statusbar.pack(anchor=SW, fill=X, side=BOTTOM) self.statusbar_bg = self.statusbar.cget('bg') # save bg for restore myFont = tkinter.font.Font(family="Arial", size=12, weight=tkinter.font.BOLD) self.statusbar.config( font=myFont ) frame = Frame(master) frame.pack(anchor=NE, fill=BOTH, side=TOP) self.Pass_Fail_Button = Button(frame,text="Pass/Fail Will Be Shown Here", image="", width="15", background="green", anchor=W, justify=LEFT, padx=2) self.Pass_Fail_Button.pack(anchor=NE, fill=X, side=TOP) self.Pass_Fail_Button.bind("<ButtonRelease-1>", self.Pass_Fail_Button_Click) #self.master.title("tk_nosy") self.master.title('Python %s.%s.%s '%sys.version_info[:3]) self.oscillator = 1 # animates character on title self.oscillator_B = 0 # used to return statusbar to statusbar_bg self.lbframe = Frame( frame ) self.lbframe.pack(anchor=SE, side=LEFT, fill=BOTH, expand=1) scrollbar = Scrollbar(self.lbframe, orient=VERTICAL) self.Text_1 = Text(self.lbframe, width="80", height="24", yscrollcommand=scrollbar.set) scrollbar.config(command=self.Text_1.yview) scrollbar.pack(side=RIGHT, fill=Y) self.Text_1.pack(side=LEFT, fill=BOTH, expand=1) self.master.resizable(1,1) # Linux may not respect this self.numNosyCalls = 0 self.need_to_pick_dir = 1 if len(sys.argv)>1: # I don't care what the exception is, if there's a problem, bail # pylint: disable=W0702 try: dirname = os.path.abspath( sys.argv[1] ) self.try_change_to_new_dir( dirname ) except: pass # let Alarm force dir selection else: try: if os.path.isdir(os.path.join( self.dirname, 'tests' )): self.try_change_to_new_dir( self.dirname ) except: pass # let Alarm force dir selection print(LICENSE) self.Alarm() def try_change_to_new_dir(self, dirname): """A legal abspath will switch to dirname.""" # I don't care what the exception is, if there's a problem, bail # pylint: disable=W0702 if dirname: try: dirname = os.path.abspath( dirname ) except: return # let Alarm force dir selection else: return self.dirname = dirname print('Selected dirname =',dirname) fileD.clear() os.chdir( self.dirname ) self.reset_statusbar_bg() self.need_to_pick_dir = 0 #with open(NOSY_USER_DATA_FILE, 'w') as text_file: # text_file.write( self.dirname ) self.numNosyCalls = 0 def reset_statusbar_bg(self): """Return status bar to default state""" self.statusbar.config(bg=self.statusbar_bg) self.statusMessage.set(self.dirname) def set_statusbar_bg(self, c): """Set status bar to show new color and message""" self.statusbar.config(bg=c) self.oscillator_B = 1 # will return to initial color after a few cycles def menu_Directory_Change_Dir(self): """Menu selection to set directory in which to run nosetests""" dirname = self.AskDirectory( title='Choose Directory For Nose Tests', initialdir=".") if dirname: self.try_change_to_new_dir( dirname ) # >>>>>>insert any user code below this comment for section "menu_Directory_Change_Dir" # replace, delete, or comment-out the following print("called menu_Directory_Change_Dir") def menu_Run(self): """User initiates a nosetests run, not file change detection.""" print("called menu_Run") self.callNosy() def callNosy(self): """Run nosetests and display results""" self.numNosyCalls += 1 self.Text_1.delete(1.0, END) # turn indicator button gray while running the tests myFont = tkinter.font.Font(family="Arial", size=12, weight=tkinter.font.BOLD) self.Pass_Fail_Button.config(background="#999999", text='TESTING...', font=myFont) self.master.update() self.master.update_idletasks() # pylint: disable=W0201 self.passedAllTests, numPassed, numFailed, numErrors, numSkipped, outputTextL = \ run_nosetests(self.numNosyCalls) max_len_s = 42 num_lines = 1 for s in outputTextL: self.Text_1.insert(END, s) sL = s.split('\n') for ss in sL: max_len_s = max(max_len_s, len(ss)) num_lines += 1 if self.numNosyCalls % 2: myFont = tkinter.font.Font(family="Arial", size=12, weight=tkinter.font.BOLD) else: myFont = tkinter.font.Font(family="Arial", size=12) if self.passedAllTests: s = 'PASSED' if numPassed > 1: s = 'PASSED ALL %i TESTS'%numPassed elif numPassed == 1: s = 'PASSED ONE TEST' bg="#00ff00" if numSkipped==1: s = 'passed with 1 SKIP' bg = "#00cc00" elif numSkipped > 1: s = 'passed with %i SKIPS'%numSkipped bg = "#00cc00" elif numPassed==0: s = 'No Tests Found' bg="#ff8000" self.Pass_Fail_Button.config(background=bg, text=s, font=myFont) #self.master.geometry('200x50') else: s = 'FAILED %i, ERRORS %i, SKIP %i, PASSED %i'%(numFailed, numErrors, numSkipped, numPassed) self.Pass_Fail_Button.config(background="#ff0000", text=s, font=myFont) #self.master.geometry('516x385') # Show list of files being watched. #self.Text_1.insert(END, '_'*40+'\n') self.Text_1.insert(END, 'WATCHED *.py FILES'.center(40,'_') + '\n' ) self.Text_1.insert(END, '%s%s..\n\n'%(self.dirname,os.path.sep) ) num_lines += 3 len_dirname = len( self.dirname ) keyL = list(fileD.keys()) keyL.sort() lastdir = '' for key in keyL: dn = os.path.dirname( key ) if dn != lastdir: self.Text_1.insert(END, '..'+dn[len_dirname:] + '\n') max_len_s = max(max_len_s, len(dn)+1) lastdir = dn num_lines += 1 s = ' ' +os.path.basename( key ) self.Text_1.insert(END, s + '\n') max_len_s = max(max_len_s, len(s)+1) num_lines += 1 self.Text_1.config(width=max_len_s) self.Text_1.config(height=min(40, num_lines)) self.master.winfo_toplevel().wm_geometry("") def bindConfigure(self, event): """Part of goofy main window setup in tkinter.""" # tkinter requires arguments, but I don't use them # pylint: disable=W0613 if not self.initComplete: self.master.bind("<Configure>", self.Master_Configure) self.initComplete = 1 # return a string containing directory name def AskDirectory(self, title='Choose Directory', initialdir="."): """Run pop-up menu for user to select directory.""" # This is not an error # pylint: disable=E1101 if sys.version_info < (3,): dirname = tkFileDialog.askdirectory(parent=self.master, initialdir=initialdir,title=title) else: dirname = tkinter.filedialog.askdirectory(parent=self.master, initialdir=initialdir,title=title) return dirname # <-- string def Master_Configure(self, event): """Part of tkinter main window initialization""" if event.widget != self.master: if self.w != -1: return x = int(self.master.winfo_x()) y = int(self.master.winfo_y()) w = int(self.master.winfo_width()) h = int(self.master.winfo_height()) if (self.x, self.y, self.w, self.h) == (-1,-1,-1,-1): self.x, self.y, self.w, self.h = x,y,w,h if self.w!=w or self.h!=h: #print "Master reconfigured... make resize adjustments" self.w=w self.h=h def Pass_Fail_Button_Click(self, event): """Place-holder routine for user clicking Pass/Fail Button""" pass # alarm function is called after specified number of milliseconds def SetAlarm(self, milliseconds=1000): """Reinitialize tkinter alarm mechanism as well as update seconds counter in main window title bar. """ self.master.after( milliseconds, self.Alarm ) self.oscillator += 1 if self.oscillator > 5: self.oscillator = 0 if self.oscillator_B>0: self.oscillator_B += 1 if self.oscillator_B>5: self.oscillator_B = 0 self.reset_statusbar_bg() pad = '|'*self.oscillator #self.master.title("%i) tk_nosy "%self.numNosyCalls + pad ) s = '%s.%s.%s '%sys.version_info[:3] self.master.title('%i) Python %s '%(self.numNosyCalls , s + pad )) def Alarm(self): """Look for changed files every second, then reset alarm""" if self.need_to_pick_dir: dirname = self.AskDirectory( title='Choose Directory For Nose Tests', initialdir=".") self.try_change_to_new_dir( dirname ) #first call to numberOfChangedFiles will be > 0 if any .py files are found elif numberOfChangedFiles( self.dirname ) > 0: # or self.numNosyCalls==0 self.callNosy() self.SetAlarm()
def create_voices(self): voice_ids = ['1', '2', '3', '4'] SCALES = OrderedDict([ ('pan_pos', {'min': -1, 'max': 1, 'start': 0.5, 'res': 0.001}), ('volume', {'min': 0, 'max': 1, 'start': 0.666, 'res': 0.001}), ('slide_duration_msecs', {'min': 0, 'max': 2000, 'start': 60, 'res': 1}), ('slide_duration_prop', {'min': 0, 'max': 2, 'start': 0.666, 'res': 0.001}), ('binaural_diff', {'min': 0, 'max': 66, 'start': 0.2, 'res': 0.01}) ]) for vid in voice_ids: counter = 0 for sca in SCALES: name = 'voice_' + vid + '_' + sca setattr(self, 'min_' + name, SCALES[sca]['min']) setattr(self, 'max_' + name, SCALES[sca]['max']) this_sca = Scale(self, label=sca, orient=HORIZONTAL, from_=getattr(self, 'min_' + name), to=getattr(self, 'max_' + name), resolution=SCALES[sca]['res']) this_sca.enable = ('enable' in list(SCALES[sca].keys()) and SCALES[sca]['enable'] or None) this_sca.disable = ('disable' in list(SCALES[sca].keys()) and SCALES[sca]['disable'] or None) this_sca.grid(column=int(2 + int(vid)), row=counter, sticky=E + W) this_sca.bind("<ButtonRelease>", self.scale_handler) this_sca.ref = name counter += 1 CHECK_BUTTONS = OrderedDict( [('mute', False), ('automate_binaural_diffs', True), ('automate_note_duration_prop', True), ('use_proportional_slide_duration', {'val': True, 'label': 'proportional slide'}), ('automate_pan', True), ('automate_wavetables', True)]) for vid in voice_ids: counter = 0 cb_frame = LabelFrame(self, text="Voice {0} - Automation".format(vid)) setattr(self, 'voice_' + vid + '_cb_frame', cb_frame) for cb in CHECK_BUTTONS: options = CHECK_BUTTONS[cb] name = 'voice_' + vid + '_' + cb if isinstance(options, dict) and 'label' in list(options.keys()): label = options['label'] else: label = cb[9:] if cb[:9] == 'automate_' else cb setattr(self, name, IntVar( value=type(options) == dict and options['val'] or options)) self.this_cb = Checkbutton(cb_frame, text=label, variable=getattr(self, name)) self.this_cb.bind('<Button-1>', self.check_boxes_handler) self.this_cb.disable = None self.this_cb.grid(sticky=W, column=0, row=counter) self.this_cb.ref = name counter += 1 # add trigger wavetable-button trigWavetableButton = Button(cb_frame, text='Next Wavetable') trigWavetableButton.bind('<Button-1>', self.trigger_waveform_handler) trigWavetableButton.ref = 'voice_' + vid + "_trigger_wavetable" trigWavetableButton.grid(row=counter) cb_frame.grid(column=int(vid) + 2, row=5, sticky=E + W + N, rowspan=8) for vid in voice_ids: generation_types = ["random", "random_harmonic", "harmonic"] partial_pools = ["even", "odd", "all"] prefix = 'voice_' + vid + '_' types_name = prefix + 'wavetable_generation_type' pools_name = prefix + 'partial_pool' setattr(self, types_name, StringVar()) getattr(self, types_name).set("random") setattr(self, pools_name, StringVar()) getattr(self, pools_name).set("all") target_frame = getattr(self, 'voice_' + vid + '_cb_frame') gen_typ_frame = LabelFrame(target_frame, text="type") gen_typ_frame.grid(row=len(target_frame.winfo_children()), sticky=W) for gen_t in generation_types: gen_t_entry = Radiobutton(gen_typ_frame, value=gen_t, text=gen_t, anchor=W, variable=getattr(self, types_name)) gen_t_entry.bind('<ButtonRelease-1>', self.wt_handler) gen_t_entry.ref = types_name gen_t_entry.grid(row=len(gen_typ_frame.winfo_children()), sticky=W) pp_frame = LabelFrame(target_frame, text="harmonics") for pp in partial_pools: pp_entry = Radiobutton(pp_frame, value=pp, text=pp, anchor=W, variable=getattr(self, pools_name)) pp_entry.bind('<ButtonRelease-1>', self.wt_handler) pp_entry.ref = pools_name pp_entry.grid(row=len(pp_frame.winfo_children()), sticky=E + W) this_num_partials = Scale(pp_frame, label='number of harmonics', orient=HORIZONTAL, from_=1, to=24, resolution=1) this_num_partials.ref = prefix + 'num_partials' this_num_partials.grid(column=0, row=len(pp_frame.winfo_children()), sticky=E + W) this_num_partials.bind("<ButtonRelease>", self.scale_handler) pp_frame.grid(row=len(target_frame.winfo_children()), sticky=E + W)
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)
class Example(Frame): def __init__(self, parent): Frame.__init__(self, parent) self.parent = parent self.initUI() def initUI(self): self.parent.title("EGUANA") self.style = ttk.Style() self.style.theme_use("alt") self.photoName = "eguana.gif" self.frame = Frame(self, relief=FLAT, borderwidth=10,bg='#FADC46') self.frame.pack(fill=BOTH, expand=True) self.pack(fill=BOTH, expand=True) self.setupMenuBar() self.setupTopBar() def setupMenuBar(self): self.menubar = EguanaMenu(self.parent,self) self.parent.config(menu=self.menubar) def setupTopBar(self): self.openButton3D = Button(self.frame,text="Select Directory for 3D EMA",relief=RAISED,command=self.askDirectory) self.openButton3D.grid(row=0,column=0, sticky=N+S+E+W,padx=2,pady =2) self.openButton2D = Button(self.frame,text="Select Directory for 2D EMA",relief=RAISED,command=self.askDirectory); self.openButton2D.grid(row=2,column=2, sticky=N+S+E+W,padx=2,pady =2) self.p1Button = Button(self.frame,text="Placeholder",relief=RAISED) self.p1Button.grid(row=0,column=1, sticky=N+S+E+W,padx=2,pady =2) self.p2Button = Button(self.frame,text="Placeholder",relief=RAISED) self.p2Button.grid(row=0,column=2, sticky=N+S+E+W,padx=2,pady =2) self.p3Button = Button(self.frame,text="Placeholder",relief=RAISED) self.p3Button.grid(row=1,column=0, sticky=N+S+E+W,padx=2,pady =2) self.p4Button = Button(self.frame,text="Placeholder",relief=RAISED) self.p4Button.grid(row=1,column=2, sticky=N+S+E+W,padx=2,pady =2) self.p5Button = Button(self.frame,text="Placeholder",relief=RAISED) self.p5Button.grid(row=2,column=0, sticky=N+S+E+W,padx=2,pady =2) self.p6Button = Button(self.frame,text="Placeholder",relief=RAISED) self.p6Button.grid(row=2,column=1, sticky=N+S+E+W,padx=2,pady =2) self.openButton3D.bind('<Motion>',self.cursorPosition) self.openButton2D.bind('<Motion>',self.cursorPosition) self.photo = PhotoImage(file="eguana.gif") self.photo = self.photo.subsample(2); self.photo_label = Label(self.frame,image=self.photo,borderwidth=0,highlightthickness=0) self.photo_label.configure(bg='#FADC46') self.photo_label.grid(row=1,column=1, sticky=N+S+E+W,padx=2,pady =2) self.photo_label.image = self.photo self.frame.columnconfigure(0, weight=1) self.frame.columnconfigure(1, weight=1) self.frame.columnconfigure(2, weight=1) self.frame.rowconfigure(0, weight=1) self.frame.rowconfigure(1, weight=1) self.frame.rowconfigure(2, weight=1) def askDirectory(self): dirStr = filedialog.askdirectory() if len(dirStr): self.openButton3D.destroy() self.openButton2D.destroy() self.p1Button.destroy() self.p2Button.destroy() self.p3Button.destroy() self.p4Button.destroy() self.p5Button.destroy() self.p6Button.destroy() self.menubar.entryconfigure('Filter', state = 'active') self.photo_label.destroy() dirStr = 'Input Path : '+dirStr self.frame.grid_forget() self.infoFrame = Frame(self.frame, relief=FLAT, bg='#FADC46') self.infoFrame.grid(row=0,column=0,columnspan=3, sticky=N+S+E+W,padx=2,pady =2) self.directoryLabel = Label(self.infoFrame, text="No project currently selected",relief=FLAT) self.directoryLabel.grid(row=0,column=0,columnspan=2, sticky=N+S+E+W,padx=2,pady =2) self.directoryLabel.config(text=dirStr) self.outputDirButton = Button(self.infoFrame,text="No output directory selected. Click to select an output directory ",relief=RAISED,fg='red',command=self.askOutputDirectory) self.outputDirButton.grid(row=1,column=0,columnspan=2, sticky=N+S+E+W,padx=2,pady =2) self.filterButton = Button(self.infoFrame,text="No filter selected. Click to select a filter",relief=RAISED,fg='red',command=self.selectFilter) self.filterButton.grid(row=2,column=0,columnspan=2, sticky=N+S+E+W,padx=2,pady =2) self.trialLabel = Label(self.infoFrame,text="Trial Number",relief=FLAT,justify=RIGHT,anchor=E) self.trialLabel.grid(row=3,column=0, sticky=N+S+E+W,padx=2,pady =2) vcmd = (self.master.register(self.validate),'%d', '%i', '%P', '%s', '%S', '%v', '%V', '%W') self.trialEntry = Entry(self.infoFrame,validate = 'key', validatecommand = vcmd) self.trialEntry.grid(row=3,column=1, sticky=N+S+E+W,padx=2,pady =2) self.infoFrame.columnconfigure(0, weight=1) self.infoFrame.columnconfigure(1, weight=1) self.infoFrame.rowconfigure(0, weight=1) self.infoFrame.rowconfigure(1, weight=1) self.infoFrame.rowconfigure(2, weight=1) self.infoFrame.rowconfigure(3, weight=1) self.showPlotTools() def validate(self, action, index, value_if_allowed, prior_value, text, validation_type, trigger_type, widget_name): if len(value_if_allowed)==0 : return True if text in '0123456789.-+ ': try: float(value_if_allowed) return True except ValueError: return False else: return False def askOutputDirectory(self): dirStr = filedialog.askdirectory() if len(dirStr): dirStr = 'Output Path : '+dirStr self.outputDirButton.destroy() self.outputDirLabel = Label(self.infoFrame, relief=FLAT) self.outputDirLabel.grid(row=1,column=0,columnspan=2, sticky=N+S+E+W,padx=2,pady =2) self.outputDirLabel.config(text=dirStr) def showPlotTools(self): f2= Frame(self.frame, relief=FLAT,bg='#FADC46') f2.grid(row=1,column=0,rowspan=2,columnspan=3,sticky=N+S+E+W,padx=10,pady =10) b1 = Button(f2,text='3D K',relief=RAISED,command= lambda:self.plotButtonPressed(1)) b1.grid(row=0, column=0,sticky=N+S+E+W,padx=5,pady =5) b2 = Button(f2,text='3D Dist',relief=RAISED,command=lambda:self.plotButtonPressed(2)) b2.grid(row=0, column=1,sticky=N+S+E+W,padx=5,pady =5) b3 = Button(f2,text='3D DP',relief=RAISED,command=lambda:self.plotButtonPressed(3)) b3.grid(row=0, column=2,sticky=N+S+E+W,padx=5,pady =5) b4 = Button(f2,text='2D K',relief=RAISED,command=lambda:self.plotButtonPressed(4)) b4.grid(row=1, column=0,sticky=N+S+E+W,padx=5,pady =5) b5 = Button(f2,text='2D Dist',relief=RAISED,command=lambda:self.plotButtonPressed(5)) b5.grid(row=1, column=1,sticky=N+S+E+W,padx=5,pady =5) b6 = Button(f2,text='2D DP',relief=RAISED,command=lambda:self.plotButtonPressed(6)) b6.grid(row=1, column=2,sticky=N+S+E+W,padx=5,pady =5) f2.columnconfigure(0, weight=1) f2.columnconfigure(1, weight=1) f2.columnconfigure(2, weight=1) f2.rowconfigure(0, weight=1) f2.rowconfigure(1, weight=1) def plotButtonPressed(self,number): trialNum = self.trialEntry.get() try: trialNum = float(trialNum) if trialNum < 16 and trialNum > 0: self.plotFigure(number) return True else: messagebox.showerror( "Trial Number Error", "The trial number is out of range" ) return False except ValueError: messagebox.showerror( "Trial Number Error", "Error with the trial number" ) return False def plotFigure(self,number): m = CoilNumDialog(self.frame) if m.isSet(): print(m.getValues()) def selectFilter(self): self.top = FilterPopup(self); def speech3DButtonPressed(self): self.menubar.filterSelected(0) self.top.destroy() if hasattr(self, 'filterLabel'): self.filterLabel.config(text="Filter : speech3D") else: self.filterLabel = Label(self.infoFrame, text="Filter : speech3D",relief=FLAT) self.filterLabel.grid(row=2,column=0,columnspan=2, sticky=N+S+E+W,padx=2,pady =2) self.filterButton.destroy() def speech2DButtonPressed(self): self.menubar.filterSelected(1) self.top.destroy() if hasattr(self, 'filterLabel'): self.filterLabel.config(text="Filter : speech2D") else: self.filterLabel = Label(self.infoFrame, text="Filter : speech2D ",relief=FLAT) self.filterLabel.grid(row=2,column=0,columnspan=2, sticky=N+S+E+W,padx=2,pady =2) self.filterButton.destroy() def swallow3DButtonPressed(self): self.menubar.filterSelected(2) self.top.destroy() if hasattr(self, 'filterLabel'): self.filterLabel.config(text="Filter : swallow3D") else: self.filterLabel = Label(self.infoFrame, text="Filter : swallow3D ",relief=FLAT) self.filterLabel.grid(row=2,column=0,columnspan=2, sticky=N+S+E+W,padx=2,pady =2) self.filterButton.destroy() def swallow2DButtonPressed(self): self.menubar.filterSelected(3) self.top.destroy() if hasattr(self, 'filterLabel'): self.filterLabel.config(text="Filter : swallow2D") else: self.filterLabel = Label(self.infoFrame, text="Filter : swallow2D ",relief=FLAT) self.filterLabel.grid(row=2,column=0,columnspan=2, sticky=N+S+E+W,padx=2,pady =2) self.filterButton.destroy() def changeImage(self): self.photo = PhotoImage(file=self.photoName) self.photo = self.photo.subsample(2); self.photo_label.image = self.photo self.photo_label.config(image=self.photo) def cursorPosition(self,event): if event.widget == self.openButton3D: if self.photoName == "eguana2.gif": self.photoName = "eguana.gif" self.changeImage() elif event.widget == self.openButton2D: if self.photoName == "eguana.gif": self.photoName = "eguana2.gif" self.changeImage()
root = Tk() panel_frame = Frame(root, height=60, bg='gray') text_frame = Frame(root, height=360, width=600) panel_frame.pack(side='top', fill='x') text_frame.pack(side='bottom', fill='both', expand=1) textbox = Text(text_frame, font='Arial 14', wrap='word') scrollbar = Scrollbar(text_frame) scrollbar['command'] = textbox.yview textbox['yscrollcommand'] = scrollbar.set textbox.pack(side='left', fill='both', expand=1) scrollbar.pack(sid='right', fill='y') load_btn = Button(panel_frame, text='Load') save_btn = Button(panel_frame, text='Save') quit_btn = Button(panel_frame, text='Quit') load_btn.bind('<Button-1>', load_file) save_btn.bind('<Button-1>', save_file) quit_btn.bind('<Button-1>', quit) load_btn.place(x=10, y=10, width=40, height=40) save_btn.place(x=60, y=10, width=40, height=40) quit_btn.place(x=110, y=10, width=40, height=40) root.mainloop()
class SpeciesListDialog: def __init__(self, parent): self.parent = parent self.gui = Toplevel(parent.guiRoot) self.gui.grab_set() self.gui.focus() self.gui.columnconfigure(0, weight=1) self.gui.rowconfigure(1, weight=1) Label(self.gui, text="Registered Species:").grid(row=0, column=0, pady=5, padx=5, sticky="w") self.listRegisteredSpecies = Listbox(self.gui, width=70) self.buttonAdd = Button(self.gui, text=" + ") self.buttonDel = Button(self.gui, text=" - ") self.listRegisteredSpecies.grid(row=1, column=0, columnspan=3, sticky="nswe", pady=5, padx=5) self.buttonAdd.grid(row=2, column=1, pady=5, padx=5) self.buttonDel.grid(row=2, column=2, pady=5, padx=5) # Set (minimum + max) Window size self.gui.update() self.gui.minsize(self.gui.winfo_width(), self.gui.winfo_height()) # self.gui.maxsize(self.gui.winfo_width(), self.gui.winfo_height()) self.actionUpdate(None) self.gui.bind("<<Update>>", self.actionUpdate) self.gui.protocol("WM_DELETE_WINDOW", self.actionClose) self.buttonDel.bind("<ButtonRelease>", self.actionDel) self.buttonAdd.bind("<ButtonRelease>", self.actionAdd) self.gui.mainloop() def actionClose(self): self.parent.guiRoot.event_generate("<<Update>>", when="tail") self.gui.destroy() def actionUpdate(self, event): self.listRegisteredSpecies.delete(0, "end") for (taxid, name) in self.parent.optimizer.speciesList: self.listRegisteredSpecies.insert("end", taxid + ": " + name) def actionDel(self, event): try: selection = self.listRegisteredSpecies.selection_get() selectionSplit = selection.split(": ") self.parent.optimizer.speciesList.remove((selectionSplit[0], selectionSplit[1])) self.gui.event_generate("<<Update>>") except tkinter.TclError: # no selection pass def actionAdd(self, Event): SpeciesSearchDialog(self.parent, self)
class TkTimerCore(TimerCore): def __init__(self, *args, title, font_size, **kwargs): def close_handler(event): self.close() def clicked_handler(event): self.interact() self.master = Tk() self.master.wm_title(title) self.master.bind('<Destroy>', close_handler) self.label = Label(self.master, font='Sans {}'.format(int(font_size))) self.label.pack(expand=True) self.control = Toplevel() self.control.wm_title(title + ' (control)') self.control.minsize(150, 150) self.control.bind('<Destroy>', close_handler) self.button = Button(self.control, text='Start/Pause') self.button.bind('<ButtonRelease>', clicked_handler) self.button.pack(expand=True) self.timeout_running = False super().__init__(*args, **kwargs) def start_timeout(self): assert self.timeout_running is False def timeout_call(): if self.timeout_running: self.update() self.master.after(25, timeout_call) self.timeout_running = True timeout_call() def stop_timeout(self): assert self.timeout_running is True self.timeout_running = False def mainloop(self): return self.master.mainloop() def shutdown(self): self.master.quit() def set_label_text(self, text, finished=False): self.label.config(text=text) if finished: self.label.config(fg='red')