def changeMode(self, *args): """ Changes the available options depending on the user's choice. Called by self.options.trace() function. :param args: needed arguments for .trace() :return: none """ if self.options.get() == "Host": #Removes existing entities try: self.nameEntry.grid_forget() self.enterButton.grid_forget() self.ipEntry.grid_forget() self.portNum.grid_forget() self.portLabel.grid_forget() except: print("Something went wrong :(") self.nameTip = ToolTip(self.nameEntry, "What other users will see you as.") self.portTip = ToolTip(self.portLabel, "The port that others will connect to.") self.portTip = ToolTip(self.portNum, "The port that others will connect to.") self.enterTip = ToolTip(self.enterButton, "Create a lobby!") self.portLabel.grid(row=0, column=2) self.portNum.grid(row=0, column=3) self.nameEntry.grid(row=0, column=4) self.enterButton['text'] = "Host!" self.enterButton['command'] = self.newHost self.enterButton.grid(row=0, column=5) elif self.options.get() == "User": #Removes existing entities try: self.nameEntry.grid_forget() self.enterButton.grid_forget() self.portLabel.grid_forget() self.portNum.grid_forget() except: print("Something went wrong :(") self.nameTip = ToolTip(self.nameEntry, "What other users will see you as.") self.portTip = ToolTip(self.portLabel, "The port that you will connect to.") self.portTip = ToolTip(self.portNum, "The port that you will connect to.") self.enterTip = ToolTip(self.enterButton, "Enter a lobby!") self.ipTip = ToolTip(self.ipEntry, "The hostname to connect to.") self.portLabel['text'] = 'Enter a port:' self.ipEntry.grid(row=0, column=3, columnspan=2) self.portLabel.grid(row=0, column=5) self.portNum.grid(row=0, column=6) self.nameEntry.grid(row=1, column=4) self.enterButton['text'] = "Connect!" self.enterButton['command'] = self.newUser self.enterButton.grid(row=1, column=5)
def __init__(self): """ This is the constructor for the initial window seen by the user. It contains the options for selecting how the user will interact with the chat room :return: none """ self.master = Tk() self.options = StringVar() self.options.set("Choose an option:") self.options.trace('w', self.changeMode) self.userType = OptionMenu(self.master, self.options, "Host", "User") self.userTip = ToolTip( self.userType, "Host: Create a lobby for others to join \n" "User: Join a lobby with specific hostname and port") self.userType.grid(row=0, column=0) self.instructionsButton = Button(self.master, text="Instructions", command=self.openInstructions) self.instructionsButton.grid(row=0, column=1) self.ipString = StringVar() self.ipString.set("Enter a hostname here!") self.ipEntry = Entry(self.master, textvariable=self.ipString, width=25) self.nameString = StringVar() self.nameString.set("Enter your name here!") self.nameEntry = Entry(self.master, textvariable=self.nameString) self.enterButton = Button(self.master) self.portLabel = Label(self.master, text="Enter your port:") self.portNum = Spinbox(self.master, from_=10000, to_=13345, width=7) mainloop()
def init_status_bar(self): # for PyShell instance """ Place a status box into the status bar. It is also a clickable toggle.""" sb = self.editwin.status_bar sb.set_label('EventLoop', text="") L = sb.labels['EventLoop'] L.bind('<Button-1>', self.eventloop_toggle) self.tooltip = ToolTip.ToolTip(L, TOOLTIP_TEXT) self.display_state()
def createDownloaderTab(self, nb): frame = self._getFrame("download") config = downloadruian.config self._getTopLabel(frame, "RÚIAN Downloader umožňuje stáhnout aktuální databázi včetně stahování aktualizací.") self.editsRow = 1 self.addControl(Label(frame, wraplength='4i', justify=LEFT, anchor=N, text=" Adresář se staženými daty:")) edit = self.addControl(Entry(frame, bd=1), aSticky=W+E) edit.insert(0, config.dataDir) CheckVar1 = IntVar() C1 = self.addControl(Checkbutton(frame, text = "Rozbalit stažené soubory", variable = CheckVar1, onvalue = 1, offvalue = 0)) CheckVar2 = IntVar() C1 = self.addControl(Checkbutton(frame, text = "Spustit importér po stažení dat", variable = CheckVar2, onvalue = 1, offvalue = 0)) CheckVar4 = IntVar() CheckVar4.set(1)#int(config.ignoreHistoricalData)) C1 = self.addControl(Checkbutton(frame, text = "Ignorovat historická data", variable = CheckVar4, onvalue = 1, offvalue = 0)) CheckVar3 = IntVar() C1 = self.addControl(Checkbutton(frame, text = "Stahovat automaticky každý den", variable = CheckVar3, onvalue = 1)) self.addControl(Label(frame, wraplength='4i', justify=LEFT, anchor=N, text=" Čas stahování:")) b = self.addControl(Entry(frame, bd=1), aSticky=W) b.insert(0, config.automaticDownloadTime) ToolTip.ToolTip(b, 'Čas, ve který se mají stahovat denní aktualizace') self.editsRow += 1 neatVar = StringVar() self.addControl(Button(frame, text='Stáhni data ', underline=0, command=lambda v=neatVar: self._say_neat(v)), aSticky=E) frame.columnconfigure(0, weight=1, uniform=1) nb.add(frame, text='Downloader ')
def __init__(self, parent): ttk.Frame.__init__(self, parent) self.parent = parent self.pack(fill=tk.BOTH, expand=True) self.folder_queue = queue.Queue() # hide images and icons folder for Windows users if sys.platform == "win32": os.popen("attrib +h .images").close() os.popen("attrib +h .icons").close() os.popen("attrib +h .data_files").close() self.pointer = "hand2" choose_info_btn_font = "-size 18" field_width = 35 if not os.path.exists("WG Ad Links") or not os.path.exists("Offline Ad Links"): folder_thread = threading.Thread(target=create_results_folders.create_folders, args=[self.folder_queue]) folder_thread.daemon = True folder_thread.start() elif sys.platform == "linux": self.pointer = "hand2" choose_info_btn_font = "-size 16" field_width = 30 home = expanduser('~') if not os.path.exists("{}/WG Finder/WG Ad Links".format(home)) or not os.path.exists( "{}/WG Finder/Offline Ad Links".format(home)): folder_thread = threading.Thread(target=create_results_folders.create_folders, args=[self.folder_queue]) folder_thread.daemon = True folder_thread.start() else: self.pointer = "pointinghand" choose_info_btn_font = "-size 20" field_width = 30 home = expanduser('~') if not os.path.exists("{}/WG Finder/WG Ad Links".format(home)) or not os.path.exists( "{}/WG Finder/Offline Ad Links".format(home)): folder_thread = threading.Thread(target=create_results_folders.create_folders, args=[self.folder_queue]) folder_thread.daemon = True folder_thread.start() # kills phantomjs process incase user exits program without stopping in first atexit.register(self.kill_phantomjs) choose_info = ttk.Style() choose_info.configure("Choose.TButton", font=choose_info_btn_font, padding=(10, 30, 10, 30)) self.warning_lbl_style = ttk.Style() self.warning_lbl_style.configure('Warning.TLabel', foreground="red") self.large_warning_lbl_style = ttk.Style() self.large_warning_lbl_style.configure('LargeWarning.TLabel', foreground="red") self.window_width = 1 # create GUI title widgets self.title_frame = ttk.Frame(self) self.title_frame.columnconfigure(0, weight=1) self.title_frame.grid(row=0, column=0, padx=20, pady=(10, 20), sticky=tk.W+tk.E) if sys.platform == 'win32': self.title_img = Image.open('.images/title.png') self.title_photo = ImageTk.PhotoImage(self.title_img) elif sys.platform == 'linux': self.title_img = Image.open('.images/title.png') self.title_photo = ImageTk.PhotoImage(self.title_img) else: self.title_img = Image.open('.images/title.gif') self.title_photo = ImageTk.PhotoImage(self.title_img) self.title = ttk.Label(self.title_frame, image=self.title_photo) self.title.grid(row=0, column=0) # create Choose Info widgets self.choose_info_btn_frame = ttk.Frame(self) self.saved_info_btn = ttk.Button(self.choose_info_btn_frame, style="Choose.TButton", cursor=self.pointer, text="Use saved login details", command=lambda: self.check_credentials("choose info")) self.saved_info_btn_tooltip = ToolTip(self.saved_info_btn, "Log into WG-Gesucht.de with the email and \n" "password you have saved previously and start \n" "searching for new apartments") self.update_info_btn = ttk.Button(self.choose_info_btn_frame, style="Choose.TButton", cursor=self.pointer, text="Update login details", command=lambda: self.save_login_details("choose info")) self.update_info_btn_tooltip = ToolTip(self.update_info_btn, "Update your WG-Gesucht.de password if you have \n" "changed it since running the program last") warning_text = "***You seem to have moved or deleted your login info file, if you have moved it, please " \ "move it back to the '.data_files' folder, or if you have accidentally deleted it, please " \ "email '[email protected].***" self.choose_info_warning_var = tk.StringVar() self.choose_info_warning_lbl = ttk.Label(self.choose_info_btn_frame, style="Warning.TLabel", textvariable=self.choose_info_warning_var) self.no_login_warning = ttk.Label(self.choose_info_btn_frame, text=warning_text, style='LargeWarning.TLabel') if not os.path.exists(".data_files"): os.makedirs(".data_files") self.login_info_file = '.data_files/.login_info.json' self.login_info = dict() if os.path.isfile(self.login_info_file): # make login file hidden for Windows users if sys.platform == "win32": os.popen("attrib +h {}".format(self.login_info_file)).close() with open(self.login_info_file) as file: self.login_info = json.load(file) else: with open('.data_files/.login_info.json', 'w', encoding='utf-8') as save: json.dump(self.login_info, indent=4, sort_keys=True, fp=save) self.check_credentials_queue = queue.Queue() self.log_output_queue = multiprocessing.Queue() self.main_process = multiprocessing.Process(target=wg_gesucht.start_searching, args=[self.login_info, self.log_output_queue]) # create login form widgets bullet = "\u2022" self.form_frame = ttk.Frame(self) self.form_frame.columnconfigure(1, weight=1) self.email_lbl = ttk.Label(self.form_frame, text="Email: ") self.email_var = tk.StringVar() self.email_entry = ttk.Entry(self.form_frame, textvariable=self.email_var, width=field_width) self.email_var.set(self.login_info.get("email", "")) self.password_lbl = ttk.Label(self.form_frame, text="Password: "******"<Return>", lambda event: self.check_credentials('save details')) self.phone_number_lbl = ttk.Label(self.form_frame, text="Phone Number: ") self.phone_number_var = tk.StringVar() self.phone_number_entry = ttk.Entry(self.form_frame, textvariable=self.phone_number_var, width=field_width) self.phone_number_entry.bind("<Return>", lambda event: self.check_credentials('save details')) self.form_warning_var = tk.StringVar() self.form_warning_lbl = ttk.Label(self.form_frame, style='Warning.TLabel', textvariable=self.form_warning_var) self.save_button = ttk.Button(self.form_frame, text="Save and Start", cursor=self.pointer, command=lambda: self.check_credentials('save details')) self.form_back_btn = ttk.Button(self.form_frame, text="Back", cursor=self.pointer, command=lambda: self.choose_info("save details")) # create log window widgets self.stop_restart_frame = ttk.Frame(self) self.log_stop_button = ttk.Button(self.stop_restart_frame, text="Stop", cursor=self.pointer, command=self.stop) self.log_back_button = ttk.Button(self.stop_restart_frame, text="Back", cursor=self.pointer, command=lambda: self.choose_info("log window")) self.log_restart_button = ttk.Button(self.stop_restart_frame, text="Restart", cursor=self.pointer, command=lambda: self.log_window("restart")) self.log_frame = ttk.Frame(self) self.log_text = scrolledtext.ScrolledText(self.log_frame, borderwidth=1, relief='sunken', state=tk.DISABLED) if self.login_info.get("password", "") == '' or self.login_info.get("phone_number", "") == '': self.save_login_details("init") else: self.choose_info("init")
def create_calculations_window(event, master, circuit): pack_settings = self.master_frame.pack_info() self.master_frame.pack_forget() def go_back(): self.circuit_frame.pack_forget() self.master_frame.pack(pack_settings) self.circuit_frame = frame(master, padx=20, pady=20, font='Verdana 11 bold') navbar_frame = frame(self.circuit_frame) go_back = Button(navbar_frame, text='GO BACK', command=go_back) go_back.pack(anchor=W, side=LEFT, pady=1) def handler(circuit=circuit, master=navbar_frame): return self.info_pop_up(circuit, master) help_btn = Button(navbar_frame, bitmap='question', height=26, command=handler) help_btn.pack(pady=1, side=RIGHT, padx=1) def handler(circuit=circuit): return self.plot(circuit) refresh = Button(navbar_frame, text='GRAPH', command=handler) refresh.pack(anchor=E, pady=1, side=RIGHT) Label(self.circuit_frame, text='Circuit attributes {} circuit'.format(circuit)).pack( pady=10) labels_frame = frame(self.circuit_frame, font='Verdana 11') self.variables = {} if circuit == 'RL': for text in InputTexts.RL: var = self.variables[text[0]] = StringVar() entry_frame = frame(labels_frame, side=TOP, anchor=W, padx=5) Label(entry_frame, text='{} ({}): '.format(text[1], text[0])).pack(anchor=W, side=LEFT, pady=1, expand=YES) field_frame = frame(entry_frame) entry = Entry(field_frame, textvariable=var, width=10) if text[0].lower() in ['i', 'z', 'θ', 'vr', 'vl', 'xl']: entry.configure(state='disabled') # TODO better validation? entry.pack(pady=1, side=LEFT, anchor=W) unit = Label(field_frame, text='{}'.format(text[2]), width=3) unit.pack(side=LEFT, anchor=E) ToolTip(unit, text[3]) def handler(event, circuit=circuit, last_updated=text[0].lower()): return self.calculate_method(circuit, last_updated) entry.bind('<FocusOut>', handler) entry.bind('<KeyRelease-Return>', handler) # placeholder for chart self.chart_frame = frame(self.circuit_frame) elif circuit == 'RC': for text in InputTexts.RC: var = self.variables[text[0]] = StringVar() entry_frame = frame(labels_frame, side=TOP, anchor=W, padx=5) Label(entry_frame, text='{} ({}): '.format(text[1], text[0])).pack(anchor=W, side=LEFT, pady=1, expand=YES) field_frame = frame(entry_frame) entry = Entry(field_frame, textvariable=var, width=10) if text[0].lower() in ['i', 'z', 'θ', 'vr', 'vc', 'xc']: entry.configure(state='disabled') # TODO better validation? entry.pack(pady=1, side=LEFT, anchor=W) unit = Label(field_frame, text='{}'.format(text[2]), width=3) unit.pack(side=LEFT, anchor=E) ToolTip(unit, text[3]) def handler(event, circuit=circuit, last_updated=text[0].lower()): return self.calculate_method(circuit, last_updated) entry.bind('<FocusOut>', handler) entry.bind('<KeyRelease-Return>', handler) # placeholder for chart self.chart_frame = frame(self.circuit_frame) else: for text in InputTexts.RLC: var = self.variables[text[0]] = StringVar() entry_frame = frame(labels_frame, side=TOP, anchor=W, padx=5) Label(entry_frame, text='{} ({}): '.format(text[1], text[0])).pack(anchor=W, side=LEFT, pady=1, expand=YES) field_frame = frame(entry_frame) entry = Entry(field_frame, textvariable=var, width=10) if text[0].lower() in [ 'i', 'z', 'θ', 'vr', 'vc', 'xc', 'vl', 'xl' ]: entry.configure(state='disabled') # TODO better validation? entry.pack(pady=1, side=LEFT, anchor=W) unit = Label(field_frame, text='{}'.format(text[2]), width=3) unit.pack(side=LEFT, anchor=E) ToolTip(unit, text[3]) def handler(event, circuit=circuit, last_updated=text[0].lower()): return self.calculate_method(circuit, last_updated) entry.bind('<FocusOut>', handler) entry.bind('<KeyRelease-Return>', handler) # placeholder for chart self.chart_frame = frame(self.circuit_frame)
def __init__(self): window = Tk() window.title("Super Calculator made by Izzan") #Lock the window so it can't be resized window.minsize(width=300, height=400) window.maxsize(width=300, height=400) frame1 = Frame(window) print( 'Selamat datang di aplikasi kalkulator saya. Mohon kritik dan saran nya. :)' ) self.memory = '0' #Calculator memory container self.expr = '' #First operand and equation container self.startOfNextOperand = True self.enterinput = Entry(frame1, relief=RIDGE, borderwidth=3, width=20, font=('Roboto', 18), bg='white', fg='black') self.enterinput.grid(row=0, column=0, columnspan=5) buttons = [ ['CLR', 'MC', 'M+', 'M-', 'MR'], #Array of available buttons on the calculator ['d', 'e', 'f', '+', '-'], ['a', 'b', 'c', '/', '*'], ['7', '8', '9', '**', '√'], ['4', '5', '6', 'sin', 'cos'], ['1', '2', '3', 'tan', 'ln'], ['0', '.', '±', '~', '2C'], ['x', 'o', '^', '|', '&'], ['π', 'int', 'rad', '//', 'exp'], ['bin', 'hex', 'oct', '%', '='] ] #Array of tooltips available when the cursor is on a button ToolTips = [[ 'Clear', 'Memory Clear', 'Memory Add', 'Memory Subtract', 'Memory Recall' ], [ 'Letter d', 'Letter e/Euler Number', 'Letter f', 'Add', 'Subtract' ], ['Letter a', 'Letter b', 'Letter c', 'Float Divide', 'Multiply'], ['Seven', 'Eight', 'Nine', 'Power by n', 'Square Root'], ['Four', 'Five', 'Six', 'sine(radians)', 'cos(radians)'], ['One', 'Two', 'Three', 'tan(radians)', 'natural log'], [ 'Zero', 'Decimal point', 'Toggle +- sign', 'Bitwise complement', "32-bit 2's Complement" ], [ 'Letter x', 'Letter o', 'Bitwise XOR', 'Bitwise OR', 'Bitwise AND' ], [ 'Pi', 'Change to Integer', 'Change to radians', 'Integer divide', 'Power of E(2,718...)' ], [ 'Change to binary', 'Change to hexadecimal', 'Change to octal', 'Modulo', 'Compute to decimal' ]] #Looping for each button and tool tip in the row and column for r in range(10): for c in range(5): def cmd(x=buttons[r][c]): self.click(x) b = Button(frame1, text=buttons[r][c], width=2, relief=RAISED, font=("Roboto", 12), command=cmd, bg="maroon", fg="white") b.grid(row=r + 5, column=c) tip = ToolTip(b, ToolTips[r][c]) frame1.pack() window.mainloop()
def _make_toolbar(self): if self.TB is not None: return # toolbar exists top = self.editwin.top f = Frame(top) widgets = self.editwin.top.pack_slaves() widgets = list(widgets) # list for Python 3 support f.pack(side='top', fill=X, before=widgets[0]) # make toolbar play nicely with CodeContext f.config(height=8) mvar = [StringVar(top), StringVar(top)] Separator = Label try: osx = (macosxSupport.runningAsOSXApp() or sys.platform == 'darwin') except: osx = False toolbar = [(Button(f, command=lambda: self.toolbar('titles'), text='>', width=1 if not osx else 2), None, 'Show %s Labels' % SUBCODE_STR), (Button(f, command=lambda: self.toolbar('ins'), text='##', width=2 if not osx else 3), None, 'Insert %s Marker' % SUBCODE_STR), (Separator(f), {'fill':Y, 'pady':0, 'padx':4}, None), (Button(f, command=lambda: self.toolbar('minus'), text='-', width=1 if not osx else 2), None, 'Subtract from number by cursor then run %s' % SUBCODE_STR.lower()), (Entry(f, width=6, justify='center', textvar=mvar[0]), {'fill':Y}, '+ - value'), (Button(f, command=lambda: self.toolbar('plus'), text='+', width=1 if not osx else 2), None, 'Add to number by cursor then run %s' % SUBCODE_STR.lower()), (Separator(f), {'fill':Y, 'pady':0, 'padx':4}, None), (Button(f, command=lambda: self.toolbar('div'), text='/', width=1 if not osx else 2), None, 'Divide number by cursor then run %s' % SUBCODE_STR.lower()), (Entry(f, width=6, justify='center', textvar=mvar[1]), {'fill':Y}, '* / value'), (Button(f, command=lambda: self.toolbar('mult'), text='*', width=1 if not osx else 2), None, 'Multiply number by cursor then run %s' % SUBCODE_STR.lower()), (Separator(f), {'fill':Y, 'pady':0, 'padx':4}, None), (Button(f, command=lambda: self.toolbar('run_subcode'), text='R%s' % SUBCODE_STR[0].upper(), width=2 if not osx else 4), None, 'Run %s' % SUBCODE_STR), (Button(f, command=lambda: self.toolbar('run_subcode_proceed'), text='R%sP' % SUBCODE_STR[0].upper(), width=3 if not osx else 4), None, 'Run %s and Proceed' % SUBCODE_STR), (Button(f, command=lambda: self.toolbar('run_all'), text='RA', width=2 if not osx else 4), None, 'Run All %ss' % SUBCODE_STR), (Separator(f), {'fill':Y, 'pady':0, 'padx':4}, None), ] mvar[0].set('1.0') mvar[1].set('1.1') self.mvar = mvar for i, cfg, tooltip in toolbar: if cfg is None: cfg = {} try: i.configure(pady=0, padx=7) i.configure(wraplength=0) i.configure(borderwidth=1) except: # catch ALL THE ERRORS #print 'error',i, cfg, tooltip pass i.pack(side='left', **cfg) if tooltip is not None: ToolTip.ToolTip(i, ' %s ' % tooltip) self.TB = f self.TITLES = toolbar[0][0] # pointer to the titles button
def initUI(self): """ Initialize the GUI-Elements """ self.master.title("Formula Plotter") self.menu = tk.Menu(self.master) self.master.config(menu=self.menu) self.helpmenu = tk.Menu(self.menu) self.menu.add_cascade(label='Help', menu=self.helpmenu) self.helpmenu.add_command(label='Usage', command=self.instructions) self.scale_x_min = tk.Scale(self.master, from_=-500, to=0, tickinterval=100, length=600, orient='horizontal', command=self.set_x_min) self.scale_x_min.grid(row=4, column=1) self.x_min = tk.IntVar() self.scale_x_max = tk.Scale(self.master, from_=0, to=500, tickinterval=100, length=600, orient='horizontal', command=self.set_x_max) self.scale_x_max.grid(row=5, column=1) self.scale_x_max.set(10) self.x_max = tk.IntVar() self.replot_button = tk.Button(self.master, text='New plot', command=self.replot) self.replot_button.grid(row=0, column=2) ToolTip.ToolTip(self.replot_button, 'Clear current plot and draw new function') self.updateplot_button = tk.Button(self.master, text='Add to plot', command=self.update) self.updateplot_button.grid(row=0, column=3) ToolTip.ToolTip(self.updateplot_button, 'Draw new plot on existing') self.minima_button = tk.Button(self.master, text='Local Minima', command=self.minima) self.minima_button.grid(row=4, column=2) ToolTip.ToolTip(self.minima_button, 'Show local Minima') self.maxima_button = tk.Button(self.master, text='Local Maxima', command=self.maxima) self.maxima_button.grid(row=5, column=2) ToolTip.ToolTip(self.maxima_button, 'Show local Maxima') self.turning_button = tk.Button(self.master, text='Turning point', command=self.turning_point) self.turning_button.grid(row=6, column=2) ToolTip.ToolTip(self.turning_button, 'Show turning points') self.tangent_button = tk.Button(self.master, text='Tangent', command=self.tangent) self.tangent_button.grid(row=6, column=3) ToolTip.ToolTip(self.tangent_button, 'Show tangent at entered value') tk.Label(self.master, text='f (x) =').grid(row=0, column=0) tk.Label(self.master, text='x minimum').grid(row=4, column=0) tk.Label(self.master, text='x maximum').grid(row=5, column=0) tk.Label(self.master, text='Enter tangent value').grid(row=4, column=3) self.formula = tk.Entry(self.master, width=80) self.formula.grid(row=0, column=1) self.formula.insert(0, 'sin(x)') self.tangent_val = tk.Entry(self.master, width=10) self.tangent_val.grid(row=5, column=3) self.tangent_val.insert(0, 0) fig = plt.figure() canvas = FigureCanvasTkAgg(fig, master=self.master) toolbar = NavigationToolbar2TkAgg(canvas, self.master) canvas.get_tk_widget().grid(row=3, column=1) toolbar.grid(row=6, column=1)