# all copies or substantial portions of the Software. # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # See also: http://effbot.org/tkinterbook/spinbox.htm # http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/spinbox.html import tkinter as tk def spinbox_callback(): print(spinbox.get()) def button_callback(): print(spinbox.get()) root = tk.Tk() spinbox = tk.Spinbox(root, from_=0, to=10, increment=0.5, command=spinbox_callback) spinbox.pack(side=tk.LEFT) button = tk.Button(root, text="Print", command=button_callback) button.pack(side=tk.LEFT) root.mainloop()
def createSipTab(self): # Prepare the variables to set/receive values from GUI self.cfgPrackUse = tk.IntVar(value=self.cfg.callConfig.prackUse) self.cfgTimerUse = tk.IntVar(value=self.cfg.callConfig.timerUse) self.cfgTimerExpires = tk.IntVar( value=self.cfg.callConfig.timerSessExpiresSec) self.cfgPublish = tk.BooleanVar( value=self.cfg.presConfig.publishEnabled) self.cfgMwiEnabled = tk.BooleanVar(value=self.cfg.mwiConfig.enabled) self.cfgEnableContactRewrite = tk.BooleanVar( value=self.cfg.natConfig.contactRewriteUse != 0) self.cfgEnableViaRewrite = tk.BooleanVar( value=self.cfg.natConfig.viaRewriteUse != 0) self.cfgEnableSdpRewrite = tk.BooleanVar( value=self.cfg.natConfig.sdpNatRewriteUse != 0) self.cfgEnableSipOutbound = tk.BooleanVar( value=self.cfg.natConfig.sipOutboundUse != 0) self.cfgKaInterval = tk.IntVar( value=self.cfg.natConfig.udpKaIntervalSec) # Build the tab page frm = ttk.Frame(self.frm) frm.columnconfigure(0, weight=1) frm.columnconfigure(1, weight=2) row = 0 ttk.Label(frm, text='100rel/PRACK:').grid(row=row, column=0, sticky=tk.E, pady=2) ttk.Radiobutton(frm, text='Only offer PRACK', value=pj.PJSUA_100REL_NOT_USED, variable=self.cfgPrackUse).grid(row=row, column=1, sticky=tk.W, padx=6) row += 1 ttk.Radiobutton(frm, text='Offer and use if remote supports', value=pj.PJSUA_100REL_OPTIONAL, variable=self.cfgPrackUse).grid(row=row, column=1, sticky=tk.W, padx=6) row += 1 ttk.Radiobutton(frm, text='Required', value=pj.PJSUA_100REL_MANDATORY, variable=self.cfgPrackUse).grid(row=row, column=1, sticky=tk.W, padx=6) row += 1 ttk.Label(frm, text='Session Timer:').grid(row=row, column=0, sticky=tk.E, pady=2) ttk.Radiobutton(frm, text='Not offered', value=pj.PJSUA_SIP_TIMER_INACTIVE, variable=self.cfgTimerUse).grid(row=row, column=1, sticky=tk.W, padx=6) row += 1 ttk.Radiobutton(frm, text='Optional', value=pj.PJSUA_SIP_TIMER_OPTIONAL, variable=self.cfgTimerUse).grid(row=row, column=1, sticky=tk.W, padx=6) row += 1 ttk.Radiobutton(frm, text='Required', value=pj.PJSUA_SIP_TIMER_REQUIRED, variable=self.cfgTimerUse).grid(row=row, column=1, sticky=tk.W, padx=6) row += 1 ttk.Radiobutton(frm, text="Always use", value=pj.PJSUA_SIP_TIMER_ALWAYS, variable=self.cfgTimerUse).grid(row=row, column=1, sticky=tk.W, padx=6) row += 1 ttk.Label(frm, text='Session Timer Expiration:').grid(row=row, column=0, sticky=tk.E, pady=2) tk.Spinbox(frm, from_=90, to=7200, textvariable=self.cfgTimerExpires, width=5).grid(row=row, column=1, sticky=tk.W, padx=6) ttk.Label(frm, text='(seconds)').grid(row=row, column=1, sticky=tk.E) row += 1 ttk.Label(frm, text='Presence:').grid(row=row, column=0, sticky=tk.E, pady=2) ttk.Checkbutton(frm, text='Enable PUBLISH', variable=self.cfgPublish).grid(row=row, column=1, sticky=tk.W, padx=6, pady=2) row += 1 ttk.Label(frm, text='Message Waiting Indication:').grid(row=row, column=0, sticky=tk.E, pady=2) ttk.Checkbutton(frm, text='Enable MWI', variable=self.cfgMwiEnabled).grid(row=row, column=1, sticky=tk.W, padx=6, pady=2) row += 1 ttk.Label(frm, text='NAT Traversal:').grid(row=row, column=0, sticky=tk.E, pady=2) ttk.Checkbutton(frm, text='Enable Contact Rewrite', variable=self.cfgEnableContactRewrite).grid( row=row, column=1, sticky=tk.W, padx=6, pady=2) row += 1 ttk.Checkbutton(frm, text='Enable Via Rewrite', variable=self.cfgEnableViaRewrite).grid(row=row, column=1, sticky=tk.W, padx=6, pady=2) row += 1 ttk.Checkbutton(frm, text='Enable SDP IP Address Rewrite', variable=self.cfgEnableSdpRewrite).grid(row=row, column=1, sticky=tk.W, padx=6, pady=2) row += 1 ttk.Checkbutton(frm, text='Enable SIP Outbound Extension', variable=self.cfgEnableSipOutbound).grid(row=row, column=1, sticky=tk.W, padx=6, pady=2) row += 1 ttk.Label(frm, text='UDP Keep-Alive Interval:').grid(row=row, column=0, sticky=tk.E, pady=2) tk.Spinbox(frm, from_=0, to=3600, textvariable=self.cfgKaInterval, width=5).grid(row=row, column=1, sticky=tk.W, padx=6) ttk.Label(frm, text='(seconds) Zero to disable.').grid(row=row, column=1, sticky=tk.E) self.wTab.add(frm, text='SIP Features')
def createBasicTab(self): # Prepare the variables to set/receive values from GUI self.cfgPriority = tk.IntVar(value=self.cfg.priority) self.cfgAccId = tk.StringVar(value=self.cfg.idUri) self.cfgRegistrar = tk.StringVar(value=self.cfg.regConfig.registrarUri) self.cfgRegisterOnAdd = tk.BooleanVar( value=self.cfg.regConfig.registerOnAdd) self.cfgUsername = tk.StringVar() self.cfgPassword = tk.StringVar() if len(self.cfg.sipConfig.authCreds): self.cfgUsername.set(self.cfg.sipConfig.authCreds[0].username) self.cfgPassword.set(self.cfg.sipConfig.authCreds[0].data) self.cfgProxy = tk.StringVar() if len(self.cfg.sipConfig.proxies): self.cfgProxy.set(self.cfg.sipConfig.proxies[0]) # Build the tab page frm = ttk.Frame(self.frm) frm.columnconfigure(0, weight=1) frm.columnconfigure(1, weight=2) row = 0 ttk.Label(frm, text='Priority:').grid(row=row, column=0, sticky=tk.E, pady=2) tk.Spinbox(frm, from_=0, to=9, textvariable=self.cfgPriority, width=2).grid(row=row, column=1, sticky=tk.W, padx=6) row += 1 ttk.Label(frm, text='ID (URI):').grid(row=row, column=0, sticky=tk.E, pady=2) ttk.Entry(frm, textvariable=self.cfgAccId, width=32).grid(row=row, column=1, sticky=tk.W, padx=6) row += 1 ttk.Label(frm, text='Registrar URI:').grid(row=row, column=0, sticky=tk.E, pady=2) ttk.Entry(frm, textvariable=self.cfgRegistrar, width=32).grid(row=row, column=1, sticky=tk.W, padx=6) row += 1 ttk.Checkbutton(frm, text='Register on add', variable=self.cfgRegisterOnAdd).grid(row=row, column=1, sticky=tk.W, padx=6, pady=2) row += 1 ttk.Label(frm, text='Optional proxy URI:').grid(row=row, column=0, sticky=tk.E, pady=2) ttk.Entry(frm, textvariable=self.cfgProxy, width=32).grid(row=row, column=1, sticky=tk.W, padx=6) row += 1 ttk.Label(frm, text='Auth username:'******'Password:'******'*', width=16).grid(row=row, column=1, sticky=tk.W, padx=6, pady=2) self.wTab.add(frm, text='Basic Settings')
def create_widgets(self): '''Create the tkinter UI''' example_supported = (self.ai_props.num_ai_chans > 0 and self.ai_props.supports_analog_trig) if example_supported: main_frame = tk.Frame(self) main_frame.pack(fill=tk.X, anchor=tk.NW) float_vcmd = self.register(self.validate_float_entry) curr_row = 0 if self.ai_props.num_ai_chans > 1: channel_vcmd = self.register(self.validate_channel_entry) low_channel_entry_label = tk.Label(main_frame) low_channel_entry_label["text"] = "Low Channel Number:" low_channel_entry_label.grid(row=curr_row, column=0, sticky=tk.W) self.low_channel_entry = tk.Spinbox( main_frame, from_=0, to=max(self.ai_props.num_ai_chans - 1, 0), validate='key', validatecommand=(channel_vcmd, '%P')) self.low_channel_entry.grid(row=curr_row, column=1, sticky=tk.W) curr_row += 1 high_channel_entry_label = tk.Label(main_frame) high_channel_entry_label["text"] = "High Channel Number:" high_channel_entry_label.grid(row=curr_row, column=0, sticky=tk.W) self.high_channel_entry = tk.Spinbox( main_frame, from_=0, validate='key', to=max(self.ai_props.num_ai_chans - 1, 0), validatecommand=(channel_vcmd, '%P')) self.high_channel_entry.grid(row=curr_row, column=1, sticky=tk.W) initial_value = min(self.ai_props.num_ai_chans - 1, 3) self.high_channel_entry.delete(0, tk.END) self.high_channel_entry.insert(0, str(initial_value)) curr_row += 1 trigger_type_label = tk.Label(main_frame) trigger_type_label["text"] = "Trigger Type:" trigger_type_label.grid(row=curr_row, column=0, sticky=tk.W) self.trigger_type_combobox = Combobox(main_frame) self.trigger_type_combobox["values"] = ["Above", "Below"] self.trigger_type_combobox["state"] = "readonly" self.trigger_type_combobox.current(0) self.trigger_type_combobox.grid(row=curr_row, column=1, sticky=tk.W) curr_row += 1 trigger_level_label = tk.Label(main_frame) trigger_level_label["text"] = "Trigger Level:" trigger_level_label.grid(row=curr_row, column=0, sticky=tk.W) self.trigger_level_entry = tk.Entry(main_frame, validate='key', validatecommand=(float_vcmd, '%P')) self.trigger_level_entry.grid(row=curr_row, column=1, sticky=tk.W) self.trigger_level_entry.insert(0, "2") self.results_group = tk.LabelFrame(self, text="Results", padx=3, pady=3) self.results_group.pack(fill=tk.X, anchor=tk.NW, padx=3, pady=3) self.data_frame = tk.Frame(self.results_group) self.data_frame.grid() curr_row += 1 warning_label = tk.Label(main_frame, justify=tk.LEFT, wraplength=400, fg="red") warning_label["text"] = ( "Warning: Clicking Start will freeze the UI until the " "trigger condition is met and the scan completes. " "Real-world applications should run the a_pretrig method " "on a separate thread or use the BACKGROUND option.") warning_label.grid(row=curr_row, columnspan=2, sticky=tk.W) button_frame = tk.Frame(self) button_frame.pack(fill=tk.X, side=tk.RIGHT, anchor=tk.SE) self.start_button = tk.Button(button_frame) self.start_button["text"] = "Start" self.start_button["command"] = self.start self.start_button.grid(row=0, column=0, padx=3, pady=3) quit_button = tk.Button(button_frame) quit_button["text"] = "Quit" quit_button["command"] = self.master.destroy quit_button.grid(row=0, column=1, padx=3, pady=3) else: self.create_unsupported_widgets(self.board_num)
tk.Label(patient3, text="NAME:").grid(row=0, column=0) tk.Label(patient3, text="TIME:").grid(row=1, column=0) ## h_p_1 = tk.StringVar() h_p_1.set("00") m_p_1 = tk.StringVar() m_p_1.set("00") s_p_1 = tk.StringVar() s_p_1.set("00") f1 = tk.Frame(patient1) f1.grid(row=1, column=1) tk.Spinbox(f1, from_=0, to=23, wrap=True, textvariable=h_p_1, width=2, state="readonly").grid(row=0, column=0) tk.Spinbox(f1, from_=0, to=59, wrap=True, textvariable=m_p_1, width=2, state="readonly").grid(row=0, column=1) tk.Spinbox(f1, from_=0, to=59, wrap=True, textvariable=s_p_1,
def __init__(self, app_root, *args, **kwargs): if window_base_class == tk.Toplevel: kwargs.update(bd=0, highlightthickness=0, bg=self.default_bg_color) self.app_root = app_root else: self.app_root = self window_base_class.__init__(self, app_root, *args, **kwargs) BinillaWidget.__init__(self, *args, **kwargs) self.title("Sound compiler") self.resizable(1, 1) self.update() try: self.iconbitmap(e_c.MOZZ_ICON_PATH) except Exception: print("Could not load window icon.") self.wav_dir = tk.StringVar(self) self.sound_path = tk.StringVar(self) self.generate_mouth_data = tk.IntVar(self, 0) self.split_into_smaller_chunks = tk.IntVar(self, 1) self.compression = tk.IntVar(self, constants.COMPRESSION_PCM_16_LE) self.sample_rate = tk.IntVar(self, constants.SAMPLE_RATE_22K) self.encoding = tk.IntVar(self, constants.ENCODING_MONO) self.update_mode = tk.IntVar(self, constants.SOUND_COMPILE_MODE_PRESERVE) self.adpcm_lookahead = tk.IntVar(self, 3) self.adpcm_noise_shaping = tk.IntVar(self, adpcm.NOISE_SHAPING_OFF) self.chunk_size_string = tk.StringVar(self, str(self.chunk_size)) self.chunk_size_string.trace( "w", lambda *a, s=self: s.set_chunk_size()) # make the frames self.main_frame = tk.Frame(self) self.wav_info_frame = tk.LabelFrame( self, text="Import info") self.dirs_frame = tk.LabelFrame( self.main_frame, text="Directories") self.buttons_frame = tk.Frame(self.main_frame) self.settings_frame = tk.Frame( self.main_frame) self.wav_dir_frame = tk.LabelFrame( self.dirs_frame, text="Wav files folder") self.sound_path_frame = tk.LabelFrame( self.dirs_frame, text="Sound output path") self.update_mode_frame = tk.LabelFrame( self.main_frame, text="What to do with existing sound tag") self.processing_frame = tk.LabelFrame( self.settings_frame, text="Format settings") self.adpcm_frame = tk.LabelFrame( self.settings_frame, text="ADPCM settings") self.misc_frame = tk.LabelFrame( self.settings_frame, text="Misc settings") self.compile_mode_replace_rbtn = tk.Radiobutton( self.update_mode_frame, anchor="w", variable=self.update_mode, value=constants.SOUND_COMPILE_MODE_NEW, text="Erase everything(create from scratch)") self.compile_mode_preserve_rbtn = tk.Radiobutton( self.update_mode_frame, anchor="w", variable=self.update_mode, value=constants.SOUND_COMPILE_MODE_PRESERVE, text="Preserve tag values(skip fractions and such)") self.compile_mode_additive_rbtn = tk.Radiobutton( self.update_mode_frame, anchor="w", variable=self.update_mode, value=constants.SOUND_COMPILE_MODE_ADDITIVE, text="Erase nothing(only add/update permutations)") self.compression_menu = ScrollMenu( self.processing_frame, variable=self.compression, menu_width=10, options=tuple( compression_names[const] for const in compression_menu_values ) ) self.sample_rate_menu = ScrollMenu( self.processing_frame, variable=self.sample_rate, menu_width=5, options=tuple( sample_rate_names[const] for const in sample_rate_menu_values ) ) self.encoding_menu = ScrollMenu( self.processing_frame, variable=self.encoding, menu_width=5, options=tuple( encoding_names[const] for const in encoding_menu_values ) ) self.adpcm_lookahead_label = tk.Label( self.adpcm_frame, text="Lookahead prediction �") self.adpcm_lookahead_menu = ScrollMenu( self.adpcm_frame, variable=self.adpcm_lookahead, menu_width=17, options=adpcm_lookahead_names ) self.adpcm_noise_shaping_label = tk.Label( self.adpcm_frame, text="Noise shaping �") self.adpcm_noise_shaping_menu = ScrollMenu( self.adpcm_frame, variable=self.adpcm_noise_shaping, menu_width=17, options=adpcm_noise_shaping_names ) self.adpcm_lookahead_label.tooltip_string = self.adpcm_lookahead_menu.tooltip_string = ( "Number of samples to look ahead when determining minimum\n" "ADPCM error. Higher numbers are typically better." ) self.adpcm_noise_shaping_label.tooltip_string = self.adpcm_noise_shaping_menu.tooltip_string = ( "The type of noise shaping algorithm to apply to the sound.\n" "Noise shaping is a form of dithering, but for audio.\n" "Results will vary, so always test after turning this on." ) self.compression_menu.sel_index = 0 self.sample_rate_menu.sel_index = 0 self.encoding_menu.sel_index = 0 self.generate_mouth_data_cbtn = tk.Checkbutton( self.misc_frame, variable=self.generate_mouth_data, anchor="w", text="Generate mouth data �") self.split_into_smaller_chunks_cbtn = tk.Checkbutton( self.misc_frame, variable=self.split_into_smaller_chunks, anchor="w", text="Split into chunks �") self.chunk_size_label = tk.Label( self.misc_frame, text="Chunk size �") self.chunk_size_spinbox = tk.Spinbox( self.misc_frame, from_=self.min_chunk_size, to=self.max_chunk_size, increment=1024*4, textvariable=self.chunk_size_string, justify="right") self.generate_mouth_data_cbtn.tooltip_string = ( "Whether or not to generate mouth data for this sound.\n" "Mouth data animates a characters mouth to the sound." ) self.split_into_smaller_chunks_cbtn.tooltip_string = ( "Whether or not to split long sounds into pieces.\n" "Long sounds may not play properly ingame, and this\n" "setting is recommended if the sound is over a few seconds." ) self.chunk_size_label.tooltip_string = self.chunk_size_spinbox.tooltip_string = ( 'The number of samples per chunk to split long sounds into.\n' 'NOTE 1:\tThis is for mono. A value of 2 equals 1 stereo sample.\n' 'NOTE 2:\tThis will be rounded down to a multiple of 64 for ADPCM.' ) self._pr_info_tree = tk.ttk.Treeview( self.wav_info_frame, selectmode='browse', padding=(0, 0), height=4) self.wav_info_vsb = tk.Scrollbar( self.wav_info_frame, orient='vertical', command=self._pr_info_tree.yview) self.wav_info_hsb = tk.Scrollbar( self.wav_info_frame, orient='horizontal', command=self._pr_info_tree.xview) self._pr_info_tree.config(yscrollcommand=self.wav_info_vsb.set, xscrollcommand=self.wav_info_hsb.set) self.wav_dir_entry = tk.Entry( self.wav_dir_frame, textvariable=self.wav_dir, state=tk.DISABLED) self.wav_dir_browse_button = tk.Button( self.wav_dir_frame, text="Browse", command=self.wav_dir_browse) self.sound_path_entry = tk.Entry( self.sound_path_frame, textvariable=self.sound_path, state=tk.DISABLED) self.sound_path_browse_button = tk.Button( self.sound_path_frame, text="Browse", command=self.sound_path_browse) self.load_button = tk.Button( self.buttons_frame, text="Load wav files", command=self.load_wav_files) self.compile_button = tk.Button( self.buttons_frame, text="Compile sound", command=self.compile_sound) self.populate_wav_info_tree() # pack everything self.main_frame.pack(fill="both", side='left', pady=3, padx=3) self.wav_info_frame.pack(fill="both", side='left', pady=3, padx=3, expand=True) self.dirs_frame.pack(fill="x") self.buttons_frame.pack(fill="x", pady=3, padx=3) self.update_mode_frame.pack(fill='both') self.settings_frame.pack(fill="both") self.wav_dir_frame.pack(fill='x') self.sound_path_frame.pack(fill='x') self.wav_dir_entry.pack(side='left', fill='x', expand=True) self.wav_dir_browse_button.pack(side='left') self.sound_path_entry.pack(side='left', fill='x', expand=True) self.sound_path_browse_button.pack(side='left') self.wav_info_hsb.pack(side="bottom", fill='x') self.wav_info_vsb.pack(side="right", fill='y') self._pr_info_tree.pack(side='left', fill='both', expand=True) self.load_button.pack(side='left', fill='both', padx=3, expand=True) self.compile_button.pack(side='right', fill='both', padx=3, expand=True) for w in (self.processing_frame, self.adpcm_frame, self.misc_frame): w.pack(expand=True, fill='both') for w in (self.compile_mode_replace_rbtn, self.compile_mode_preserve_rbtn, self.compile_mode_additive_rbtn,): w.pack(expand=True, fill='both') for w in (self.compression_menu, self.sample_rate_menu, self.encoding_menu): w.pack(expand=True, side='left', fill='both') i = 0 for w, lbl in ( (self.adpcm_lookahead_menu, self.adpcm_lookahead_label), (self.adpcm_noise_shaping_menu, self.adpcm_noise_shaping_label) ): lbl.grid(row=i, column=0, sticky="w", padx=(17, 0)) w.grid(row=i, column=2, sticky="news", padx=(10, 0)) i += 1 self.generate_mouth_data_cbtn.grid( row=0, column=0, sticky="news", padx=(17, 0)) self.split_into_smaller_chunks_cbtn.grid( row=0, column=1, sticky="news", padx=(17, 0)) self.chunk_size_label.grid( row=1, column=0, sticky="w", padx=(17, 0)) self.chunk_size_spinbox.grid( row=1, column=1, sticky="news", padx=(10, 10)) self.apply_style() if self.app_root is not self: self.transient(self.app_root)
function_dropdown=AutocompleteCombobox(window,width=5,textvariable=function_input_var,font=font) function_dropdown['completevalues']=function_list function_dropdown.bind('<Key>',function_select) function_dropdown.bind('<Double-Button-1>',function_select) function_dropdown.autocomplete(delta=-6) function_dropdown.current() function_dropdown.grid(row=7,column=0,sticky='news',padx=5,pady=5,columnspan=3) save_and_clear_all=HoverButton(window,text='\u21ba',font=font,fg="Black",borderwidth=0,bg='white',command=save_and_clear_input,activebackground=active_button_background,takefocus=0) save_and_clear_all.grid(row=7,column=3,sticky='news',padx=5,pady=5) button_Ans=HoverButton(window,text='Ans',font=font,fg="Black",borderwidth=0,bg='white',command=lambda: input_to_input_var('Ans'),activebackground=active_button_background,takefocus=0) button_Ans.grid(row=7,column=4,sticky='news',padx=5,pady=5) size_spinbox=tk.Spinbox(window,from_=0,to=100,font=font,fg="Black",bg="white",textvariable=size_var,width=4,command=lambda: resize(1),takefocus=1) size_spinbox.bind('<Key>',resize) size_spinbox.grid(row=2,column=4,sticky='news',padx=5,pady=5) button_pi=HoverButton(window,text='\u03c0',font=font,fg="Black",borderwidth=0,bg='white',command=lambda: input_to_input_var('pi'),activebackground=active_button_background,takefocus=0) button_pi.grid(row=3,column=4,sticky='news',padx=5,pady=5) button_e=HoverButton(window,text='e',font=font,fg="Black",borderwidth=0,bg='white',command=lambda: input_to_input_var('e'),activebackground=active_button_background,takefocus=0) button_e.grid(row=4,column=4,sticky='news',padx=5,pady=5) button_tau=HoverButton(window,text='\u03c4',font=font,fg="Black",borderwidth=0,bg='white',command=lambda: input_to_input_var('tau'),activebackground=active_button_background,takefocus=0) button_tau.grid(row=5,column=4,sticky='news',padx=5,pady=5) button_inf=HoverButton(window,text='\u221e',font=font,fg="Black",borderwidth=0,bg='white',command=lambda: input_to_input_var('inf'),activebackground=active_button_background,takefocus=0) button_inf.grid(row=6,column=4,sticky='news',padx=5,pady=5)
othermonthweforeground='gray50', othermonthwebackground='white', weekendbackground='white', weekendforeground='black', headersbackground='white', headersforeground='gray70', anchor="w") lbl3.grid(column=1, row=2) end_date.grid(column=2, row=2) '''Creating grouping of days''' lbl4 = tk.Label(root, text="Group No. Of Days:", fg="black", anchor="w", font="Calibri 12") spin_box = tk.Spinbox(root, from_=1, to=100, width=5) lbl4.grid(column=1, row=3) spin_box.grid(column=2, row=3) '''Browsing data files for input''' def ivr_browse_button(): #filename = filedialog.askdirectory() filename = filedialog.askdirectory() ivr_file_path.set(filename) ivr_file_path = tk.StringVar() lbl8 = tk.Label(root, text="IVR File Directory: ", fg="black",
def _create(self, **kwargs): return tkinter.Spinbox(self.root, **kwargs)
# spinbox component of tkinter import tkinter root = tkinter.Tk() w = tkinter.Spinbox(root, from_=0, to=100, width=10) w.pack() x = tkinter.Spinbox(root, values=('Easy', 'Medium', 'Hard'), width=10) x.pack() y = tkinter.Spinbox(root, values=(3, 7, 97), width=10) y.pack() # Setting u default values var = tkinter.IntVar() var.set(69) z = tkinter.Spinbox(root, from_=0, to=100, width=10, textvariable=var) z.pack() root.mainloop()
radioButton1.grid(row=0, column=0, sticky='w') radioButton2.grid(row=1, column=0, sticky='w') radioButton3.grid(row=2, column=0, sticky='w') # Widget to display the results: resultLabel = tkinter.Label(mainWindow, text="Result") resultLabel.grid(row=2, column=2, sticky='nw') result = tkinter.Entry(mainWindow) result.grid(row=2, column=2, sticky='sw') # Frame for the time spinners timeFrame = tkinter.LabelFrame(mainWindow, text="Time") timeFrame.grid(row=3, column=0, sticky='new') # Time spinners hourSpinner = tkinter.Spinbox(timeFrame, width=2, values=tuple(range( 0, 24))) # This will count [0, 24); minuteSpinner = tkinter.Spinbox(timeFrame, width=2, from_=0, to=59) # This will count [0, 59]; secondSpinner = tkinter.Spinbox(timeFrame, width=2, from_=0, to=59) hourSpinner.grid(row=0, column=0) tkinter.Label(timeFrame, text=':').grid(row=0, column=1) minuteSpinner.grid(row=0, column=2) tkinter.Label(timeFrame, text=':').grid(row=0, column=3) secondSpinner.grid(row=0, column=4) timeFrame[ 'padx'] = 30 # Adding some padding in the x-direction to the time spinners. # Frame for the date spinners; dateFrame = tkinter.Frame(mainWindow) dateFrame.grid(row=4, column=0, sticky='new')
def main(self): Frame = ttk.LabelFrame(self, text='Dialogue') Frame.pack(expand=1, fill='both') # creating the entry boxes self.vcmd = (self.register(self.validator), '%P', '%d') self.vcmd2 = (self.register(self.validator3), '%P', '%d') self.txt1 = tk.Label(Frame, text='Music Id:') self.txt1.place(relx=0.01, rely=0.05) self.txt2 = tk.Label(Frame, text='Artist Id:') self.txt2.place(relx=0.01, rely=0.15) self.id1 = tk.Entry(Frame, width=26, state='disabled', validate='key', validatecommand=self.vcmd2) self.id1.place(relx=0.15, rely=0.05) self.id2 = tk.Entry(Frame, width=26, validate='key', validatecommand=self.vcmd, state='disabled') self.id2.place(relx=0.15, rely=0.15) # creating the dropdown menu for the metrics #tk.Label(Frame, text='Metric:').place(relx=0.58, rely=0.154) OPTIONS = ['Cosine', 'Euclidean', 'Jaccard', 'manhattan', 'pearson'] self.metric = tk.StringVar() self.metric.set(OPTIONS[2]) # default value option = tk.OptionMenu(Frame, self.metric, *OPTIONS) option.configure(width=13) option.place(relx=0.59, rely=0.14) # creating the radiobuttons for choosing the similarites you want to check, either between music id or artists id or artist and music Frame2 = tk.Frame(Frame) Frame2.place(relx=0.01, rely=0.25) tk.Label(Frame, text='Similarites Between').place(relx=0.01, rely=0.25) self.sim_choosen = tk.IntVar() similarities_opt = [('Musics', 1), ('Artists', 2), ("Artist & Musics", 3)] for similarity, val in similarities_opt: tk.Radiobutton(Frame2, text=similarity, variable=self.sim_choosen, command=self.getter, value=val).pack(side='left', pady=20) # creating the spinbox that would indicate how many no of similarities do want to see.. # this would only work if you are trying to only show the n similarity to an artist or music tk.Label(Frame, text='N:').place(relx=0.58, rely=0.05) self.N = tk.Spinbox(Frame, from_=1, to=100, width=15, state='disabled') self.N.place(relx=0.61, rely=0.05) # creating the calculate button button = tk.Button(Frame, text='Calculate Similarity', width=16, command=lambda: [f() for f in [self.validator2]]) button.place(relx=0.50, rely=0.30) # creating the evalution button self.eval_button = tk.Button(Frame, text='Evaluation', width=10, state='disabled', command=self.evaluate) self.eval_button.place(relx=0.80, rely=0.30) # progress bar self.progress_Bar = ttk.Progressbar(Frame, orient='horizontal', length=495, mode='determinate') self.progress_Bar.place(relx=0.00, rely=0.53) self.tips = tk.Label(Frame, text='Tips!!') self.tips.place(relx=0.45, rely=0.44) # result panel tk.Label(Frame, text='Results').place(relx=0.01, rely=0.62) tk.Label(Frame, text='Similarity Score:').place(relx=0.03, rely=0.72) self.Score = tk.Label(Frame, text='') self.Score.place(relx=0.25, rely=0.72) # creating the text area for displaying results Frame2 = tk.Frame(Frame) Frame2.place(relx=0.50, rely=0.62) h = tk.Scrollbar(Frame2, orient='horizontal') h.pack(side='bottom', fill='x') v = tk.Scrollbar(Frame2) v.pack(side='right', fill='y') self.t = tk.Text(Frame2, width=33, height=7.4, xscrollcommand=h.set, yscrollcommand=v.set, state='normal') self.t.pack(side='top') h.config(command=self.t.xview) v.config(command=self.t.yview)
tk.OptionMenu(root, sv1, 'オプション1', 'オプション2').grid(row=5, column=1, padx=10, pady=10) # Listbox 8 tk.Label(root, text="8: Listbox").grid(row=6, sticky="e") listbox = tk.Listbox(root, height=4) for line in ["選択肢1", "選択肢2", "選択肢3", "選択肢4", "選択肢5"]: listbox.insert(tk.END, line) listbox.select_set(1) listbox.grid(row=6, column=1, padx=10, pady=10) # Spinbox 9 tk.Label(root, text="9: Spinbox").grid(row=0, column=2, sticky="e") tk.Spinbox(root, values=(2, 4, 10)).grid(row=0, column=3, padx=10, pady=10) # Scale 10 tk.Label(root, text="10: Scale").grid(row=1, column=2, sticky="e") tk.Scale(root, from_=10, to=80, label='Scale', orient=tk.HORIZONTAL).grid(row=1, column=3, padx=10, pady=10) # Message 11 tk.Label(root, text="11: Message").grid(row=2, column=2, sticky="e") tk.Message(root, text="私の名前は中村です").grid(row=2, column=3, padx=10, pady=10) # Text 12 tk.Label(root, text="12: Text").grid(row=3, column=2, sticky="e") text = tk.Text(root, width=20, height=6) text.insert(tk.END, "sample text\n1\n2\n3") text.grid(row=3, column=3, padx=10, pady=10)
def fen_inscription(): app.destroy() global fen3 fen3 = tkinter.tix.Tk() fen3.geometry("340x680") fen3.title("Fenetre d'inscription") #------------------------------------------------------------------------------------- lab3_1 = tkinter.Label(fen3, text="Nom") entr3_1 = tkinter.Entry(fen3) lab3_2 = tkinter.Label(fen3, text="Prénom") entr3_2 = tkinter.Entry(fen3) Label_Frame = tkinter.LabelFrame(fen3, text="Date et lieu de naissance", width=100, height=200, borderwidth=1) lab3_3 = tkinter.Label(Label_Frame, text="Jour") spin_w_1 = tkinter.Spinbox(Label_Frame, from_=1, to=31, width=10) lab3_4 = tkinter.Label(Label_Frame, text="Mois") spin_w_2 = tkinter.Spinbox(Label_Frame, from_=1, to=12, width=10) lab3_5 = tkinter.Label(Label_Frame, text="Année") spin_w_3 = tkinter.Spinbox(Label_Frame, from_=1940, to=2019, width=10) lab = tkinter.Label(Label_Frame) """ dernier label du cadre Label_Frame : il joue juste un role de séparation entre la bordure inférieur du cadre et l'avant dernier widget """ lab3_6 = tkinter.Label(fen3, text="Numéro de téléphone") entr3_3 = tkinter.Entry(fen3) lab3_7 = tkinter.Label(fen3, text="Numéro de Carte d'Identité") ent3_4 = tkinter.Entry(fen3) lab3_8 = tkinter.Label(fen3, text="E-mail") ent3_5 = tkinter.Entry(fen3) rad3 = tkinter.Radiobutton(fen3, text="Médecin", value=0) rad4 = tkinter.Radiobutton(fen3, text="Patient", value=1) lab3_9 = tkinter.Label(fen3, text="Specialité") varcombo = tkinter.tix.StringVar() combo = tkinter.tix.ComboBox(fen3, editable=1, dropdown=1, variable=varcombo) combo.entry.config( state='readonly') ## met la zone de texte en lecture seule combo.insert(0, 'Généraliste') combo.insert(1, 'Cardiologue') combo.insert(2, 'Neurologue') combo.insert(3, 'Gynécologue') combo.insert(4, 'Dentiste') combo.insert(5, 'Sages-Femme') combo.insert(6, 'Ophtalmologue') combo.insert(7, 'Urologue') combo.insert(8, 'Dermatologue') combo.insert(9, 'Diététicien') combo.insert(10, 'Allergologue') combo.insert(11, 'Pédiatre') combo.insert(12, 'Radiologue') combo.insert(13, 'Chirurgien') combo.insert(14, 'Ostéopathe') combo.insert(15, 'Prothésiste Dentaire') combo.insert(16, 'Dentiste-Chirurgien Dentiste') combo.insert(17, 'Infirmier-Infirmière') combo.insert(18, 'Orthopédiste') combo.insert(19, 'Pharmacien') combo.insert(20, 'Nutritioniste') combo.insert(21, 'Pédopsychiatre') combo.insert(22, 'Diabétologue') combo.insert(23, 'Oto-Rhino-Laryngologiste') combo.insert(24, 'Pneumologue') combo.insert(25, 'Phytothérapeute') combo.insert(26, 'Kinésithérapeute') combo.insert(27, 'Rhumatologue') combo.insert(28, 'Vétérinaire') combo.insert(29, 'Psychologue') combo.insert(30, 'Sophrologue') combo.insert(31, 'Etiopathe') combo.insert(32, 'Biologiste') combo.insert(33, 'Néphrologue') combo.insert(34, 'Neuro-Chirurgien') combo.insert(35, 'Sexologue') combo.insert(36, 'Médecine Physique et Réadaptation') combo.insert(37, 'Urgentiste-Urgentologue') combo.insert(38, 'Laborantin') Label_Frame1 = tkinter.LabelFrame(fen3, text="Renseignement-Diplome", width=150, height=250, borderwidth=1) lab3_10 = tkinter.Label(Label_Frame1, text="Faculté/Ecole") ent3_6 = tkinter.Entry(Label_Frame1, width=20) lab3_11 = tkinter.Label(Label_Frame1, text="Lieu d'Obtention") ent3_7 = tkinter.Entry(Label_Frame1, width=20) lab3_12 = tkinter.Label(Label_Frame1, text="Diplome Obtenu") # à uploader ... lab3_13 = tkinter.Label(Label_Frame1, text="Année d'Obtention") spin_w_4 = tkinter.Spinbox(Label_Frame1, from_=1970, to=2019, width=10) lab1 = tkinter.Label(Label_Frame1) """ dernier label du cadre Label_Frame : il joue juste un role de séparation entre la bordure inférieur du cadre et l'avant dernier widget """ lab3_14 = tkinter.Label(fen3, text="Nombre d'année d'epérience") spin_w_5 = tkinter.Spinbox(fen3, from_=0, to=40, width=10) btn = tkinter.Button(fen3, text="Enregistrer", command=validation_inscription) #------------------------------------------------------------------------------------- fen3.grid() lab3_1.grid(padx=90, pady=1) entr3_1.grid() lab3_2.grid() entr3_2.grid() Label_Frame.grid() lab3_3.grid(padx=30, pady=1) spin_w_1.grid(padx=30) lab3_4.grid(padx=30) spin_w_2.grid(padx=30) lab3_5.grid(padx=30) spin_w_3.grid(padx=30) lab.grid() lab3_6.grid() entr3_3.grid() lab3_7.grid() ent3_4.grid() lab3_8.grid() ent3_5.grid() rad3.grid() rad4.grid() lab3_9.grid() combo.grid() Label_Frame1.grid() lab3_10.grid(padx=30, pady=1) ent3_6.grid() lab3_11.grid() ent3_7.grid() lab3_12.grid() lab3_13.grid() spin_w_4.grid() lab1.grid() lab3_14.grid() spin_w_5.grid() btn.grid() #------------------------------------------------------------------------------------- fen3.mainloop()
def __init__(self, *args, **kwargs): super().__init__(self, *args, **kwargs) # Create windows object app = tk.Tk() #variables #channelconfig ChannelName = tk.StringVar(value='Krogmann') OAuthToken = tk.StringVar(value='Press Button to get Token') CheckTime = tk.IntVar(value=1) #for Follower alert Alertwhenfollower = tk.IntVar(value=1) FollowerDMXChannel = tk.IntVar(value=1) FollowerDMXValue = tk.IntVar(value=255) FollowerDMXSeconds = tk.IntVar(value=5) FollowerDMXDefault = tk.IntVar(value=0) #for Subscriber alert AlertwhenSubscriber = tk.IntVar(value=1) SubscriberDMXChannel = tk.IntVar(value=1) SubscriberDMXValue = tk.IntVar(value=255) SubscriberDMXSeconds = tk.IntVar(value=5) SubscriberDMXDefault = tk.IntVar(value=0) app.title("Chron-O-John's Twitch DMX Alerts") canvas = tk.Frame(app, padx=10, pady=10) lblUeberschrift = tk.Label(canvas, text="Twitch DMX Alerts", font=('bold', 16), pady=20) frmChannelconfig = tk.Frame(canvas) lblChannelname = tk.Label(frmChannelconfig, text="Channelname") entrChannelname = tk.Entry(frmChannelconfig, textvariable=ChannelName, justify='right') lblOAuthToken = tk.Label(frmChannelconfig, text="OAuth-Token") entrOAuthToken = tk.Entry(frmChannelconfig, textvariable=OAuthToken, justify='right') btnGetToken = tk.Button(frmChannelconfig, text="Get OAuth-Token", command=self.getOAuthToken) lblAlertWhen = tk.Label(canvas, text="Alert:", height=2, anchor='s') frmAlerts = tk.Frame(canvas) #Follower Line frmFollower = tk.Frame(frmAlerts) chkFollower = tk.Checkbutton(frmFollower, text="New Follower to DMX Channel", width=25, anchor='w', variable=Alertwhenfollower) spinFollowerChannel = tk.Spinbox(frmFollower, justify='right', from_=1, to=512, width=3, textvariable=FollowerDMXChannel) lblFollowerDMXValue = tk.Label(frmFollower, text="with value") spinFollowerValue = tk.Spinbox(frmFollower, justify='right', from_=0, to=255, width=3, textvariable=FollowerDMXValue) lblFollowerSeconds = tk.Label(frmFollower, text="for") spinFollowerSeconds = tk.Spinbox(frmFollower, justify='right', from_=0, to=300, width=3, textvariable=FollowerDMXSeconds) lblFollowerDefaultTo = tk.Label(frmFollower, text="seconds, then default to") spinFollowerDefaultTo = tk.Spinbox(frmFollower, justify='right', from_=0, to=255, width=3, textvariable=FollowerDMXDefault) #subscriber line frmSubscriber = tk.Frame(frmAlerts) chkSubscriber = tk.Checkbutton(frmSubscriber, text="New Subscriber to DMX Channel", width=25, anchor='w', variable=AlertwhenSubscriber) spinSubscriberChannel = tk.Spinbox(frmSubscriber, justify='right', from_=1, to=512, width=3, textvariable=SubscriberDMXChannel) lblSubscriberDMXValue = tk.Label(frmSubscriber, text="with value") spinSubscriberValue = tk.Spinbox(frmSubscriber, justify='right', from_=0, to=255, width=3, textvariable=SubscriberDMXValue) lblSubscriberSeconds = tk.Label(frmSubscriber, text="for") spinSubscriberSeconds = tk.Spinbox(frmSubscriber, justify='right', from_=0, to=300, width=3, textvariable=SubscriberDMXSeconds) lblSubscriberDefaultTo = tk.Label(frmSubscriber, text="seconds, then default to") spinSubscriberDefaultTo = tk.Spinbox(frmSubscriber, justify='right', from_=0, to=255, width=3, textvariable=SubscriberDMXDefault) frmCheckTime = tk.Frame(canvas, pady=5) lblChecktime = tk.Label( frmCheckTime, text='Check for new Followers/Subscribery every ') spinCheckTime = tk.Spinbox(frmCheckTime, justify='right', from_=0, to=60, width=2, textvariable=CheckTime) lblCheckTimeAfter = tk.Label(frmCheckTime, text=' seconds') btnSaveConfig = tk.Button( canvas, text="Save all settings") #toDo: addd Command btnDoStuff = tk.Button(canvas, text="Do Stuff", command=self.doStuff) #debugwindow debugList = tk.Listbox(canvas) #pack the stuff canvas.pack() lblUeberschrift.grid(row=10) frmChannelconfig.grid(row=20, sticky='w') lblChannelname.pack(side='left') entrChannelname.pack(side='left') lblOAuthToken.pack(side='left') entrOAuthToken.pack(side='left') btnGetToken.pack(side='left') lblAlertWhen.grid(row=30, sticky='w') frmAlerts.grid(row=40, sticky='w') #follower Line frmFollower.grid(row=0) chkFollower.pack(side='left') spinFollowerChannel.pack(side='left') lblFollowerDMXValue.pack(side='left') spinFollowerValue.pack(side='left') lblFollowerSeconds.pack(side='left') spinFollowerSeconds.pack(side='left') lblFollowerDefaultTo.pack(side='left') spinFollowerDefaultTo.pack(side='left') #subscriber Line frmSubscriber.grid(row=1) chkSubscriber.pack(side='left') spinSubscriberChannel.pack(side='left') lblSubscriberDMXValue.pack(side='left') spinSubscriberValue.pack(side='left') lblSubscriberSeconds.pack(side='left') spinSubscriberSeconds.pack(side='left') lblSubscriberDefaultTo.pack(side='left') spinSubscriberDefaultTo.pack(side='left') #checktime frmCheckTime.grid(row=50, column=0, sticky='w') lblChecktime.pack(side='left') spinCheckTime.pack(side='left') lblCheckTimeAfter.pack(side='left') btnSaveConfig.grid(row=60, column=0, sticky='w') btnDoStuff.grid(row=61, column=0, sticky='w') #debugtext debugList.grid(row=90, sticky=('n', 's', 'e', 'w'))
def display_side_panel(self): side_panel = tk.Frame(self.root) side_panel.pack(side=tk.LEFT, padx=20, pady=20) # Error Frame self.error_frame = tk.Frame(side_panel) self.error_frame.pack(fill=tk.X, pady=10) # Algorithms Frame algorithms_frame = tk.Frame(side_panel) algorithms_frame.pack(fill=tk.X, pady=10) self.create_heading(algorithms_frame, "Algorithms").pack() self.create_button(algorithms_frame, "Exploration", lambda: self.execute_thread(self.exploration)) \ .pack(fill=tk.X) self.create_button(algorithms_frame, "Fastest Path", lambda: self.execute_thread(self.fastest_path)) \ .pack(fill=tk.X) self.create_button(algorithms_frame, "Stop", lambda: self.stop()) \ .pack(fill=tk.X) self.create_button(algorithms_frame, "Reset", lambda: self.execute_thread(self.reset)) \ .pack(fill=tk.X) # Map Select Frame map_select_frame = tk.Frame(side_panel) map_select_frame.pack(fill=tk.X, pady=10) self.create_heading(map_select_frame, "Select Map").pack(fill=tk.X) map_option_strs = list(SimulatorGUI.MAP_OPTIONS.keys()) self.selected_map_str = tk.StringVar() self.selected_map_str.set(map_option_strs[0]) tk.OptionMenu(map_select_frame, self.selected_map_str, *map_option_strs).pack() tk.Label( map_select_frame, text="If custom, please specify MDF strings (separated by a comma)" ).pack() self.mdf_input = tk.Entry(map_select_frame) self.mdf_input.pack(fill=tk.X) self.create_button(map_select_frame, "Load Map", lambda: self.execute_thread(self.load_map))\ .pack(fill=tk.X) # Exploration Frame exploration_frame = tk.Frame(side_panel) exploration_frame.pack(fill=tk.X, pady=10) self.create_heading(exploration_frame, "Exploration").pack(fill=tk.X) self.with_image_rec = tk.IntVar() tk.Checkbutton(exploration_frame, text="Use Image Recognition Algorithm", variable=self.with_image_rec).pack() self.exploration_coverage = tk.StringVar() self.exploration_coverage.set("Coverage: 0%") tk.Label(exploration_frame, textvariable=self.exploration_coverage).pack() self.exploration_time = tk.StringVar() self.exploration_time.set("Time: 00:00") tk.Label(exploration_frame, textvariable=self.exploration_time).pack() tk.Label(exploration_frame, text="Coverage Limit").pack() self.coverage_limit_input = tk.IntVar() self.coverage_limit_input.set(360) tk.Spinbox(exploration_frame, from_=0, to=100, text=self.coverage_limit_input).pack(fill=tk.X) tk.Label(exploration_frame, text="Time Limit").pack() self.time_limit_input = tk.IntVar() self.time_limit_input.set(360) tk.Spinbox(exploration_frame, from_=0, to=360, textvariable=self.time_limit_input).pack(fill=tk.X) # Waypoint Frame waypoint_frame = tk.Frame(side_panel) waypoint_frame.pack(fill=tk.X, pady=10) self.create_heading(waypoint_frame, "Waypoint").pack() self.has_waypoint_input = tk.IntVar() tk.Checkbutton(waypoint_frame, text="Use waypoint", variable=self.has_waypoint_input).pack() tk.Label(waypoint_frame, text="X").pack(side=tk.LEFT) self.waypoint_x_input = tk.IntVar() self.waypoint_x_input.set(GOAL_POS[0]) tk.Spinbox(waypoint_frame, from_=0, to=NUM_COLS - 1, textvariable=self.waypoint_x_input)\ .pack(fill=tk.X, side=tk.LEFT) tk.Label(waypoint_frame, text="Y").pack(side=tk.LEFT) self.waypoint_y_input = tk.IntVar() self.waypoint_y_input.set(GOAL_POS[1]) tk.Spinbox(waypoint_frame, from_=0, to=NUM_ROWS - 1, textvariable=self.waypoint_y_input)\ .pack(fill=tk.X, side=tk.LEFT) # Speed Setting speed_frame = tk.Frame(side_panel) speed_frame.pack(fill=tk.X, pady=10) self.create_heading(speed_frame, "Robot Speed (Moves Per Second)").pack(fill=tk.X) self.robot_speed = tk.IntVar() self.robot_speed.set(5) tk.Spinbox(speed_frame, from_=SimulatorGUI.MIN_SPEED, to=SimulatorGUI.MAX_SPEED, textvariable=self.robot_speed)\ .pack(fill=tk.X) self.create_button(speed_frame, "Update Speed", self.update_speed).pack(fill=tk.X)
app, textvariable=boxvalue1, values=["-Select-", "Muscat", "Mumbai", "Delhi", 'Bangalore']) combobox1.current(0) combobox1.grid(column=6, row=2) #GUI--Adults--Children adult = IntVar() children = IntVar() rawa = 0 rawc = 0 labelhead = Label(app, text='Passengers', background='pink') labelhead.grid(column=4, row=3) label2 = Label(app, text='Adults', background='pink') label2.grid(column=2, row=4) adult = tk.Spinbox(app, from_=0, to=5, increment=1) adult.grid(column=2, row=5) label3 = Label(app, text='Children', background='pink') label3.grid(column=6, row=4) children = tk.Spinbox(app, from_=0, to=5, increment=1) children.grid(column=6, row=5) #GUI -- trip var = IntVar() var1 = IntVar() selection = '' selection1 = '' def sel1(): global selection
def createWidgets(self): top = self.winfo_toplevel() top.rowconfigure(0, weight=1) top.columnconfigure(0, weight=1) self.rowconfigure(0, weight=1) self.columnconfigure(0, weight=1) self.frameMain = ttk.Frame(self) self.frameMain.grid(sticky=tk.N + tk.S + tk.E + tk.W) self.frameMain.columnconfigure(0, weight=1) self.frameMain.rowconfigure(0, weight=1) self.frameMain.rowconfigure(1, pad=15) self.frameTop = ttk.Frame(self.frameMain, padding=5) self.frameTop.grid(column=0, row=0, sticky=tk.N + tk.S + tk.E + tk.W) self.frameTop.columnconfigure(1, weight=1) self.frameTop.rowconfigure(3, weight=1) self.labelSourceFolder = ttk.Label(self.frameTop, text="Source Folder:") self.labelSourceFolder.grid(column=0, row=0, sticky=tk.W, pady=2) self.entrySourceFolder = ttk.Entry(self.frameTop, textvariable=self.sourceFolderValue) self.entrySourceFolder.grid(column=1, row=0, sticky=tk.E + tk.W, pady=2) self.buttonSourceFolder = ttk.Button( self.frameTop, text="...", width="3", command=self.eventSourceFolderClicked) self.buttonSourceFolder.grid(column=2, row=0, pady=2) self.labelReadyFolder = ttk.Label(self.frameTop, text="Ready Folder:") self.labelReadyFolder.grid(column=0, row=1, sticky=tk.W, pady=2) self.entryReadyFolder = ttk.Entry(self.frameTop, textvariable=self.readyFolderValue) self.entryReadyFolder.grid(column=1, row=1, sticky=tk.E + tk.W, pady=2) self.buttonReadyFolder = ttk.Button( self.frameTop, text="...", width="3", command=self.eventReadyFolderClicked) self.buttonReadyFolder.grid(column=2, row=1, pady=2) self.labelDesiredSize = ttk.Label(self.frameTop, text="Desired Size:") self.labelDesiredSize.grid(column=0, row=2, sticky=tk.W, pady=2) self.spinboxDesiredSize = tk.Spinbox( self.frameTop, textvariable=self.desiredSizeValue, from_=PICTURE_SIZE_MIN, to=PICTURE_SIZE_MAX, width=6) self.spinboxDesiredSize.grid(column=1, row=2, sticky=tk.W, pady=2) self.frameSeparator = ttk.Frame(self.frameMain, padding=5) self.frameSeparator.grid(column=0, row=2, sticky=tk.N + tk.S + tk.E + tk.W) self.frameSeparator.columnconfigure(0, weight=1) self.separatorBottom = ttk.Separator(self.frameSeparator, orient=tk.HORIZONTAL) self.separatorBottom.grid(column=0, row=0, sticky=tk.W + tk.E) self.frameBotom = ttk.Frame(self.frameMain, padding=5) self.frameBotom.grid(column=0, row=3, sticky=tk.N + tk.S + tk.E + tk.W) self.frameBotom.columnconfigure(0, weight=1) self.buttonProceed = ttk.Button(self.frameBotom, text='Proceed', command=self.eventProceedClicked) self.buttonProceed.grid(column=0, row=0, sticky=tk.E) self.buttonClose = ttk.Button(self.frameBotom, text='Close', command=self.quit) self.buttonClose.grid(column=1, row=0, sticky=tk.E) self.frameProgress = ttk.Frame(self.frameMain, padding=3) self.frameProgress.grid(column=0, row=4, sticky=tk.N + tk.S + tk.E + tk.W) self.frameProgress.columnconfigure(0, weight=1) self.labelProgress = ttk.Label(self.frameProgress, borderwidth=1, relief=tk.SUNKEN, textvariable=self.processValue) self.labelProgress.grid(column=0, row=0, sticky=tk.E + tk.W) self.update()
def __init__(self): #**** Variables ****************************************************************************************************************************************** self.root = tk.Tk() #Colour Storage self.LIGHT_BLUE = "#CAF0F4" self.BLUE = "#7DC6CD" self.DARK_BLUE = "#415EAE" self.BEIGE = "#FFEBC0" self.LIGHT_BEIGE = "#FFF4DD" self.BLACK = "#08090A" self.LIGHT_GRAY = "#44444A" self.GRAY = "#383838" self.DARK_GRAY = "#212121" self.PURPLE = "#86229E" self.DARK_PURPLE = "#3C0F47" self.ORANGE = "#D66D10" self.DARK_ORANGE = "#613107" #GUI Visual Settings and Layout Config self.titleFont = tkFont.Font(family="Times", size=22, weight="bold", underline=0) self.guiLblFont = tkFont.Font(family="Helvitica", size=13, weight="normal") self.guiFrameFont = tkFont.Font(family="Helvitica", size=13, weight="bold") self.guiOutTxtFont = tkFont.Font(family="Helvitica", size=13, weight="normal") self.bttnFont = tkFont.Font(family="Helvitica", size=17, weight="bold") #Program Information self.title = "STORY GENERATOR" self.version = "1.0" self.DEVELOPER = "William Trojniak" self.YEAR = "2018" self.windowTitle = self.title + " V." + self.version + " ~" + self.DEVELOPER + " " + self.YEAR #Initial Colour Scheme self.frameBgrndClr = self.BLUE self.lblBgrndClr = self.BLUE self.entrBgrndClr = self.LIGHT_BLUE self.windowBgrndClr = self.LIGHT_BEIGE self.titleBgrndClr = self.BEIGE self.titleFntClr = self.DARK_BLUE self.lblFntClr = self.BLACK self.entrFntClr = self.BLACK self.entrTempFntClr = self.LIGHT_GRAY #Widget Padding self.framePadY = 1 self.framePadX = 5 self.entrPadX = 1 self.entrPadY = 1 self.frameExtPadX = 10 self.frameExtPadY = 5 self.bttnPadX = 10 self.bttnPadY = 5 self.titlePadY = 10 self.oMenuPadX = 1 self.oMenuPadY = 1 #Output textbox dimensions self.outTxtH = 25 self.outTxtW = 70 #Spin box sizes self.fontSpBxWidth = 3 self.trialCntSpBxWidth = 5 #OMenuSize self.oMenuWidth = 20 #Widget Storage Variables self.frameLs = [] self.entryLs = [] self.labelLs = [] self.spBxLs = [] self.oMenuLs = [] self.cBttnLs = [] self.rBttnLs = [] self.bttnLs = [] self.txtLs = [] self.dynamicTrialEntries = [[]] #Widget Value Variables self.enableHighContrast = tk.IntVar() self.maxFontSize = 16 self.minFontSize = 13 self.genre = tk.StringVar() self.genre.set("Select Option") self.genreOptions = ["Action", "Fantasy"] self.heroGender = tk.StringVar() self.maxTrials = 3 self.minTrials = 1 #Saved stories self.SAVEDSTORIESDOC = "savedStories.txt" f = open(self.SAVEDSTORIESDOC, "a+") f.close() f = open(self.SAVEDSTORIESDOC, "r") self.savedStories = f.read().splitlines() f.close() #print(self.savedStories) self.savedStoryCntr = len(self.savedStories) #Text to speech self.txtToSpeechRead = 1 #1 = Labels, -1 = Generated Story self.txtToSpeechSntnce = "Welcome to Story Generator. This program was developed by William Trojniak. The text to speech button switches between reading the labels and the generated story. Story Generator. Story Settings. Select Genre. Starting Place. Hero's Characteristics. Hero's Name. Hero's gender. Hero's strengths. Mentor's Characteristics. Mentor's Name. Mentor's gift. Trials Information. Number of trials. Trial Location. Trial. Final Challenge Information. Final Challenge Location. Final Challenge. End Story. Method of getting home. Result of story. Generate Story. Save" #***String Storage For Story Generation******************************************************************************************************************* #General self.mntrTrialIntroSntnce = [ "\"The road ahead will be dangerous, no doubt,\" said ", "\" You will face many dangers before this though,\" said " ] self.mntrFirstTrialDescriptionSntnce = [ "\"You will first have to go to ", "\"The first place to which you must journey is to " ] self.mntr23TrialDescriptionSntnce = [ "\"You must then journey to ", "\"The next place that you must journey to is to " ] self.heroDestinySntnce = [ " where you must ", " where you will ", " where it is destined that you " ] self.heroReluctanceSntnce = [ "\"I accept the tasks that you have laid before me, even if it is with some reluctance,\" responded, ", "\"Though I do not like to think of the troubles ahead, I accept your tasks,\" replied " ] self.mntrFChllngeIntroSntnce = [ "\"Only then, after you have proven worth, will you travel to ", "\"With this, you are to travel to " ] self.mntrGiftGivingSntnce = [ "\"It is as I had hoped. Then I give to you ", "\"Very well, then I give to you " ] self.mntrGiftAidSntnce = [ ". May it serve you well on your journey.\" ", ". It will come in use yet.\" " ] self.heroDepartSntnce = [ "So our hero left ", "And so our hero departed from " ] #Fantasy self.fntsyStrtSntnce = [ "Once upon a time, in a place known as", "Some time ago, in" ] self.fntsyHeroIntroSntnce = [ "there was an elf by the name of", "there was a dwarf by the name of", "there was a knight by the name of" ] self.fntsyMentorIntroSntnce = [ "On a peculiar night, when the stars aligned just so,", "On a certain morn" ] #Action self.actnStrtSntnce = [ " There once was a place known as", "Once, in the land known as" ] self.actnHeroIntroSntnce = [ "there was a warrior by the name of", "there was an adventurer by the name of", "there was a spy by the name of" ] self.actnMentorIntroSntnce = [ "One morning, ", "Walking in the streets one day," ] #**** Window 1 time Configuration ****************************************************************************************************************************************** self.root.title(self.windowTitle) #**** Widgets ****************************************************************************************************************************************** #Title self.titleLabel = tk.Label(self.root) self.titleLabel.grid(row=0, column=0, columnspan=3, sticky="NESW", pady=self.titlePadY) #Story Settings Frame self.storyFrame = tk.LabelFrame(self.root, text="Story Settings") self.genreLbl = tk.Label(self.storyFrame, text="Select Genre") self.strtPlaceLbl = tk.Label(self.storyFrame, text="Starting Place") self.genreOMenu = tk.OptionMenu(self.storyFrame, self.genre, self.genreOptions[0], self.genreOptions[1]) self.strtPlaceEntr = tk.Entry(self.storyFrame) #************ PACKING WIDGETS *****************************************# self.storyFrame.grid(row=1, column=0, padx=self.frameExtPadX, pady=self.frameExtPadY) self.genreLbl.grid(row=0, column=0) self.strtPlaceLbl.grid(row=0, column=1) self.genreOMenu.grid(row=1, column=0, padx=self.oMenuPadX, pady=self.oMenuPadY) self.strtPlaceEntr.grid(row=1, column=1, padx=self.entrPadX, pady=self.entrPadY) #Hero's Characteristics Frame self.heroFrame = tk.LabelFrame(self.root, text="Hero's Characteristics") self.heroNmLbl = tk.Label(self.heroFrame, text="Hero's Name") self.heroNmEntr = tk.Entry(self.heroFrame) self.heroGenderLbl = tk.Label(self.heroFrame, text="Hero's Gender") self.heroStrngthLbl = tk.Label(self.heroFrame, text="Hero's Strengths") self.heroGenderMRBttn = tk.Radiobutton(self.heroFrame, text="Male", variable=self.heroGender, value="male") self.heroGenderFRBttn = tk.Radiobutton(self.heroFrame, text="Female", variable=self.heroGender, value="female") self.heroStrngthEntr1 = tk.Entry(self.heroFrame) self.heroStrngthEntr2 = tk.Entry(self.heroFrame) self.heroStrngthEntr3 = tk.Entry(self.heroFrame) #************ PACKING WIDGETS *****************************************# self.heroFrame.grid(row=2, column=0, padx=self.frameExtPadX, pady=self.frameExtPadY) self.heroNmLbl.grid(row=0, column=0, columnspan=2) self.heroNmEntr.grid(row=1, column=0, columnspan=2, padx=self.entrPadX, pady=self.entrPadY) self.heroGenderLbl.grid(row=2, column=0, columnspan=2) self.heroStrngthLbl.grid(row=0, column=2, columnspan=2) self.heroGenderMRBttn.grid(row=3, column=0) self.heroGenderFRBttn.grid(row=3, column=1) self.heroStrngthEntr1.grid(row=1, column=2, padx=self.entrPadX, pady=self.entrPadY) self.heroStrngthEntr2.grid(row=2, column=2, padx=self.entrPadX, pady=self.entrPadY) self.heroStrngthEntr3.grid(row=3, column=2, padx=self.entrPadX, pady=self.entrPadY) #Mentor's Characteristics Frame self.mntrFrame = tk.LabelFrame(self.root, text="Mentor's Characteristics") self.mntrNmLbl = tk.Label(self.mntrFrame, text="Mentor's Name") self.mntrNmEntr = tk.Entry(self.mntrFrame) self.mntrGftLbl = tk.Label(self.mntrFrame, text="Mentor's Gift") self.mntrGftEntr = tk.Entry(self.mntrFrame) #************ PACKING WIDGETS *****************************************# self.mntrFrame.grid(row=3, column=0, padx=self.frameExtPadX, pady=self.frameExtPadY) self.mntrNmLbl.grid(row=0, column=0) self.mntrNmEntr.grid(row=1, column=0, padx=self.entrPadX, pady=self.entrPadY) self.mntrGftLbl.grid(row=0, column=1) self.mntrGftEntr.grid(row=1, column=1, padx=self.entrPadX, pady=self.entrPadY) #Trials Information self.trialFrame = tk.LabelFrame(self.root, text="Trials Information") self.trialCntLbl = tk.Label(self.trialFrame, text="Number of Trials") self.trialCntSpBx = tk.Spinbox(self.trialFrame, width=self.trialCntSpBxWidth, command=self.trialsUpdated, from_=self.minTrials, to=self.maxTrials) self.trialLocLbl = tk.Label(self.trialFrame, text="Location of Trial") self.trialLocEntr = tk.Entry(self.trialFrame) self.trialNmLbl = tk.Label(self.trialFrame, text="Trial") self.trialNmEntr = tk.Entry(self.trialFrame) self.dynamicTrialEntries[0].append(self.trialLocEntr) self.dynamicTrialEntries[0].append(self.trialNmEntr) #************ PACKING WIDGETS *****************************************# self.trialFrame.grid(row=4, column=0, padx=self.frameExtPadX, pady=self.frameExtPadY) self.trialCntLbl.grid(row=0, column=1, columnspan=2) self.trialCntSpBx.grid(row=1, column=1, columnspan=2, padx=self.entrPadX, pady=self.entrPadY) self.trialLocLbl.grid(row=2, column=0, columnspan=2) self.trialLocEntr.grid(row=3, column=0, columnspan=2, padx=self.entrPadX, pady=self.entrPadY) self.trialNmLbl.grid(row=2, column=2, columnspan=2) self.trialNmEntr.grid(row=3, column=2, columnspan=3, padx=self.entrPadX, pady=self.entrPadY) #Final Challenge Information self.fChllngeFrame = tk.LabelFrame(self.root, text="Final Challenge Information") self.fChllngeLocLbl = tk.Label(self.fChllngeFrame, text="Location of Final Challenge") self.fChllngeLocEntr = tk.Entry(self.fChllngeFrame) self.fChllngeNmLbl = tk.Label(self.fChllngeFrame, text="Final Challenge") self.fChllngeNmEntr = tk.Entry(self.fChllngeFrame) #************ PACKING WIDGETS *****************************************# self.fChllngeFrame.grid(row=5, column=0, padx=self.frameExtPadX, pady=self.frameExtPadY) self.fChllngeLocLbl.grid(row=0, column=0) self.fChllngeLocEntr.grid(row=1, column=0, padx=self.entrPadX, pady=self.entrPadY) self.fChllngeNmLbl.grid(row=0, column=1) self.fChllngeNmEntr.grid(row=1, column=1, padx=self.entrPadX, pady=self.entrPadY) #End Stage Information self.endFrame = tk.LabelFrame(self.root, text="End Story") self.trnsprtHmLbl = tk.Label(self.endFrame, text="Method of Getting Home") self.trnsprtHmEntr = tk.Entry(self.endFrame) self.rsltLbl = tk.Label(self.endFrame, text="Result of Story") self.rsltEntr = tk.Entry(self.endFrame) #************ PACKING WIDGETS *****************************************# self.endFrame.grid(row=6, column=0, padx=self.frameExtPadX, pady=self.frameExtPadY) self.trnsprtHmLbl.grid(row=0, column=0) self.trnsprtHmEntr.grid(row=1, column=0, padx=self.entrPadX, pady=self.entrPadY) self.rsltLbl.grid(row=0, column=1) self.rsltEntr.grid(row=1, column=1, padx=self.entrPadX, pady=self.entrPadY) #Accessibility Frame self.accFrame = tk.LabelFrame(self.root, text="Accessibility") self.hCLbl = tk.Label(self.accFrame, text="High Contrast") self.hCCBox = tk.Checkbutton(self.accFrame, text="ON/OFF", variable=self.enableHighContrast, command=self.changeHighContrast) self.fntSizeLbl = tk.Label(self.accFrame, text="Font Size") self.fntSizeSpBx = tk.Spinbox(self.accFrame, command=self.fontSizeUpdated, from_=self.minFontSize, to=self.maxFontSize, width=self.fontSpBxWidth) self.playTxtToSpchBttn = tk.Button(self.accFrame, text="Play Text to Speech", font=self.guiLblFont, command=self.handleTextToSpeech) #************ PACKING WIDGETS *****************************************# self.accFrame.grid(row=1, column=2, padx=self.frameExtPadX, pady=self.frameExtPadY, sticky="E") self.hCLbl.grid(row=0, column=0) self.hCCBox.grid(row=1, column=0) self.fntSizeLbl.grid(row=0, column=1) self.fntSizeSpBx.grid(row=1, column=1) self.playTxtToSpchBttn.grid(row=2, column=0, columnspan=2) #Buttons and Output Text Frame self.outFrame = tk.LabelFrame(self.root) self.genStoryBttn = tk.Button(self.outFrame, text="Generate Story", command=self.genStory) self.txtScroll = tk.Scrollbar(self.outFrame) self.outTxt = tk.Text(self.outFrame, height=self.outTxtH, width=self.outTxtW, yscrollcommand=self.txtScroll.set) self.saveBttn = tk.Button(self.outFrame, text="Save", command=self.saveStory) self.txtScroll.config(command=self.outTxt.yview) self.savedStoryScroll = tk.Scrollbar(self.outFrame) self.savedStoryLsBox = tk.Listbox( self.outFrame, height=3, yscrollcommand=self.savedStoryScroll.set) self.savedStoryScroll.config(command=self.savedStoryLsBox.yview) self.savedStoryLsBox.bind("<Double-Button-1>", self.loadStory) #************ PACKING WIDGETS *****************************************# self.outFrame.grid(row=2, column=1, rowspan=5, columnspan=2, padx=self.frameExtPadX, pady=self.frameExtPadY) self.genStoryBttn.grid(row=0, column=0, columnspan=3, padx=self.bttnPadX, pady=self.bttnPadY) self.outTxt.grid(row=1, column=0, columnspan=3) self.saveBttn.grid(row=2, column=0, padx=self.bttnPadX, pady=self.bttnPadY) self.txtScroll.grid(row=1, column=3, sticky="NS") self.savedStoryLsBox.grid(row=2, column=1, pady=5, padx=self.entrPadX, sticky="NES") self.savedStoryScroll.grid(row=2, column=2, sticky="NWS", pady=5) for i in range( len(self.savedStories) ): #Inserts previously saved stories into the listbox upon launch self.savedStoryLsBox.insert(tk.END, self.savedStories[i]) #Storing Widgets by Types in Lists for Configuration self.frameLs.extend([ self.storyFrame, self.heroFrame, self.mntrFrame, self.trialFrame, self.fChllngeFrame, self.endFrame, self.outFrame, self.accFrame ]) self.labelLs.extend([ self.genreLbl, self.strtPlaceLbl, self.heroNmLbl, self.heroStrngthLbl, self.heroGenderLbl, self.mntrNmLbl, self.mntrGftLbl, self.trialCntLbl, self.trialLocLbl, self.trialNmLbl, self.fChllngeLocLbl, self.fChllngeNmLbl, self.trnsprtHmLbl, self.rsltLbl, self.hCLbl, self.fntSizeLbl ]) self.entryLs.extend([ self.strtPlaceEntr, self.heroNmEntr, self.heroStrngthEntr1, self.heroStrngthEntr2, self.heroStrngthEntr3, self.mntrNmEntr, self.mntrGftEntr, self.fChllngeLocEntr, self.fChllngeNmEntr, self.trnsprtHmEntr, self.rsltEntr ]) self.oMenuLs.extend([self.genreOMenu]) self.cBttnLs.extend([self.hCCBox]) self.rBttnLs.extend([self.heroGenderMRBttn, self.heroGenderFRBttn]) self.spBxLs.extend([self.trialCntSpBx, self.fntSizeSpBx]) self.bttnLs.extend([ self.genStoryBttn, self.saveBttn ]) #Excluded txt to speach button as doesn't use the same font self.txtLs.extend([self.outTxt]) #Calls configWidgets to apply default configurations self.configWidgets() #Step 3: Initialize window self.root.mainloop()
def create_widgets(self): PADX_LG = (15, 15) PADY_SM, PADY_LG, PADY_LLG = (5, 0), (10, 0), (20, 0) PADY_SM_E, PADY_LG_E, PADY_LLG_E = (5, 5), (10, 10), (20, 20) # make frame resizable self.rowconfigure(0, weight=1) self.columnconfigure(0, weight=1) # frame for selecting tx.in(s) row1 = ttk.LabelFrame(self, text='Select tx.in(s) for merging') IROW_PATH, IROW_FILTER, IROW_LABEL, IROW_BOX = 0, 1, 2, 3 row1.columnconfigure(0, weight=1) row1.columnconfigure(2, weight=1) row1.rowconfigure(IROW_BOX, weight=1) row1.grid(column=0, padx=PADX_LG, pady=PADY_LG, sticky='nswe') # set search path path_area = ttk.Frame(row1) path_area.grid(row=IROW_PATH, column=0, columnspan=3, pady=PADY_SM, sticky='nswe') path_area.columnconfigure(1, weight=1) ttk.Label(path_area, text='Search tx.in(s) from: ').grid(row=0, column=0, sticky='nsw') ttk.Entry(path_area, textvariable=self.search_path).grid(row=0, column=1, sticky='nswe') ttk.Button(path_area, text='Change', command=self.change_search_path)\ .grid(row=0, column=2, padx=5, sticky='nse') # filter filter_area = ttk.Frame(row1) filter_area.grid(row=IROW_FILTER, column=0, pady=PADY_SM, sticky='nswe') filter_area.columnconfigure(1, weight=1) ttk.Label(filter_area, text='Filter: ').grid(row=0, column=0, sticky='nsw') self.combo_filter = ttk.Combobox(filter_area, width=10, values=tuple(), textvariable=self.filter_str) self.combo_filter.grid(row=0, column=1, sticky='nswe') self.combo_filter.bind('<Return>', self.filter_txin) ttk.Button(filter_area, text='OK', width=5, command=self.filter_txin)\ .grid(row=0, column=2, sticky='nsw') # left listbox: tx.in(s) for selecting ttk.Label(row1, text='All tx.in(s) available: ')\ .grid(row=IROW_LABEL, column=0, pady=PADY_SM ,sticky='nsw') left_part = ttk.Frame(row1) left_part.rowconfigure(0, weight=1) left_part.columnconfigure(0, weight=1) left_part.grid(row=IROW_BOX, column=0, pady=PADY_SM_E, sticky='nswe') self.left_box = tk.Listbox(left_part, selectmode=tk.EXTENDED) y_scroll1 = tk.Scrollbar(left_part, orient=tk.VERTICAL, command=self.left_box.yview) y_scroll1.grid(row=0, column=1, sticky='ns') self.left_box['yscrollcommand'] = y_scroll1.set self.left_box.grid(row=0, column=0, sticky='nswe') # right listbox: selected tx.in(s) ttk.Label(row1, text='Selected tx.in(s): ')\ .grid(row=IROW_LABEL, column=2, pady=PADY_SM ,sticky='nsw') right_part = ttk.Frame(row1) right_part.rowconfigure(0, weight=1) right_part.columnconfigure(0, weight=1) right_part.grid(row=IROW_BOX, column=2, pady=PADY_SM_E, sticky='nswe') self.right_box = tk.Listbox(right_part, selectmode=tk.EXTENDED) y_scroll2 = tk.Scrollbar(right_part, orient=tk.VERTICAL, command=self.right_box.yview) y_scroll2.grid(row=0, column=1, sticky='ns') self.right_box['yscrollcommand'] = y_scroll2.set self.right_box.grid(row=0, column=0, sticky='nswe') #select button between left and right listbox mid_part = ttk.Frame(row1) mid_part.rowconfigure(0, weight=1) mid_part.rowconfigure(1, weight=1) mid_part.grid(row=IROW_BOX, column=1, padx=10, pady=PADY_SM_E, sticky='ns') ttk.Button(mid_part, text='Add >>', command=self.add_txins).grid(pady=8, sticky=tk.S) ttk.Button(mid_part, text='Drop <<', command=self.rm_txins).grid(pady=8, sticky=tk.N) # frame for merging selected tx.in(s) row2 = ttk.LabelFrame(self, text='Merge selected tx.in(s)') row2.columnconfigure(0, weight=1) row2.grid(column=0, padx=PADX_LG, pady=PADY_LG, sticky='nswe') # set target ray-group number row2_1 = ttk.Frame(row2) row2_1.grid(column=0, pady=PADY_SM, sticky='nswe') row2_1.columnconfigure(1, weight=1) ttk.Checkbutton( row2_1, text= 'Reset ray-group number. If disabled, will keep the original ray-group number defined in source tx.in(s).', variable=self.enable_ray_number, command=self.toggle_ray_number, ).grid(row=0, column=0, columnspan=2, sticky='nsw') self.ray_number_label = ttk.Label(row2_1, text=' Target ray-group number: ') self.ray_number_label.grid(row=1, column=0, sticky='nsw') self.ray_number_box = tk.Spinbox(row2_1, state='readonly', from_=1, to=1e3, increment=1, width=4, textvariable=self.ray_number) self.ray_number_box.grid(row=1, column=1, sticky='nsw') # set path for target tx.in file row2_2 = ttk.Frame(row2) row2_2.grid(column=0, pady=PADY_SM_E, sticky='nswe') row2_2.columnconfigure(1, weight=1) ttk.Label(row2_2, text='Save to: ').grid(row=0, column=0, sticky='nsw') entry = ttk.Entry(row2_2, textvariable=self.save_path) entry.grid(row=0, column=1, sticky='nswe') entry.bind('<Return>', self.handle_ok) ttk.Button(row2_2, text='Select', command=self.select_save_path)\ .grid(row=0, column=2, sticky='nse') # command buttons row_cmd = ttk.Frame(self) row_cmd.rowconfigure(0, weight=1) row_cmd.columnconfigure(0, weight=1) row_cmd.grid(column=0, padx=PADX_LG, pady=PADY_LLG_E, sticky='nswe') ttk.Button(row_cmd, text='OK', command=self.handle_ok).grid(row=0, column=0)
import tkinter window = tkinter.Tk() window.title("Welcome to MAKERDEMY") spin = tkinter.Spinbox(window, from_=0, to=100, width=5) spin.grid (column=0, row=2) window.mainloop()
def createWindow(self): # Upper center window x = (self.winfo_screenwidth() / 2) - 100 y = (self.winfo_screenheight() / 3) - 45 self.geometry('+%d+%d' % (x, y)) # Set min/max sizing for resizing self.minsize(width=400, height=130) self.maxsize(width=2400, height=130) windowcolor = 'grey90' self.configure(background=windowcolor) # Frame 1 self.frame1 = tk.Frame(self, background=windowcolor) self.inputlabelValue = tk.StringVar(value='Input:') self.inputlabel = ttk.Label(self.frame1, textvariable=self.inputlabelValue, justify='left', anchor='w', font=('Helvetica', 16), width=10, background=windowcolor) self.inputlabel.pack(fill=tk.X, expand=True) self.frame1.pack(fill=tk.X, expand=True, padx=5, pady=5) # Frame 2 self.frame2 = tk.Frame(self, background=windowcolor) self.input = tk.StringVar() self.inputfield = tk.Spinbox(self.master, textvariable=self.input, from_=0, to=100, font=('Helvetica', 16), background='white') self.inputfield.pack(fill=tk.X, expand=True) self.frame2.pack(fill=tk.X, expand=True, padx=5) # Frame 3 self.frame3 = tk.Frame(self, background=windowcolor) self.button2 = tk.Button(self.frame3, text='Cancel', justify='center', anchor='ne', highlightbackground=windowcolor, command=self.buttonCancel) self.button2.pack(side=tk.RIGHT) self.button1 = tk.Button(self.frame3, text='OK', justify='center', anchor='ne', highlightbackground=windowcolor, command=self.buttonOK) self.button1.pack(side=tk.RIGHT) self.frame3.pack(fill=tk.X, expand=True, padx=5) # Try to set window focus try: from Cocoa import NSRunningApplication, NSApplicationActivateIgnoringOtherApps except ImportError as err: print(err) print('pip3 install pyobjc') sys.exit() app = NSRunningApplication.runningApplicationWithProcessIdentifier_( os.getpid()) app.activateWithOptions_(NSApplicationActivateIgnoringOtherApps)
langs = ( "Assembler", "Basic", "Brainfuck", "C", "C++", "Java", "Julia", "Perl", "Python", ) spinbox = tkinter.Spinbox(root, values=langs, width=10, textvariable=selected_lang, wrap=True) showButton = ttk.Button(root, text="Show var", command=lambda: print(selected_lang.get())) quitButton = ttk.Button(root, text="Exit", command=exit) spinbox.grid(column=1, row=1) showButton.grid(column=1, row=2) quitButton.grid(column=2, row=2) root.mainloop()
def __init__(self, parent, X, Y, pp): cb_kwargs = dict(onvalue=True, offvalue=False) frame_kwargs = dict(padx=2, pady=2) self.frame = tkinter.ttk.Frame(parent) self.frame.grid(sticky="nswe") #pack(expand=True, fill='both') display_param_label = tk.Label(self.frame, text='Display parameters', font=('', '16', 'bold')) self.main_frame = tkinter.ttk.LabelFrame( self.frame, labelwidget=display_param_label) self.main_frame.pack(expand=True, fill='both') self.main_frame.grid_columnconfigure(0, weight=1) self.X = X self.Y = Y self.pp = pp # ---------------------------------------------------- TITLE --------------------------------------------------- title_frame = tkinter.ttk.Frame(self.main_frame) title_frame.pack(expand=True, fill='x', **frame_kwargs) title_frame.grid_columnconfigure(0, weight=1) self.title_var = tk.StringVar(value=pp.title) tkinter.ttk.Label(title_frame, text='Title ').pack(side='left') tkinter.ttk.Entry(title_frame, textvariable=self.title_var, width=50).pack(side='left', expand=True, fill='x') # -------------------------------------------------- FONTSIZE -------------------------------------------------- # Title fontsize fontsize_frame = tkinter.ttk.Frame(self.main_frame) fontsize_frame.pack(**frame_kwargs) fontsize_frame.grid_columnconfigure(0, weight=1) self.fontsize_var = tk.IntVar(value=pp.fontsize) self.title_fontsize_var = tk.IntVar(value=pp.title_fontsize) tkinter.ttk.Label(fontsize_frame, text='Title fontsize ').grid(row=0, column=0) tk.Spinbox(fontsize_frame, textvariable=self.title_fontsize_var, width=3, from_=10, to=100).grid(row=0, column=1) tkinter.ttk.Label(fontsize_frame, text='General fontsize ').grid(row=0, column=2) tk.Spinbox(fontsize_frame, textvariable=self.fontsize_var, width=3, from_=10, to=100).grid(row=0, column=3) # --------------------------------------------------- LEGEND --------------------------------------------------- legend_frame = tkinter.ttk.Frame(self.main_frame) legend_frame.pack(**frame_kwargs) legend_frame.grid_columnconfigure(0, weight=1) self.legend_var = tk.BooleanVar(value=pp.display_legends) self.lfontsize_var = tk.IntVar(value=pp.l_fontsize) tkinter.ttk.Checkbutton(legend_frame, text='Display legend ', variable=self.legend_var, **cb_kwargs).pack(side='left') tkinter.ttk.Label(legend_frame, text='Legend fontsize').pack(side='left') tk.Spinbox(legend_frame, textvariable=self.lfontsize_var, width=3, from_=10, to=100).pack(side='left') # ---------------------------------------------------- GRID ---------------------------------------------------- self.grid_var = tk.BooleanVar(value=pp.grid) tkinter.ttk.Checkbutton(self.main_frame, text='Show grid ', variable=self.grid_var).pack() # --------------------------------------------------- X-AXIS --------------------------------------------------- x_frame_label = tkinter.ttk.Label(self.frame, text=X + ' axis', font='-weight bold') x_frame = tkinter.ttk.LabelFrame(self.main_frame, labelwidget=x_frame_label) x_frame.pack(expand=True, fill='x', **frame_kwargs) x_frame.grid_columnconfigure(1, weight=1) # xlabel self.xlabel_var = tk.StringVar(value=pp.x_label) tkinter.ttk.Label(x_frame, text=X + ' axis label ').grid(row=0, column=0) tkinter.ttk.Entry(x_frame, textvariable=self.xlabel_var).grid(row=0, column=1, sticky='we') # X limits self.xlim_frame = RangeFrame(x_frame, pp.xmin, pp.xmax, X + ' range', width=5) self.xlim_frame.grid(row=1, column=0, columnspan=2) # X-ticks self.xticks_var = tk.BooleanVar(value=pp.xticks_var) tkinter.ttk.Checkbutton(x_frame, text='Display ' + X + ' axis ticks', variable=self.xticks_var, **cb_kwargs).grid(row=2, column=0, columnspan=2, sticky='w') # X-ticks labels self.xticklabels_var = tk.BooleanVar(value=pp.xticklabels_var) tkinter.ttk.Checkbutton(x_frame, text='Display ' + X + ' ticks labels', variable=self.xticklabels_var, **cb_kwargs).grid(row=3, column=0, columnspan=2, sticky='w') # --------------------------------------------------- Y-AXIS --------------------------------------------------- y_frame_label = tkinter.ttk.Label(self.frame, text=Y + ' axis', font='-weight bold') y_frame = tkinter.ttk.LabelFrame(self.main_frame, labelwidget=y_frame_label) y_frame.pack(expand=True, fill='x', **frame_kwargs) y_frame.grid_columnconfigure(1, weight=1) # ylabel self.ylabel_var = tk.StringVar(value=pp.y_label) tkinter.ttk.Label(y_frame, text=Y + ' axis label ').grid(row=0, column=0) tkinter.ttk.Entry(y_frame, textvariable=self.ylabel_var).grid(row=0, column=1, sticky='we') # Y limits self.ylim_frame = RangeFrame(y_frame, pp.ymin, pp.ymax, Y + ' range', width=5) self.ylim_frame.grid(row=1, column=0, columnspan=2) # Y-ticks self.yticks_var = tk.BooleanVar(value=pp.yticks_var) tkinter.ttk.Checkbutton(y_frame, text='Display ' + Y + ' ticks', variable=self.yticks_var, **cb_kwargs).grid(row=2, column=0, columnspan=2, sticky='w') # Y-ticks labels self.yticklabels_var = tk.BooleanVar(value=pp.yticks_var) tkinter.ttk.Checkbutton(y_frame, text='Display ' + Y + ' ticks labels', variable=self.yticklabels_var, **cb_kwargs).grid(row=3, column=0, columnspan=2, sticky='w')
import tkinter as tk root = tk.Tk() tk.Spinbox(root, from_=0, to=10, wrap=True).pack() tk.Label(root, text='Label', bg='red').pack() tk.Entry(root, bg='red', state=tk.DISABLED).pack() tk.Button(root, text='Label', fg='blue').pack() tk.Label(root, text="FLAT", relief=tk.FLAT).pack() tk.Label(root, text="RAISED", relief=tk.RAISED).pack() tk.Label(root, text="SUNKEN", relief=tk.SUNKEN).pack() tk.Label(root, text="GROOVE", relief=tk.GROOVE).pack() tk.Label(root, text="RIDGE", relief=tk.RIDGE).pack() root.mainloop()
text0 = tk.Text(frame, height=1.5, width=20, wrap=tk.WORD) text0.pack(padx=2, pady=2, expand=True) but0 = tk.Button(frame, text='Начать тестирование', bg=cbut, fg=cwhite, bd=3) but0.bind("<ButtonRelease-1>", ans1) but0.pack(padx=5, pady=5, expand=True) #start Блок 1 вопроса label1_1 = tk.Label( frame, text='Вопрос №1\nТекст вопроса\n\nВариант 1\nВариант 2\nВариант 3\n', fg=cblack, bg=cframe, font=('Times', 14, 'bold')) spin1q = tk.Spinbox(frame, width=10, values=('Вариант 1', 'Вариант 2', 'Вариант 3'), bg=cframe, font=('Times', 10, 'bold')) but1answ = tk.Button(frame, text='Ответить на вопрос №1\n( правильный 2)', bg=cbut, fg=cwhite, bd=3) but1answ.bind("<ButtonRelease-1>", ans1_2) label1_2 = tk.Label(frame, text='Проверка ответа', width=12, height=2, bd=5, fg=cblack, bg=cframe,
def createMediaTab(self): # Prepare the variables to set/receive values from GUI self.cfgMedPort = tk.IntVar( value=self.cfg.mediaConfig.transportConfig.port) self.cfgMedPortRange = tk.IntVar( value=self.cfg.mediaConfig.transportConfig.portRange) self.cfgMedLockCodec = tk.BooleanVar( value=self.cfg.mediaConfig.lockCodecEnabled) self.cfgMedSrtp = tk.IntVar(value=self.cfg.mediaConfig.srtpUse) self.cfgMedSrtpSecure = tk.IntVar( value=self.cfg.mediaConfig.srtpSecureSignaling) self.cfgMedIpv6 = tk.BooleanVar( value=self.cfg.mediaConfig.ipv6Use == pj.PJSUA_IPV6_ENABLED) # Build the tab page frm = ttk.Frame(self.frm) frm.columnconfigure(0, weight=1) frm.columnconfigure(1, weight=21) row = 0 ttk.Label(frm, text='Secure RTP (SRTP):').grid(row=row, column=0, sticky=tk.E, pady=2) ttk.Radiobutton(frm, text='Disable', value=pj.PJMEDIA_SRTP_DISABLED, variable=self.cfgMedSrtp).grid(row=row, column=1, sticky=tk.W, padx=6) row += 1 ttk.Radiobutton(frm, text='Mandatory', value=pj.PJMEDIA_SRTP_MANDATORY, variable=self.cfgMedSrtp).grid(row=row, column=1, sticky=tk.W, padx=6) row += 1 ttk.Radiobutton(frm, text='Optional (non-standard)', value=pj.PJMEDIA_SRTP_OPTIONAL, variable=self.cfgMedSrtp).grid(row=row, column=1, sticky=tk.W, padx=6) row += 1 ttk.Label(frm, text='SRTP signaling:').grid(row=row, column=0, sticky=tk.E, pady=2) ttk.Radiobutton(frm, text='Does not require secure signaling', value=0, variable=self.cfgMedSrtpSecure).grid(row=row, column=1, sticky=tk.W, padx=6) row += 1 ttk.Radiobutton(frm, text='Require secure next hop (TLS)', value=1, variable=self.cfgMedSrtpSecure).grid(row=row, column=1, sticky=tk.W, padx=6) row += 1 ttk.Radiobutton(frm, text='Require secure end-to-end (SIPS)', value=2, variable=self.cfgMedSrtpSecure).grid(row=row, column=1, sticky=tk.W, padx=6) row += 1 ttk.Label(frm, text='RTP transport start port:').grid(row=row, column=0, sticky=tk.E, pady=2) tk.Spinbox(frm, from_=0, to=65535, textvariable=self.cfgMedPort, width=5).grid(row=row, column=1, sticky=tk.W, padx=6) ttk.Label(frm, text='(0: any)').grid(row=row, column=1, sticky=tk.E, pady=2) row += 1 ttk.Label(frm, text='Port range:').grid(row=row, column=0, sticky=tk.E, pady=2) tk.Spinbox(frm, from_=0, to=65535, textvariable=self.cfgMedPortRange, width=5).grid(row=row, column=1, sticky=tk.W, padx=6) ttk.Label(frm, text='(0: not limited)').grid(row=row, column=1, sticky=tk.E, pady=2) row += 1 ttk.Label(frm, text='Lock codec:').grid(row=row, column=0, sticky=tk.E, pady=2) ttk.Checkbutton(frm, text='Enable', variable=self.cfgMedLockCodec).grid(row=row, column=1, sticky=tk.W, padx=6, pady=2) row += 1 ttk.Label(frm, text='Use IPv6:').grid(row=row, column=0, sticky=tk.E, pady=2) ttk.Checkbutton(frm, text='Yes', variable=self.cfgMedIpv6).grid(row=row, column=1, sticky=tk.W, padx=6, pady=2) self.wTab.add(frm, text='Media settings')
def testSpeaker(): Test4 = speakerList.get() if (Test4 == "TextToSpeech"): SpeakerTest.textToSpeech() #making Label for servo Test in coordinates (x,y) servoLabel = tk.Label(window, text="Servos") servoLabel.place(x=0, y=20, width=120, height=40) servoLabel.configure(font=("Arial", 25)) #making Menu For Servo Testing servoList = tk.Spinbox( window, values=("NeckServo", "RightShoulderServoFirstDegree", "RightShoulderServoSecondDegree", "LeftShoulderServoFirstDegree", "LeftShoulderServoSecondDegree", "RightElbow", "LeftElbow")) servoList.place(x=10, y=80, width=350, height=40) servoList.configure(font=("SANS", 14)) #making Button For Testing Servo servosButton = tk.Button(window, text="TestServo", bg='blue', command=testServo) servosButton.place(x=100, y=140, width=100, height=40) servosButton.configure(font=("Helvetica", 15)) #making Label for mic Test in coordinates (x,y) micLabel = tk.Label(window, text="MIC")
def __init__(self, w, RPC): Page.__init__(self) self.RPC = RPC self.hideFT = True self.max = 6 # label = tk.Label(self, text="Max's Destiny 2 Rich Presence App") # label.place(x=(w/2), y=25, anchor="center") # Place label at top of screen bottomFrame = tk.Frame(self, height=250) # bottomFrame.grid_configure() self.startUpdateButton = tk.Button(self, text="Start Updating", command=self.updatePressed) # startUpdateButton.place(x=(w/2), y=(w/2), anchor="center") self.startUpdateButton.pack(side=BOTTOM) bottomFrame.pack(side=BOTTOM) ############### self.toggleFTButton = tk.Button(bottomFrame, text="Fireteam Size: Hidden", command=self.toggleHideFT) self.toggleFTButton.grid(row=1, column=2) vcmdCUR = (self.register(self.validateCur), '%P') self.curSizeSB = tk.Spinbox(bottomFrame, from_=1, to_=12, increment=1, validate="key", validatecommand=vcmdCUR, width=5) self.curSizeSB.grid(row=1, column=3) slashLabel = tk.Label(bottomFrame, text="/") slashLabel.grid(row=1, column=4) vcmdMAX = (self.register(self.validateMax), '%P') var = tk.IntVar(self) var.set(self.max) self.maxSizeSB = tk.Spinbox(bottomFrame, from_=1, to_=12, increment=1, validate="key", validatecommand=vcmdMAX, textvariable=var, width=5) self.maxSizeSB.grid(row=1, column=5) # self.startUpdateButton.grid(row=3, column=3) ############### # Force update button? stateTextBox = tk.Text(self, state=DISABLED) stateTextBox.pack(side=TOP) # stateTextBox.config(state=DISABLED) self.RPC.setUpdateBox(stateTextBox)
def __init__( self, library=None, cells=None, hidden_types=[], depth=0, color={}, pattern={}, background="#202020", width=800, height=600, ): tkinter.Frame.__init__(self, None) if library is None: library = gdspy.current_library self.current_cell = tkinter.StringVar() if cells is None: self.cells = library.cell_dict cell_names = list(library.cell_dict.keys()) self.cell_bb = dict([(s, None) for s in self.cells]) else: if isinstance(cells, str) or isinstance(cells, gdspy.Cell): cells = (cells, ) self.cells = {} cell_names = [] self.cell_bb = {} for c in cells: cell = library.cell_dict.get(c, c) self.cells[cell.name] = cell cell_names.append(cell.name) self.cell_bb[cell.name] = None self.current_cell.set(cell_names[0]) self.depth = tkinter.IntVar() self.depth.set(depth) self.hidden_layers = hidden_types self.color = ColorDict(color.get("default", None)) self.color.update(color) self.pattern = PatternDict(pattern.get("default", None)) self.pattern.update(pattern) # Setup resizable window self.grid(sticky="nsew") top = self.winfo_toplevel() top.rowconfigure(0, weight=1) top.columnconfigure(0, weight=1) self.rowconfigure(0, weight=1) self.columnconfigure(0, weight=1) # Setup canvas self.canvas = tkinter.Canvas(self, width=width, height=height, xscrollincrement=0, yscrollincrement=0) self.canvas.grid(row=0, column=0, sticky="nsew") self.canvas.configure(bg=background) bg = [ int(c, 16) for c in (background[1:3], background[3:5], background[5:7]) ] self.default_outline = "#{0[0]:02x}{0[1]:02x}{0[2]:02x}".format([ (0 if c > 127 else 255) for c in bg ]) self.default_grey = "#{0[0]:02x}{0[1]:02x}{0[2]:02x}".format([ ((c + 256) // 2 if c < 85 else (c // 2 if c > 171 else (255 if c > 127 else 0))) for c in bg ]) # Setup scrollbars self.xscroll = tkinter.Scrollbar(self, orient=tkinter.HORIZONTAL, command=self.canvas.xview) self.xscroll.grid(row=1, column=0, sticky="ew") self.yscroll = tkinter.Scrollbar(self, orient=tkinter.VERTICAL, command=self.canvas.yview) self.yscroll.grid(row=0, column=1, sticky="ns") self.canvas["xscrollcommand"] = self.xscroll.set self.canvas["yscrollcommand"] = self.yscroll.set # Setup toolbar self.frame = tkinter.Frame(self) self.frame.columnconfigure(6, weight=1) self.frame.grid(row=2, column=0, columnspan=2, padx=2, pady=2, sticky="ew") # Setup buttons self.home = tkinter.Button(self.frame, text="Extents", command=self._update_canvas) self.zoom_in = tkinter.Button(self.frame, text="In", command=self._zoom_in) self.zoom_out = tkinter.Button(self.frame, text="Out", command=self._zoom_out) self.cell_menu = tkinter.OptionMenu(self.frame, self.current_cell, *cell_names) self.depth_spin = tkinter.Spinbox( self.frame, textvariable=self.depth, command=self._update_depth, from_=-1, to=128, increment=1, justify=tkinter.RIGHT, width=3, ) self.home.grid(row=0, column=0, sticky="w") self.zoom_in.grid(row=0, column=1, sticky="w") self.zoom_out.grid(row=0, column=2, sticky="w") self.cell_menu.grid(row=0, column=3, sticky="w") tkinter.Label(self.frame, text="Ref level:").grid(row=0, column=4, sticky="w") self.depth_spin.grid(row=0, column=5, sticky="w") self.bind_all("<KeyPress-Home>", self._update_canvas) self.bind_all("<KeyPress-A>", self._update_canvas) self.bind_all("<KeyPress-a>", self._update_canvas) # Setup coordinates box self.coords = tkinter.Label(self.frame, text="0, 0") self.coords.grid(row=0, column=6, sticky="e") # Layers self.l_canvas = tkinter.Canvas(self) self.l_canvas.grid(row=0, column=2, rowspan=3, sticky="nsew") self.l_scroll = tkinter.Scrollbar(self, orient=tkinter.VERTICAL, command=self.l_canvas.yview) self.l_scroll.grid(row=0, column=3, rowspan=3, sticky="ns") self.l_canvas["yscrollcommand"] = self.l_scroll.set # Change current cell self.current_cell.trace_variable("w", self._update_canvas) # Update depth self.depth_spin.bind("<FocusOut>", self._update_depth) # Drag-scroll: button 2 self.canvas.bind("<Button-2>", lambda evt: self.canvas.scan_mark(evt.x, evt.y)) self.canvas.bind("<Motion>", self._mouse_move) # Y scroll: scroll wheel self.canvas.bind( "<MouseWheel>", lambda evt: self.canvas.yview(tkinter.SCROLL, 1 if evt.delta < 0 else -1, tkinter.UNITS), ) self.canvas.bind( "<Button-4>", lambda evt: self.canvas.yview(tkinter.SCROLL, -1, tkinter.UNITS), ) self.canvas.bind( "<Button-5>", lambda evt: self.canvas.yview(tkinter.SCROLL, 1, tkinter.UNITS), ) self.l_canvas.bind( "<MouseWheel>", lambda evt: self.l_canvas.yview(tkinter.SCROLL, 1 if evt.delta < 0 else -1, tkinter.UNITS), ) self.l_canvas.bind( "<Button-4>", lambda evt: self.l_canvas.yview(tkinter.SCROLL, -1, tkinter.UNITS), ) self.l_canvas.bind( "<Button-5>", lambda evt: self.l_canvas.yview(tkinter.SCROLL, 1, tkinter.UNITS), ) # X scroll: shift + scroll wheel self.bind_all( "<Shift-MouseWheel>", lambda evt: self.canvas.xview(tkinter.SCROLL, 1 if evt.delta < 0 else -1, tkinter.UNITS), ) self.canvas.bind( "<Shift-Button-4>", lambda evt: self.canvas.xview(tkinter.SCROLL, -1, tkinter.UNITS), ) self.canvas.bind( "<Shift-Button-5>", lambda evt: self.canvas.xview(tkinter.SCROLL, 1, tkinter.UNITS), ) # Object properties: double button 1 # Zoom rectangle: drag button 1 # Measure tool: button 1 (click + click, no drag) self.canvas.bind("<Button-1>", self._zoom_rect_mark) self.canvas.bind("<ButtonRelease-1>", self._mouse_btn_1) self.canvas.bind("<Double-Button-1>", self._properties) # Zoom: control + scroll wheel self.bind_all("<Control-MouseWheel>", self._zoom) self.canvas.bind("<Control-Button-4>", self._zoom) self.canvas.bind("<Control-Button-5>", self._zoom) # Update the viewer self.shown_cell = None self.shown_depth = depth self.canvas_margins = None self._update_canvas() self.master.title("Gdspy - Layout Viewer") self.mainloop()