def __init__(self, master, image, name, enhancer, lo, hi): Frame.__init__(self, master) # set up the image self.tkim = ImageTk.PhotoImage(image.mode, image.size) self.enhancer = enhancer(image) self.update("1.0") # normalize # image window Label(self, image=self.tkim).pack() # scale s = Scale(self, label=name, orient=HORIZONTAL, from_=lo, to=hi, resolution=0.01, command=self.update) s.set(self.value) s.pack()
def initUI(self): self.parent.title("Phương pháp nén ảnh JPEG") self.pack(fill=BOTH, expand=1) menuBar = Menu(self.parent) self.parent.config(menu=menuBar) fileMenu = Menu(menuBar) fileMenu.add_command(label="Open", command=self.onOpen) menuBar.add_cascade(label="File", menu=fileMenu) menuBar.add_command(label="About", command=self.onInfo) menuBar.add_command(label="Exit", command=self.quit) self.txt = Text(self) self.txt.pack(fill=BOTH, expand=1) lbl0 = Label( self, text= "Xin gửi lời cảm ơn đến thầy Nguyễn Linh Giang đã giúp đỡ chúng em hoàn thành đề tài này, mở ảnh chọn File/Open" ) lbl0.place(x=20, y=10) lbl1 = Label(self, text="Original Image", width=20) lbl1.place(x=20, y=50) lbl2 = Label(self, text="Output Image", width=20) lbl2.place(x=400, y=50) lbl3 = Label(self, text="Size:", width=10) lbl3.place(x=20, y=300) lbl4 = Label(self, text="Size:", width=10) lbl4.place(x=400, y=300) lbl5 = Label(self, text="Tỷ lệ nén", width=10) lbl5.place(x=250, y=50) scale = Scale(self, from_=1, to=90, command=self.onScale) scale.place(x=270, y=80) self.var = IntVar() start = Button(self, text="Start", command=self.onRelease) start.place(x=270, y=200) self.a = 0 self.b = 0
def __init__(self, parent, text="", value=0.0, slider_bind_func=None): Frame.__init__(self, parent) self.main_bg = parent['bg'] self.config(bg=self.main_bg) self.slider_events = ["<ButtonRelease-1>", "<ButtonRelease-3>"] self.label = Label(self, text=text) self.label.grid(row=0, column=0, padx=5, pady=3, sticky='s') self.slider = Scale(self, from_=1, to=0, orient=VERTICAL, resolution=0.01, length=200, width=18) self.slider.grid(row=1, column=0, padx=5, pady=5, sticky='n') if slider_bind_func is not None: for event in self.slider_events: self.slider.bind(event, slider_bind_func) self.slider.set(value) self.label.config(bg=self.slider['bg'])
def __init__(self, master): self.master = master # Window dimensions and fields self.depth = 1 self.index = 0 self.colors = ["white", "#444444"] self.width = 600 self.height = int(round(self.width * math.sqrt(3) / 2)) self.margin = 10 # Setup Tk Tk.config(master, bg=self.colors[self.index]) master.title("Sierpinski") master.iconbitmap('tri.ico') master.bind("<space>", self.invert) master.bind("<Key-Up>", self.updatedepth) master.bind("<Key-Down>", self.updatedepth) master.bind("<Key-Right>", self.updatedepth) master.bind("<Key-Left>", self.updatedepth) # setup window self.canvas = Canvas(master, width=self.width + (2 * self.margin), height=self.height + (2 * self.margin)) self.canvas.config(bg=self.colors[self.index], highlightthickness=0) self.canvas.bind("<Button-1>", self.invert) self.canvas.pack() # slider to set triangle depth self.level = Scale(master, from_=1, to=8, orient=HORIZONTAL, command=self.updatedepth) self.level.config(bg=self.colors[self.index], highlightthickness=0) self.level.pack() self.draw(self.level.get())
def create_buttons(self, parent, create_sliders): self.jso = Button(parent, text="Import from .json", command=self.import_json) self.jso.grid(row=0, column=0, sticky="w") self.sav = Button(parent, text="Import from .sav", command=self.import_sav) self.sav.grid(row=0, column=1, sticky="w") self.scales = [] # create sliders if create_sliders: self.jso.grid_configure(row=0, column=0) self.sav.grid_configure(row=1, column=0) resources = [ 'minerals', 'energy', 'physics', 'society', 'engineering' ] colors = ["red", "yellow", "blue", "green", "orange"] for i in range(len(resources)): var = DoubleVar() var.set(500) callback = lambda event, tag=i: self.weight_update(event, tag) b = Scale(parent, from_=1, to=1000, variable=var, length=135, orient='horizontal', troughcolor=colors[i], resolution=1, label=resources[i], showvalue=0) b.grid(row=2 + i, column=0, sticky="w") b.bind('<ButtonRelease-1>', self.redraw) # redraw when user release scale self.scales.append(var)
def inicializar_gui(self): canvas = Canvas(self.master, width=50, height=50, bd=0, highlightthickness=0) canvas.create_polygon(0, 0, 1, 1, 2, 2, fill='blue', tags='flecha') canvas.create_line(0, 0, 1, 1, 2, 2, 0, 0, fill='black', tags='linea') self.escala = Scale(self.master, orient=VERTICAL, length=285, from_=0, to=250, tickinterval=50, command=lambda h, c=canvas: establecerAltura(c, h)) self.escala.grid(row=0, column=0, sticky='NE') canvas.grid(row=0, column=1, sticky='NWSE') self.escala.set(100)
def __init__(self, root, x, y, name, pin): super().__init__(root, x, y, name) self._pin = Device.pin_factory.pin(pin, pin_class=PreciseMockChargingPin) self._scale = Scale(root, from_=0, to=90, showvalue=0, orient=VERTICAL, command=self._scale_changed, sliderlength=20, length=150, highlightthickness=0, background="white") self._scale.place(x=x + 90, y=y) self._scale.set(30) self._scale_changed(self._scale.get()) self._set_image_for_state("light_sensor.png", "normal", (75, 150)) self._create_main_widget(Label, "normal")
def main(extension): root=Toplevel() if 'DejaVu Sans' in list(prgm.font.families()): police=prgm.font.Font(root,family='DejaVu Sans',size=10) root.option_add('*Font',police) qualite=prgm.IntVar(root) qualite.set(100) transparent=prgm.IntVar(root) transparent.set(0) bar_qualite=Scale(root,from_=100,to=500,orient='horizontal',var=qualite,tickinterval=50,label='Résolution',length=325,resolution=5) bar_qualite.grid(column=0,row=0) bar_transparent=Checkbutton(root,text='Transparent',variable=transparent) bar_transparent.grid(column=0,row=1) prgm.Label(root,text='',width=50).grid(column=0,row=2) bouton_fermer=prgm.Button(root,text='Valider',command=root.destroy) bouton_fermer.grid(column=0,row=3) root.title('Exporter en png') root.resizable(width=False,height=False) if prgm.os.name=='nt': root.iconbitmap('python.ico') prgm.root.wait_window(root) return qualite.get(),transparent.get()
def main(self): """Produce the app window""" def clicked(event=None): pass def unclicked(event=None): self.robot.stop() def updateFlywheelDuty(event=None): duty = self.slider.get() print(duty) self.robot.setDefaultFlywheelDuty(duty) self.up = NoHoverButton(self.frame, text="Start collection", height=5, width=10) self.up.pack(padx=10, pady=10) #grid(column=0, row=0) self.up.bind("<ButtonPress>", lambda x: self.robot.autonomous()) self.up.bind("<ButtonRelease>", unclicked) self.calibrate = NoHoverButton( self.frame, text="Calibrate\nflywheels") #, height=5, width=5) self.calibrate.pack(padx=10, pady=10) #.grid(column=1, row=0) self.calibrate.bind( "<ButtonPress>", lambda x: unclicked) #self.robot.flywheels.calibrate()) self.calibrate.bind("<ButtonRelease>", lambda x: unclicked) self.slider = Scale(self.frame, from_=1000, to=2000, tickinterval=250, resolution=10, length=75, command=updateFlywheelDuty) self.slider.set(1130) self.slider.pack(padx=10, pady=10) #.grid(column=2, row=0)
def create_middle_frame(self, master): middle_frame = Frame(master, bg="black") Scale( middle_frame, from_=0, to=100, orient=HORIZONTAL, bg="black", fg=self.green_color, activebackground=self.green_color, highlightcolor=self.green_color, sliderlength=20 ).pack() Label( middle_frame, text="Brightness", fg=self.green_color, bg="black" ).pack() middle_frame.grid(row=0, column=1, sticky="nsew")
def __init__(self, master): self.master = master master.title("Password Generator") self.lbl1 = Label(master, text="Include:").grid(row=0, sticky=W) self.incLower = IntVar() self.incLower.set(1) self.chk1 = Checkbutton(master, text="lower case", variable=self.incLower).grid(row=1, sticky=W) self.incUpper = IntVar() self.incUpper.set(1) self.chk2 = Checkbutton(master, text="UPPER CASE", variable=self.incUpper).grid(row=2, sticky=W) self.incNumeric = IntVar() self.incNumeric.set(1) self.chk3 = Checkbutton(master, text="numeric", variable=self.incNumeric).grid(row=3, sticky=W) self.incPunc = IntVar() self.chk4 = Checkbutton(master, text="punctuation", variable=self.incPunc).grid(row=4, sticky=W) self.b1 = Button(master, text="Generate password", width=20, command=self.genPwd).grid(row=5, sticky=W) self.b2 = Button(master, text="Quit", width=20, command=self.exitApp).grid(row=5, column=1, sticky=W) self.label_text = StringVar() self.lbl2 = Label(master, textvariable=self.label_text).grid(row=6, column=0, columnspan=2, sticky=W + E) self.label_text.set("") self.numDigits = IntVar() self.sc1 = Scale(master, from_=6, to=40, variable=self.numDigits).grid(row=0, rowspan=5, column=1, sticky=E)
def __init__(self, root, x, y, name, trigger_pin, echo_pin, min_distance=0, max_distance=50): super().__init__(root, x, y, name) self._echo_pin = Device.pin_factory.pin(echo_pin) self._trigger_pin = Device.pin_factory.pin( trigger_pin, pin_class=PreciseMockTriggerPin, echo_pin=self._echo_pin, echo_time=0.004) self._echo_pin._bounce = 0 self._trigger_pin._bounce = 0 self._set_image_for_state("distance_sensor.png", "normal", (86, 50)) self._create_main_widget(Label, "normal") self._scale = Scale(root, from_=min_distance, to=max_distance, orient=HORIZONTAL, command=self._scale_changed, sliderlength=20, length=150, highlightthickness=0, background="white") self._scale.place(x=x + 100, y=y) self._scale.set(round((min_distance + max_distance) / 2)) self._scale_changed(self._scale.get())
def __init__(self, root): super().__init__(root) self.configure(relief=SOLID, padx=10, pady=10) self.pack(fill=BOTH, expand=True, padx=10, pady=10) # Sliders for i, name in enumerate(['red', 'green', 'blue']): Scale(self, length=256, from_=255, to=0, label=name[0].upper(), variable=getattr(root.color, name), command=root.update_color) \ .grid(row=0, column=i, sticky=EW) def create_callback(x): return lambda: root.set_color(*COLORS[x][1:]) for i, c in enumerate(COLORS): Button(self, text=c[0], command=create_callback(i)) \ .grid(row=i // 3 + 1, column=i % 3, padx=2, pady=2, sticky=EW) # Create the color box and color labels color_box = Label(self, bg='black', height=7, width=15) self.paint_box = Label(self, bg='black', height=7, width=15) self.color_tuple = Label(self, text=root.color.get_color_tuple_str()) self.color_hex = Label(self, text=root.color.get_color_str()) # Make the paint_box smaller than the color_box due to ipadx and ipday on the color_box color_box.grid(row=0, column=3, columnspan=2, padx=(20, 10), ipadx=10, ipady=10) self.paint_box.grid(row=0, column=3, columnspan=2, padx=(20, 10)) self.color_tuple.grid(row=1, column=3, columnspan=2) self.color_hex.grid(row=2, column=3, columnspan=2)
def __init__(self, master): self.master = master master.title("Stock Analysis - BIT F4E") self.label = Label(master, text="This is our first GUI!") # self.label.pack() self.greet_button = Button(master, text="Greet", command=self.greet) # self.greet_button.pack() self.close_button = Button(master, text="Close", command=master.quit) # self.close_button.pack() self.scale = Scale(master, from_=0, to=10, resolution=0.1, command=self.val, orient=HORIZONTAL) self.label.grid(columnspan=2, sticky=W) self.greet_button.grid(row=1) self.close_button.grid(row=1, column=1) self.scale.grid(columnspan=4)
#loops through and creates buttons and selecters etc. for trains for i in range(max_trains): #one section for each train temp_column = 0 #temp column decides how far left/right train options are placed if ((i == 1) | (i == 3)): temp_column = 5 temp_row = 1 #decides how far up or down train options are placed if ((i == 2) | (i == 3)): temp_row = 9 + num_train_actions - 5 #create label for train train_slider_labels[i] = Label(sliders_frame, text=("Train " + str(i + 1) + " Controls")) train_slider_labels[i].grid(column=temp_column, row=temp_row, columnspan=3) #create the speed slider for train train_speed_sliders[i] = Scale(sliders_frame, from_=50, to=0, tickinterval=10) train_speed_sliders[i].grid(column=temp_column, row=temp_row + 1, rowspan=5, columnspan=1, ipady=20, ipadx=10) #create forward/reverse options for train train_dir_variables[i] = IntVar() train_dir_buttons[i][0] = Radiobutton(sliders_frame, text="Forward", variable=train_dir_variables[i], value=0, indicatoron=0).grid(
def __init__(self, game: Game): Tk.__init__(self) # for 4k self.tk.call('tk', 'scaling', '-displayof', '.', 1) # setup variables self.game = game self.is_automoving = False # create widgets self.board_canvas = Canvas(self, background="white") self.control_frame = Frame(self) self.label_current_player = Label(self.control_frame, text="Current Player: X") self.button_next_turn = Button(self.control_frame, text="Next Turn", command=self.next_turn) self.slider_automove_speed = scale = Scale(self.control_frame, orient='horizontal', from_=0, to_=2000) self.button_toggle_automove = Button(self.control_frame, text="Start Automove", command=self.toggle_automove) self.checkbox_frame = Frame(self.control_frame) # controls user input self.user_controlled = [] for pick in ['X', 'A', 'B', 'C', 'D', 'E']: var = IntVar() chk = Checkbutton(self.checkbox_frame, text=pick, variable=var) chk.pack(side=TOP, anchor=N, expand=YES) self.user_controlled.append(var) self.text_user_input = Entry(self.control_frame, text="move") #self.text_user_input.grid(column=0, sticky='N') drop_down_options = {"taxi", "bus", "underground", "black"} self.drop_down_selected = StringVar(self.control_frame) self.drop_down_selected.set("taxi") self.drop_down_menu = OptionMenu(self.control_frame, self.drop_down_selected, *drop_down_options) #self.drop_down_menu.grid(column=1, sticky='N') self.button_send_action = Button(self.control_frame, text="Send", command=self.send_move) #self.button_send_action.grid(column=2, sticky='N') # layout widgets self.board_canvas.pack(fill='both', expand=True, anchor='w') self.control_frame.pack(before=self.board_canvas, side='right', anchor='e') self.label_current_player.pack(fill='x') self.button_next_turn.pack(fill='x') self.slider_automove_speed.pack(fill='x') self.button_toggle_automove.pack(fill='x') Label(self.control_frame, text="\n\n\n").pack(fill='x') self.checkbox_frame.pack(fill='x', expand=True, anchor='w') self.text_user_input.pack(fill='y') self.drop_down_menu.pack(fill='y') self.button_send_action.pack(fill='y') # setup canvas self.board_img_pil = Image.open('board.jpg') self.board_img = ImageTk.PhotoImage(self.board_img_pil) self.img_id = self.board_canvas.create_image(300, 300, image=self.board_img) # move image on resize self.bind("<Configure>", self.update_ui) self.player_colors = [ "black", "red", "yellow", "green", "blue", "purple" ] #random.shuffle(self.player_colors) self.old_canvas_size = self.winfo_width(), self.winfo_height() self.player_rects = [ self.board_canvas.create_rectangle(0, 0, 1, 1, fill=self.player_colors[i]) for i in range(len(self.game.players)) ] self.player_txts = [ self.board_canvas.create_text(0, 0, text=plr.name) for plr in self.game.players ] # create data for node locations on image self.node_locations = {} with open("node_locations.txt", "r") as f: for line in f: l = line.split(" ") self.node_locations[int(l[0])] = (float(l[1]), float(l[2]))
def openCmdWindow(self): """ open the cmd window and initial all the button and text """ panel = Toplevel(self.root) panel.wm_title("Command Panel") # create text input entry text0 = tki.Label( panel, text= 'This Controller map keyboard inputs to Tello control commands\n' 'Adjust the trackbar to reset distance and degree parameter', font='Helvetica 10 bold') text0.pack(side='top') text1 = tki.Label( panel, text='W - Move Tello Up\t\t\tArrow Up - Move Tello Forward\n' 'S - Move Tello Down\t\t\tArrow Down - Move Tello Backward\n' 'A - Rotate Tello Counter-Clockwise\tArrow Left - Move Tello Left\n' 'D - Rotate Tello Clockwise\t\tArrow Right - Move Tello Right', justify="left") text1.pack(side="top") self.btn_landing = tki.Button(panel, text="Land", relief="raised", command=self.telloLanding) self.btn_landing.pack(side="bottom", fill="both", expand="yes", padx=10, pady=5) self.btn_takeoff = tki.Button(panel, text="Takeoff", relief="raised", command=self.telloTakeOff) self.btn_takeoff.pack(side="bottom", fill="both", expand="yes", padx=10, pady=5) # binding arrow keys to drone control self.tmp_f = tki.Frame(panel, width=100, height=2) self.tmp_f.bind('<KeyPress-w>', self.on_keypress_w) self.tmp_f.bind('<KeyPress-s>', self.on_keypress_s) self.tmp_f.bind('<KeyPress-a>', self.on_keypress_a) self.tmp_f.bind('<KeyPress-d>', self.on_keypress_d) self.tmp_f.bind('<KeyPress-Up>', self.on_keypress_up) self.tmp_f.bind('<KeyPress-Down>', self.on_keypress_down) self.tmp_f.bind('<KeyPress-Left>', self.on_keypress_left) self.tmp_f.bind('<KeyPress-Right>', self.on_keypress_right) self.tmp_f.pack(side="bottom") self.tmp_f.focus_set() self.btn_landing = tki.Button(panel, text="Flip", relief="raised", command=self.openFlipWindow) self.btn_landing.pack(side="bottom", fill="both", expand="yes", padx=10, pady=5) self.distance_bar = Scale(panel, from_=0.02, to=5, tickinterval=0.01, digits=3, label='Distance(m)', resolution=0.01) self.distance_bar.set(0.2) self.distance_bar.pack(side="left") self.btn_distance = tki.Button( panel, text="Reset Distance", relief="raised", command=self.updateDistancebar, ) self.btn_distance.pack(side="left", fill="both", expand="yes", padx=10, pady=5) self.degree_bar = Scale(panel, from_=1, to=360, tickinterval=10, label='Degree') self.degree_bar.set(30) self.degree_bar.pack(side="right") self.btn_distance = tki.Button(panel, text="Reset Degree", relief="raised", command=self.updateDegreebar) self.btn_distance.pack(side="right", fill="both", expand="yes", padx=10, pady=5)
Button(root, text='tk Button').grid(row=1, column=0) ttk.Button(root, text='ttk Button').grid(row=1, column=1) Checkbutton(root, text='tk CheckButton').grid(row=2, column=0) ttk.Checkbutton(root, text='ttk CheckButton').grid(row=2, column=1) Entry(root).grid(row=3, column=0) ttk.Entry(root).grid(row=3, column=1) PanedWindow(root).grid(row=4, column=0) ttk.PanedWindow(root).grid(row=4, column=1) Radiobutton(root, text='tk Radio').grid(row=5, column=0) ttk.Radiobutton(root, text='ttk Radio').grid(row=5, column=1) Scale(root, orient=HORIZONTAL).grid(row=6, column=0) ttk.Scale(root).grid(row=6, column=1) ttk.Separator(root, orient=HORIZONTAL).grid(row=7, columnspan=2, sticky="ew") ttk.Label(root, text='NEW WIDGETS INTRODUCED IN ttk').grid(row=8, columnspan=2) ttk.Separator(root, orient=HORIZONTAL).grid(row=9, columnspan=2, sticky="ew") ttk.Combobox(root).grid(row=11, column=0) my_notebook = ttk.Notebook(root) my_notebook.grid(row=12, column=1) frame_1 = ttk.Frame(my_notebook) frame_2 = ttk.Frame(my_notebook) my_notebook.add(frame_1, text='Tab One') my_notebook.add(frame_2, text='Tab Two')
for slider, bounds in zip(sliders, sliderbounds):randomise_slider(slider, bounds) def set_sliders_to_val_row(sliders, vals_row): for slider, val in zip(sliders, vals_row):slider.set(val) def multiply_bounds_from_mean(bounds, factor): midpoint=mean(bounds) distance=midpoint-bounds[0] return (midpoint-factor*distance, midpoint+factor*distance) root=Tk() component_bounds=[(min(vals[:,i]), max(vals[:,i])) for i in range(num_components)] sliderbounds=[multiply_bounds_from_mean(bounds, slider_factor) for bounds in component_bounds] sliders=[Scale(root, from_=min(bounds), to=max(bounds), length=500) for i,bounds in zip(range(num_components), sliderbounds)] for n,slider in enumerate(sliders): if display_sliders: slider.grid(row=0, column=num_images+n, rowspan=3) default_vals_row=random.choice(vals) set_sliders_to_val_row(sliders, default_vals_row) # Button(root, text="ok", command=display_image_from_sliders).pack() Button(root, text="randomise", command=randomise_sliders).grid(row=2, column=0, columnspan=num_images) frame=Frame(root, width=size[0], height=size[1], background='white') frame.grid(row=0, column=0, columnspan=num_images)
def __init__(self, master): self.master = master master.title("GUI") self.label = Label(master, text="Fluid Cell Control") self.label.pack() self.var1 = IntVar() self.check1 = Checkbutton(master, text="1", variable=self.var1, command=self.update_valve) self.check1.pack() self.var2 = IntVar() self.check2 = Checkbutton(master, text="2", variable=self.var2, command=self.update_valve) self.check2.pack() self.var3 = IntVar() self.check3 = Checkbutton(master, text="3", variable=self.var3, command=self.update_valve) self.check3.pack() self.var4 = IntVar() self.check4 = Checkbutton(master, text="4", variable=self.var4, command=self.update_valve) self.check4.pack() self.var5 = IntVar() self.check5 = Checkbutton(master, text="5", variable=self.var5, command=self.update_valve) self.check5.pack() self.var6 = IntVar() self.check6 = Checkbutton(master, text="6", variable=self.var6, command=self.update_valve) self.check6.pack() self.apply_button = Button(master, text="Apply", command=self.print_valve) self.apply_button.pack() self.speed = StringVar() self.speed_entry = Entry(master, textvariable=self.speed) self.speed_entry.pack() self.speed_scale = Scale(master, from_=0, to=255, variable=self.speed, orient=HORIZONTAL) self.speed_scale.pack() self.apply_speed = Button(master, text="Apply", command=self.print_speed) self.apply_speed.pack() self.close_button = Button(master, text="Close", command=master.quit) self.close_button.pack()
window.birdViewPhotoImage = Label(window, image=birdViewPhotoImage) window.birdViewPhotoImage.grid(row=3, column=0) detectedLinesPhotoImage = PhotoImage( Image.fromarray(resize_image(mpimg.imread(images[0])))) window.detectedLinesPhotoImage = Label(window, image=detectedLinesPhotoImage) window.detectedLinesPhotoImage.grid(row=3, column=1) projectedPhotoImage = PhotoImage( Image.fromarray(resize_image(mpimg.imread(images[0])))) window.projectedPhotoImage = Label(window, image=projectedPhotoImage) window.projectedPhotoImage.grid(row=3, column=2) window.sobelLowThreshold = Scale(window, from_=0, to=255, orient=HORIZONTAL, command=change_sobel_thresh_min, label="Low Sobel Threshold") window.sobelLowThreshold.grid(row=4, column=0, columnspan=3, sticky='we') window.sobelHighThreshold = Scale(window, from_=0, to=255, orient=HORIZONTAL, command=change_sobel_thresh_min, label="High Sobel Threshold") window.sobelHighThreshold.grid(row=5, column=0, columnspan=3, sticky='we') window.sobelHighThreshold.set(255) window.sLowThreshold = Scale(window, from_=0,
def guiMain(settings=None): frames = {} mainWindow = Tk() mainWindow.wm_title("OoT Randomizer %s" % ESVersion) set_icon(mainWindow) notebook = ttk.Notebook(mainWindow) frames['rom_tab'] = ttk.Frame(notebook) frames['rules_tab'] = ttk.Frame(notebook) frames['logic_tab'] = ttk.Frame(notebook) frames['other_tab'] = ttk.Frame(notebook) frames['aesthetic_tab'] = ttk.Frame(notebook) adjustWindow = ttk.Frame(notebook) customWindow = ttk.Frame(notebook) notebook.add(frames['rom_tab'], text='ROM Options') notebook.add(frames['rules_tab'], text='Main Rules') notebook.add(frames['logic_tab'], text='Detailed Logic') notebook.add(frames['other_tab'], text='Other') notebook.add(frames['aesthetic_tab'], text='Aesthetics') # Shared Controls # adds a LabelFrame containing a list of radio buttons based on the given data # returns the label_frame, and a variable associated with it def MakeRadioList(parent, data): # create a frame to hold the radio buttons lable_frame = LabelFrame(parent, text=data["name"], labelanchor=NW) # create a variable to hold the result of the user's decision radio_var = StringVar(value=data["default"]); # setup orientation side = TOP anchor = W if "horizontal" in data and data["horizontal"]: side = LEFT anchor = N # add the radio buttons for option in data["options"]: radio_button = Radiobutton(lable_frame, text=option["description"], value=option["value"], variable=radio_var, justify=LEFT, wraplength=data["wraplength"]) radio_button.pack(expand=True, side=side, anchor=anchor) # return the frame so it can be packed, and the var so it can be used return (lable_frame, radio_var) ####################### # randomizer controls # ####################### # hold the results of the user's decisions here guivars = {} # hierarchy ############ #Rules Tab frames['open'] = LabelFrame(frames['rules_tab'], text='Open', labelanchor=NW) frames['logic'] = LabelFrame(frames['rules_tab'], text='Logic', labelanchor=NW) # Logic tab frames['rewards'] = LabelFrame(frames['logic_tab'], text='Remove Specific Locations', labelanchor=NW) frames['tricks'] = LabelFrame(frames['logic_tab'], text='Specific expected tricks', labelanchor=NW) #Other Tab frames['convenience'] = LabelFrame(frames['other_tab'], text='Speed Ups', labelanchor=NW) frames['other'] = LabelFrame(frames['other_tab'], text='Misc', labelanchor=NW) #Aesthetics tab frames['tuniccolor'] = LabelFrame(frames['aesthetic_tab'], text='Tunic Color', labelanchor=NW) frames['navicolor'] = LabelFrame(frames['aesthetic_tab'], text='Navi Color', labelanchor=NW) frames['lowhp'] = LabelFrame(frames['aesthetic_tab'], text='Low HP SFX', labelanchor=NW) # shared settingsFrame = Frame(mainWindow) settings_string_var = StringVar() settingsEntry = Entry(settingsFrame, textvariable=settings_string_var) def show_settings(event=None): settings = guivars_to_settings(guivars) settings_string_var.set( settings.get_settings_string() ) # Update any dependencies for info in setting_infos: if info.gui_params and 'dependency' in info.gui_params: dep_met = True for dep_var, dep_val in info.gui_params['dependency'].items(): if guivars[dep_var].get() != dep_val: dep_met = False if widgets[info.name].winfo_class() == 'Frame': for child in widgets[info.name].winfo_children(): child.configure(state= 'normal' if dep_met else 'disabled') else: widgets[info.name].config(state = 'normal' if dep_met else 'disabled') def import_settings(event=None): try: settings = guivars_to_settings(guivars) text = settings_string_var.get().upper() settings.seed = guivars['seed'].get() settings.update_with_settings_string(text) settings_to_guivars(settings, guivars) except Exception as e: messagebox.showerror(title="Error", message="Invalid settings string") label = Label(settingsFrame, text="Settings String") importSettingsButton = Button(settingsFrame, text='Import Settings String', command=import_settings) label.pack(side=LEFT, anchor=W, padx=5) settingsEntry.pack(side=LEFT, anchor=W) importSettingsButton.pack(side=LEFT, anchor=W, padx=5) fileDialogFrame = Frame(frames['rom_tab']) romDialogFrame = Frame(fileDialogFrame) baseRomLabel = Label(romDialogFrame, text='Base Rom') guivars['rom'] = StringVar(value='ZOOTDEC.z64') romEntry = Entry(romDialogFrame, textvariable=guivars['rom'], width=40) def RomSelect(): rom = filedialog.askopenfilename(filetypes=[("Rom Files", (".z64", ".n64")), ("All Files", "*")]) if rom != '': guivars['rom'].set(rom) romSelectButton = Button(romDialogFrame, text='Select Rom', command=RomSelect, width=10) baseRomLabel.pack(side=LEFT, padx=(40,0)) romEntry.pack(side=LEFT, padx=3) romSelectButton.pack(side=LEFT) romDialogFrame.pack() fileDialogFrame.pack(side=TOP, anchor=W, padx=5, pady=(5,1)) def open_output(): open_file(output_path('')) def output_dir_select(): rom = filedialog.askdirectory(initialdir = default_output_path(guivars['output_dir'].get())) if rom != '': guivars['output_dir'].set(rom) outputDialogFrame = Frame(frames['rom_tab']) outputDirLabel = Label(outputDialogFrame, text='Output Directory') guivars['output_dir'] = StringVar(value='') outputDirEntry = Entry(outputDialogFrame, textvariable=guivars['output_dir'], width=40) outputDirButton = Button(outputDialogFrame, text='Select Dir', command=output_dir_select, width=10) outputDirLabel.pack(side=LEFT, padx=(3,0)) outputDirEntry.pack(side=LEFT, padx=3) outputDirButton.pack(side=LEFT) outputDialogFrame.pack(side=TOP, anchor=W, padx=5, pady=(5,1)) if os.path.exists(local_path('README.html')): def open_readme(): open_file(local_path('README.html')) openReadmeButton = Button(outputDialogFrame, text='Open Documentation', command=open_readme) openReadmeButton.pack(side=LEFT, padx=5) outputDialogFrame.pack(side=TOP, anchor=W, pady=3) countDialogFrame = Frame(frames['rom_tab']) countLabel = Label(countDialogFrame, text='Generation Count') guivars['count'] = StringVar() countSpinbox = Spinbox(countDialogFrame, from_=1, to=100, textvariable=guivars['count'], width=3) countLabel.pack(side=LEFT) countSpinbox.pack(side=LEFT, padx=2) countDialogFrame.pack(side=TOP, anchor=W, padx=5, pady=(1,1)) multiworldFrame = LabelFrame(frames['rom_tab'], text='Multi-World Generation') countLabel = Label(multiworldFrame, wraplength=300, justify=LEFT, text='This is used for co-op generations. Increasing World Count will drastically increase the generation time. For more information see https://github.com/TestRunnerSRL/bizhawk-co-op') countLabel.pack(side=TOP, anchor=W, padx=5, pady=(1,1)) worldCountFrame = Frame(multiworldFrame) countLabel = Label(worldCountFrame, text='World Count') guivars['world_count'] = StringVar() countSpinbox = Spinbox(worldCountFrame, from_=1, to=100, textvariable=guivars['world_count'], width=3) countLabel.pack(side=LEFT) countSpinbox.pack(side=LEFT, padx=2) worldCountFrame.pack(side=LEFT, anchor=N, padx=5, pady=(1,1)) playerNumFrame = Frame(multiworldFrame) countLabel = Label(playerNumFrame, text='Player Number') guivars['player_num'] = StringVar() countSpinbox = Spinbox(playerNumFrame, from_=1, to=100, textvariable=guivars['player_num'], width=3) countLabel.pack(side=LEFT) countSpinbox.pack(side=LEFT, padx=2) playerNumFrame.pack(side=LEFT, anchor=N, padx=5, pady=(1,1)) multiworldFrame.pack(side=TOP, anchor=W, padx=5, pady=(1,1)) # build gui ############ widgets = {} for info in setting_infos: if info.gui_params: if info.gui_params['widget'] == 'Checkbutton': # determine the initial value of the checkbox default_value = 1 if info.gui_params['default'] == "checked" else 0 # create a variable to access the box's state guivars[info.name] = IntVar(value=default_value) # create the checkbox widgets[info.name] = Checkbutton(frames[info.gui_params['group']], text=info.gui_params['text'], variable=guivars[info.name], justify=LEFT, wraplength=200, command=show_settings) widgets[info.name].pack(expand=False, anchor=W) elif info.gui_params['widget'] == 'Combobox': # create the variable to store the user's decision guivars[info.name] = StringVar(value=info.gui_params['default']) # create the option menu widgets[info.name] = Frame(frames[info.gui_params['group']]) # dropdown = OptionMenu(widgets[info.name], guivars[info.name], *(info['options'])) if isinstance(info.gui_params['options'], list): info.gui_params['options'] = dict(zip(info.gui_params['options'], info.gui_params['options'])) dropdown = ttk.Combobox(widgets[info.name], textvariable=guivars[info.name], values=list(info.gui_params['options'].keys()), state='readonly', width=30) dropdown.bind("<<ComboboxSelected>>", show_settings) dropdown.pack(side=BOTTOM, anchor=W) # label the option if 'text' in info.gui_params: label = Label(widgets[info.name], text=info.gui_params['text']) label.pack(side=LEFT, anchor=W, padx=5) # pack the frame widgets[info.name].pack(expand=False, side=TOP, anchor=W, padx=3, pady=3) elif info.gui_params['widget'] == 'Scale': # create the variable to store the user's decision guivars[info.name] = IntVar(value=info.gui_params['default']) # create the option menu widgets[info.name] = Frame(frames[info.gui_params['group']]) # dropdown = OptionMenu(widgets[info.name], guivars[info.name], *(info['options'])) minval = 'min' in info.gui_params and info.gui_params['min'] or 0 maxval = 'max' in info.gui_params and info.gui_params['max'] or 100 stepval = 'step' in info.gui_params and info.gui_params['step'] or 1 scale = Scale(widgets[info.name], variable=guivars[info.name], from_=minval, to=maxval, tickinterval=stepval, resolution=stepval, showvalue=0, orient=HORIZONTAL, sliderlength=15, length=200, command=show_settings) scale.pack(side=BOTTOM, anchor=W) # label the option if 'text' in info.gui_params: label = Label(widgets[info.name], text=info.gui_params['text']) label.pack(side=LEFT, anchor=W, padx=5) # pack the frame widgets[info.name].pack(expand=False, side=TOP, anchor=W, padx=3, pady=3) elif info.gui_params['widget'] == 'Entry': # create the variable to store the user's decision guivars[info.name] = StringVar(value=info.gui_params['default']) # create the option menu widgets[info.name] = Frame(frames[info.gui_params['group']]) entry = Entry(widgets[info.name], textvariable=guivars[info.name], width=30) entry.pack(side=BOTTOM, anchor=W) # label the option if 'text' in info.gui_params: label = Label(widgets[info.name], text=info.gui_params['text']) label.pack(side=LEFT, anchor=W, padx=5) # pack the frame widgets[info.name].pack(expand=False, side=TOP, anchor=W, padx=3, pady=3) # pack the hierarchy frames['open'].pack( fill=BOTH, expand=True, anchor=N, side=LEFT, pady=(5,1) ) frames['logic'].pack( fill=BOTH, expand=True, anchor=N, side=LEFT, pady=(5,1) ) # Logic tab frames['rewards'].pack(fill=BOTH, expand=True, anchor=N, side=LEFT, pady=(5,1) ) frames['tricks'].pack( fill=BOTH, expand=True, anchor=N, side=LEFT, pady=(5,1) ) #Other Tab frames['convenience'].pack(fill=BOTH, expand=True, anchor=N, side=LEFT, pady=(5,1) ) frames['other'].pack( fill=BOTH, expand=True, anchor=N, side=LEFT, pady=(5,1) ) #Aesthetics tab frames['navicolor'].pack( fill=BOTH, expand=True, anchor=N, side=RIGHT, pady=(5,1) ) frames['tuniccolor'].pack(fill=BOTH, expand=True, anchor=W, side=TOP, pady=(5,1) ) frames['lowhp'].pack( fill=BOTH, expand=True, anchor=W, side=BOTTOM, pady=(5,1) ) notebook.pack(fill=BOTH, expand=True, padx=5, pady=5) # didn't refactor the rest, sorry # create the option menu settingsFrame.pack(fill=BOTH, anchor=W, padx=5, pady=(10,0)) def generateRom(): settings = guivars_to_settings(guivars) try: if settings.count is not None: orig_seed = settings.seed for i in range(settings.count): settings.update_seed(orig_seed + '-' + str(i)) main(settings) else: main(settings) except Exception as e: messagebox.showerror(title="Error while creating seed", message=str(e)) else: messagebox.showinfo(title="Success", message="Rom patched successfully") generateSeedFrame = Frame(mainWindow) generateButton = Button(generateSeedFrame, text='Generate Patched Rom', command=generateRom) seedLabel = Label(generateSeedFrame, text='Seed') guivars['seed'] = StringVar() seedEntry = Entry(generateSeedFrame, textvariable=guivars['seed']) seedLabel.pack(side=LEFT) seedEntry.pack(side=LEFT) generateButton.pack(side=LEFT, padx=(5, 0)) generateSeedFrame.pack(side=BOTTOM, anchor=W, padx=5, pady=10) if settings is not None: # load values from commandline args settings_to_guivars(settings, guivars) else: # try to load saved settings try: with open('settings.sav') as f: settings = Settings( json.load(f) ) settings.update_seed("") settings_to_guivars(settings, guivars) except: pass show_settings() mainWindow.mainloop() # save settings on close with open('settings.sav', 'w') as outfile: settings = guivars_to_settings(guivars) json.dump(settings.__dict__, outfile)
def __init__(self,parent): chosenFont = font.Font(family='Verdana', size=10, weight='normal') Frame.__init__(self,parent,background="white") self.parent = parent self.parent.title("simple window") self.style = ttk.Style() self.style.theme_use("default") self.centreWindow() self.pack(fill=BOTH,expand=1) # 라벨 표시와 입력 firstNameLabel = Label(self, text="First Name", font=chosenFont) # 폰트설정 firstNameLabel.grid(row=0, column=0, sticky=W + E) lastNameLabel = Label(self, text="Last Name") lastNameLabel.grid(row=1, column=0, sticky=W + E) countryLabel = Label(self, text="Country") countryLabel.grid(row=2, column=0, sticky=W + E) addressLabel = Label(self, text="Address") addressLabel.grid(row=3, column=0, pady=10, sticky=W + E + N) firstNameText = Entry(self, width=20) firstNameText.grid(row=0, column=1, padx=5, pady=5, ipady=2, sticky=W + E) lastNameText = Entry(self, width=20) lastNameText.grid(row=1, column=1, padx=5, pady=5, ipady=2, sticky=W + E) addressText = Text(self, padx=5, pady=5, width=20, height=6) addressText.grid(row=3, column=1, padx=5, pady=5, sticky=W) # 내가 필요한 클릭 스크롤바 self.countryVar = StringVar() self.countryCombo = ttk.Combobox(self, textvariable=self.countryVar) self.countryCombo['values'] = ('United States', 'United Kingdom', 'France') self.countryCombo.current(1) self.countryCombo.bind("<<ComboboxSelected>>", self.newCountry) self.countryCombo.grid(row=2, column=1, padx=5, pady=5, ipady=2, sticky=W) # 좌우 스크롤로 값 변경 self.salaryVar = StringVar() salaryLabel = Label(self, text="Salary:",textvariable=self.salaryVar) salaryLabel.grid(row=0, column=2,columnspan=2, sticky=W+E) salaryScale = Scale(self, from_=0,to=1, orient=HORIZONTAL, resolution=1,command=self.onSalaryScale) salaryScale.grid(row=1, column=2,columnspan=1, sticky=W+E) # 체크박스 기능 self.fullTimeVar = IntVar() fullTimeCheck = Checkbutton(self, text="Full-time?", variable=self.fullTimeVar, command=self.fullChecked) fullTimeCheck.grid(row=2, column=2, columnspan=2, sticky=W + E) # - self.titleVar = StringVar() self.titleVar.set("TBA") Label(self, textvariable=self.titleVar).grid( row=4, column=1, sticky=W + E ) # a reference to the label is not retained title = ['Programmer', 'Developer', 'Web Developer', 'Designer'] titleList = Listbox(self, height=5) for t in title: titleList.insert(END, t) titleList.grid(row=3, column=2, columnspan=2, pady=5, sticky=N + E + S + W) titleList.bind("<<ListboxSelect>>", self.newTitle) # 버튼 okBtn = Button(self, text="OK", width=10, command=self.onConfirm) okBtn.grid(row=4, column=2, padx=5, pady=3, sticky=W + E) closeBtn = Button(self, text="Close", width=10, command=self.onExit) closeBtn.grid(row=4, column=3, padx=5, pady=3, sticky=W + E)
def __init__(self, parent, controller): tk.Frame.__init__(self, parent, bg="#1959B3") self.controller = controller canvas = Canvas(self, bg="#1959B3", height=583, width=673) canvas.pack() canvas.create_line(320, 157, 320, 500, dash=(6, 4), fill="white") #Linea punteada canvas.place(x=10, y=10) #Linea externa label = tk.Label(self, text="OpenBCI", font=("Times", 70), fg="white", bg="#1959B3") label.pack(side="top", fill="x", pady=10) label.place(relx=0.32, rely=0.07) label2 = tk.Label(self, text="Camila Andrea Navarrete Cataño", fg="white", bg="#1959B3", font=("Verdana")) label2.pack(side="bottom", fill="x", pady=10) label2.place(relx=0.08, rely=0.96) label3 = tk.Label(self, text="Seleccionar puerto USB:", font=("Helvetica", 17), fg="white", bg="#1959B3") label3.pack(fill="x", pady=5) label3.place(relx=0.50, rely=0.31) label4 = tk.Label(self, text="Bluetooth:", font=("Helvetica", 17), fg="white", bg="#1959B3") label4.pack(fill="x", pady=5) label4.place(relx=0.50, rely=0.39) label6 = tk.Label(self, text="Seleccionar tiempo de grabación:", font=("Helvetica", 17), fg="white", bg="#1959B3") label6.pack(side="top", fill="x", pady=10) label6.place(relx=0.50, rely=0.58) label7 = tk.Label( self, text= "Este programa le ayudará a interactuar con las interfaces cerebro - computadora mediante el movimiento de una barra virtual y el robot mBot Ranger, en tiempo real." " En la siguiente página podra visualizar la señal de EEG del canal 8, el espectro de frecuencias y la barra ", font=("Helvetica", 17), fg="white", bg="#1959B3", justify="left", wraplength=250) label7.pack(side="top", fill="x", pady=10) label7.place(relx=0.1, rely=0.35) button1 = tk.Button(self, text="Iniciar", command=lambda: controller.show_frame("PageOne")) button1.pack() button1.place(relx=0.64, rely=0.81, height=50, width=80) button3 = tk.Button(self, text="OK", command=self.callbackserial) button3.pack() button3.place(relx=0.87, rely=0.46, height=35, width=60) button2 = tk.Button(self, text="OK", command=self.callbacktime) button2.pack() button2.place(relx=0.87, rely=0.67, height=35, width=60) number = tk.StringVar() self.combo = ttk.Combobox( self, textvariable=number) #Seleccionar puerto serial self.combo.place(x=355, y=285, width=240) self.combo["values"] = serial_ports() self.slider = Scale(self, orient='horizontal', from_=1, to=10, tickinterval=1) #Barra de tiempos self.slider.pack() self.slider.place(relx=0.50, rely=0.65, width=240)
def _entry(self): '''Method for creating widgets for collecting user input.''' # N (no of turtles) dim = 30 * 30 self._N_label = Label(self._entryPane, anchor='w', justify='left', text="N:", relief='raised', width=12, height=1, font="italic 20") self._N_label.grid(row=0, column=1, ipady=14) self._N = Scale(self._entryPane, from_=1, to=dim - 50, resolution=1, bd=3, relief='sunken', orient='horizontal', length=235, tickinterval=849) self._N.set(400) self._N.grid(row=0, column=2) # Ticks (lenght of simulation) self._Ticks_label = Label(self._entryPane, anchor='w', justify='left', text="Time:", relief='raised', width=12, height=1, font="bold 20") self._Ticks_label.grid(row=1, column=1, ipady=14) self._Ticks = Scale(self._entryPane, from_=10, to=1000, resolution=1, bd=3, relief='sunken', orient='horizontal', length=235, tickinterval=990) self._Ticks.set(500) self._Ticks.grid(row=1, column=2) # % similar wanted self._Similar_label = Label(self._entryPane, anchor='w', justify='left', text="Similar wanted:", relief='raised', width=12, height=1, font="bold 20") self._Similar_label.grid(row=2, column=1, ipady=14) self._Similar = Scale(self._entryPane, from_=0.0, to=1.0, resolution=0.01, bd=3, relief='sunken', orient='horizontal', length=235, tickinterval=1) self._Similar.set(0.76) self._Similar.grid(row=2, column=2)
def __init__(self): # MQTT Client self.client = mqtt.Client(client_id="simulator") self.client.connect("localhost", port=1883) # Window settings self.window = Tk() self.window.title(cnst.WINDOW_TITLE) self.window.geometry( str(cnst.WINDOW_WIDTH) + 'x' + str(cnst.WINDOW_HEIGHT)) # Temperature slider self.temp_lbl = Label(self.window, text="Temperature") self.temp_lbl.pack(anchor=CENTER) self.temp_var = DoubleVar(value=cnst.DEFAULT_TEMP) self.slider_temperature = Scale(self.window, variable=self.temp_var, from_=cnst.MIN_TEMP, to_=cnst.MAX_TEMP, resolution=-1, orient=HORIZONTAL) self.slider_temperature.pack(anchor=CENTER) # API Temperature slider self.api_temp_lbl = Label(self.window, text="API Temperature") self.api_temp_lbl.pack(anchor=CENTER) self.api_temp_var = DoubleVar(value=cnst.DEFAULT_TEMP) self.slider_api_temperature = Scale(self.window, variable=self.api_temp_var, from_=cnst.MIN_TEMP, to_=cnst.MAX_TEMP, resolution=-1, orient=HORIZONTAL) self.slider_api_temperature.pack(anchor=CENTER) # API Min temperature slider self.api_min_temp_lbl = Label(self.window, text="API Min Temperature") self.api_min_temp_lbl.pack(anchor=CENTER) self.api_min_temp_var = DoubleVar(value=cnst.DEFAULT_TEMP) self.slider_api_min_temperature = Scale(self.window, variable=self.api_min_temp_var, from_=cnst.MIN_TEMP, to_=cnst.MAX_TEMP, resolution=-1, orient=HORIZONTAL) self.slider_api_min_temperature.pack(anchor=CENTER) # API Max temperature slider self.api_max_temp_lbl = Label(self.window, text="API Max Temperature") self.api_max_temp_lbl.pack(anchor=CENTER) self.api_max_temp_var = DoubleVar(value=cnst.DEFAULT_TEMP) self.slider_api_max_temperature = Scale(self.window, variable=self.api_max_temp_var, from_=cnst.MIN_TEMP, to_=cnst.MAX_TEMP, resolution=-1, orient=HORIZONTAL) self.slider_api_max_temperature.pack(anchor=CENTER) # API Feels temperature slider self.api_feels_temp_lbl = Label(self.window, text="API Feels Temperature") self.api_feels_temp_lbl.pack(anchor=CENTER) self.api_feels_temp_var = DoubleVar(value=cnst.DEFAULT_TEMP) self.slider_api_feels_temperature = Scale( self.window, variable=self.api_feels_temp_var, from_=cnst.MIN_TEMP, to_=cnst.MAX_TEMP, resolution=-1, orient=HORIZONTAL) self.slider_api_feels_temperature.pack(anchor=CENTER) # API Humidity slider self.api_humidity_lbl = Label(self.window, text="API Humidity") self.api_humidity_lbl.pack(anchor=CENTER) self.api_humidity_var = DoubleVar(value=cnst.DEFAULT_HUMIDITY) self.slider_api_humidity = Scale(self.window, variable=self.api_humidity_var, from_=cnst.MIN_HUMIDITY, to_=cnst.MAX_HUMIDITY, resolution=-1, orient=HORIZONTAL) self.slider_api_humidity.pack(anchor=CENTER) # Luminosity slider self.luminosity_lbl = Label(self.window, text="Luminosity") self.luminosity_lbl.pack(anchor=CENTER) self.luminosity_var = DoubleVar(value=cnst.DEFAULT_LUMINOSITY) self.slider_luminosity = Scale(self.window, variable=self.luminosity_var, from_=cnst.MIN_LUMINOSITY, to_=cnst.MAX_LUMINOSITY, resolution=-1, orient=HORIZONTAL) self.slider_luminosity.pack(anchor=CENTER) # Humidity slider self.humidity_lbl = Label(self.window, text="Humidity") self.humidity_lbl.pack(anchor=CENTER) self.humidity_var = DoubleVar(value=cnst.DEFAULT_HUMIDITY) self.slider_humidity = Scale(self.window, variable=self.humidity_var, from_=cnst.MIN_HUMIDITY, to_=cnst.MAX_HUMIDITY, resolution=-1, orient=HORIZONTAL) self.slider_humidity.pack(anchor=CENTER) # Noise slider self.noise_lbl = Label(self.window, text="Noise") self.noise_lbl.pack(anchor=CENTER) self.noise_var = DoubleVar(value=cnst.DEFAULT_NOISE) self.slider_noise = Scale(self.window, variable=self.noise_var, from_=cnst.MIN_NOISE, to_=cnst.MAX_NOISE, resolution=-1, orient=HORIZONTAL) self.slider_noise.pack(anchor=CENTER) # Air Quality slider self.airquality_lbl = Label(self.window, text="AirQuality") self.airquality_lbl.pack(anchor=CENTER) self.airquality_var = DoubleVar(value=cnst.DEFAULT_AIRQUALITY) self.slider_airquality = Scale(self.window, variable=self.airquality_var, from_=cnst.MIN_AIRQUALITY, to_=cnst.MAX_AIRQUALITY, resolution=-1, orient=HORIZONTAL) self.slider_airquality.pack(anchor=CENTER) # Button to publish the data self.submit_btn = Button(self.window, text="Simulate", command=self.publish) self.submit_btn.pack(anchor=CENTER)
def __init__(self): self.root = ThemedTk(theme="radiance") INIT_WIDTH, INIT_HEIGHT = self.root.winfo_screenwidth( ), self.root.winfo_screenheight() boldStyle = ttk.Style() boldStyle.configure("Bold.TButton", font=('Sans', '12', 'bold')) #icon_loc = os.path.join(os.getcwd(),ICON_NAME) #img = ImageTk.PhotoImage(master = self.root, file=icon_loc) #self.root.wm_iconbitmap(img) #self.root.ttk.call('wm', 'iconphoto', self.root._w, img) self.root.title("Form Labeller") self.root.maxsize(INIT_WIDTH, INIT_HEIGHT) self.supported_formats = SUPPORTED_FORMATS self.left_frame = Frame(self.root, width=BUTTON_WIDTH) self.top_frame1 = Frame(self.left_frame, width=BUTTON_WIDTH, height=int(INIT_HEIGHT / 2)) self.top_frame = Frame(self.left_frame, width=BUTTON_WIDTH, height=INIT_HEIGHT - int(INIT_HEIGHT / 2)) self.bottom_frame = Frame(self.root, width=INIT_WIDTH - BUTTON_WIDTH) self.load_image_directory_button = Button(self.top_frame1, text='Open Folder', command=self.load_directory, width=int(BUTTON_WIDTH), style="Bold.TButton") self.load_image_directory_button.grid(row=OPEN_FOLDER_ROW, columnspan=2, sticky=tk.W + tk.E) self.prev_img_button = Button(self.top_frame1, text='← Prev', command=self.previous_img, state=tk.DISABLED, width=int(BUTTON_WIDTH / 2), style="Bold.TButton") self.prev_img_button.grid(row=PREV_ROW, column=0, sticky=tk.W + tk.E) self.next_img_button = Button(self.top_frame1, text='Next → ', command=self.next_img, width=int(BUTTON_WIDTH / 2), style="Bold.TButton") self.next_img_button.grid(row=NEXT_COL, column=1, sticky=tk.W + tk.E) self.save_image_button = Button(self.top_frame1, text='Save ', command=self.saver, width=int(BUTTON_WIDTH), style="Bold.TButton") self.save_image_button.grid(row=SAVE_ROW, columnspan=2, sticky=tk.W + tk.E) self.delete_poly_button = Button(self.top_frame, text='Delete Selected', command=self.delete_selected, width=int(BUTTON_WIDTH), style="Bold.TButton") self.delete_poly_button.grid(row=DEL_SELECTED_ROW, columnspan=2, sticky=tk.W + tk.E) self.type_choices = TYPE_CHOICES self.variable = StringVar(self.top_frame) self.variable.set(self.type_choices[0]) self.type_options = OptionMenu(self.top_frame, self.variable, *self.type_choices, style="Bold.TButton") self.type_options.config(width=int(BUTTON_WIDTH / 2)) self.type_options.grid(row=DROP_DOWN_ROW, column=0) self.save_type_button = Button(self.top_frame, text='Save Type', command=self.save_type, width=int(BUTTON_WIDTH / 2), style="Bold.TButton") self.save_type_button.grid(row=SAVE_TYPE_ROW, column=1, sticky=tk.W + tk.E) self.deselect_all_button = Button(self.top_frame, text='Deselect All', command=self.deselect_all, width=BUTTON_WIDTH, style="Bold.TButton") self.deselect_all_button.grid(row=DESELECT_ALL_ROW, columnspan=2, sticky=tk.W + tk.E) self.select_all_button = Button(self.top_frame, text='Select All', command=self.select_all, width=BUTTON_WIDTH, style="Bold.TButton") self.select_all_button.grid(row=SELECT_ALL_ROW, columnspan=2, sticky=tk.W + tk.E) self.draw_poly_button = Button(self.top_frame, text='Draw Poly', command=self.draw_poly_func, width=BUTTON_WIDTH, style="Bold.TButton") self.draw_poly_button.grid(row=DRAW_POLY_ROW, columnspan=2, sticky=tk.W + tk.E) self.draw_rect_button = Button(self.top_frame, text='Draw Rectangle', command=self.draw_rect_func, width=BUTTON_WIDTH, style="Bold.TButton") self.draw_rect_button.grid(row=DRAW_RECT_ROW, columnspan=2, sticky=tk.W + tk.E) self.delete_all_button = Button(self.top_frame, text='Delete All', command=self.delete_all, width=BUTTON_WIDTH, style="Bold.TButton") self.save_poly_button = Button(self.top_frame, text='Save Poly', command=self.save_drawing, width=int(BUTTON_WIDTH / 2), style="Bold.TButton") self.discard_poly_button = Button(self.top_frame, text='Discard Poly', command=self.discard_drawing, width=int(BUTTON_WIDTH / 2), style="Bold.TButton") self.save_rect_button = Button(self.top_frame, text='Save Rect', command=self.save_drawing, width=int(BUTTON_WIDTH / 2), style="Bold.TButton") self.discard_rect_button = Button(self.top_frame, text='Discard Rect', command=self.discard_drawing, width=int(BUTTON_WIDTH / 2), style="Bold.TButton") self.show_type_button = Button(self.top_frame, text='Show Type', command=self.show_type, width=int(BUTTON_WIDTH / 2), style="Bold.TButton") self.show_type_button.grid(row=SHOW_TYPE_ROW, column=0, columnspan=1, sticky=tk.W + tk.E) self.hide_type_button = Button(self.top_frame, text='Hide Type', command=self.hide_type, width=int(BUTTON_WIDTH / 2), style="Bold.TButton") self.hide_type_button.grid(row=HIDE_TYPE_ROW, columnspan=1, column=1, sticky=tk.W + tk.E) self.make_tight_button = Button(self.top_frame, text='Make Tight', command=self.make_tight, width=int(BUTTON_WIDTH / 2), style="Bold.TButton") self.make_tight_button.grid(row=MAKE_TIGHT_ROW, columnspan=2, column=0, sticky=tk.W + tk.E) self.threshold_scale = Scale(self.top_frame, from_=0, to=255, orient=HORIZONTAL, width=int(BUTTON_WIDTH / 2), label="Binary Threshold") self.threshold_scale.set(128) self.threshold_scale.grid(row=THRESHOLD_ROW, columnspan=2, column=0, sticky=tk.W + tk.E) self.tight_save_button = Button(self.top_frame, text='Accept Tight', command=self.save_tight) self.tight_discard_button = Button(self.top_frame, text='Discard Tight', command=self.discard_tight) self.canvas = Canvas(self.bottom_frame, width=INIT_WIDTH - BUTTON_WIDTH, height=INIT_HEIGHT, borderwidth=1) self.image_name = None #self.image_path = os.path.join('imgs','img1.jpg') self.image_dir = None self.images_in_dir = None self.curr_idx = None self.img_cnv = None #self.img_cnv = ImageOnCanvas(self.root,self.canvas,self.image_path) self.drawing_obj = None self.tight_box_obj = None self.left_frame.pack(side=tk.LEFT) self.top_frame1.pack(side=tk.TOP) self.top_frame.pack(side=tk.BOTTOM) self.bottom_frame.pack(side=tk.LEFT) self.canvas.pack() self.hide_buttons() self.load_image_directory_button.config(state="normal")
def init(): #setting variables to global scope that need to be accessed outside of init() global curve_smoothing_slider, horizontal_shift_slider, vertical_shift_slider, image_canvas, bounds_button, preview_button, export_button, baseline_choice, im, imload, peak_num_choice left_frame = Frame(root) left_frame.pack(side="left") middle_frame = Frame(root) middle_frame.pack(side="right") right_frame = Frame(root) right_frame.pack(side="right") sub_middle_frame = Frame(middle_frame) sub_middle_frame.pack(side="bottom", pady=(0, 10)) #left side inputs Button(left_frame, text="Help", command=help_window).pack(anchor='nw', padx=(10, 0), pady=(10, 10)) Button(left_frame, text="Select a file", command=select_file).pack(anchor='n', pady=(0, 15)) Label(left_frame, text="Threshold and Crop", justify="center").pack() threshold_slider = Scale(left_frame, orient="horizontal", length=200, from_=1.0, to=30.0, command=update_thresh) threshold_slider.pack(padx=20, pady=(0, 10)) #button for selecting the region of interest (ROI), this ROI is then analyzed for the graph Button(left_frame, text="Select a ROI", command=find_roi).pack(pady=(0, 15)) #slider for determining how much the curve is smoothed out (typically has very many oscillations and spikes) Label(left_frame, text="Curve Smoothing", justify="center", padx=20).pack() curve_smoothing_slider = Scale(left_frame, orient="horizontal", length=200, from_=0.0, to=30.0, command=update_smooth) curve_smoothing_slider.pack(padx=20, pady=(0, 20)) curve_smoothing_slider['state'] = 'disable' #determines whether the baselining will happen from the lowest value (from both curves lowest val is zeroed) or midpoint (average value of both is zeroed and then lowest value brought to zero) baseline_choice = tkinter.IntVar() baseline_choice.set(1) modes = [("Midpoint", 101), ("Lowest Value", 102)] Label(left_frame, text="Baseline from:", justify="left", padx=20).pack() for mode, val in modes: Radiobutton(left_frame, text=mode, indicatoron=1, command=update_baseline, justify="left", padx=20, variable=baseline_choice, value=val).pack(anchor='w') #a multiple choice field for how many peaks you want analyzed at the current moment peak_num_choice = tkinter.IntVar() peak_num_choice.set(1) modes = [("One Peak", 101), ("Two Peaks", 102)] Label(left_frame, text="How many peaks to compare:", justify="left", padx=20).pack(pady=(20, 0)) for mode, val in modes: Radiobutton(left_frame, text=mode, indicatoron=1, command=update_peaks, justify="left", padx=20, variable=peak_num_choice, value=val).pack(anchor='w') #bottom row inputs bounds_button = Button(left_frame, text="Choose Bounds", command=choose_peak_bounds) bounds_button.pack(side="left", padx=(15, 10), pady=(30, 10)) bounds_button["state"] = "disable" #building the preview button, used to look at the current strip being analyzed preview_button = Button(left_frame, text="Preview", command=preview_graph) preview_button.pack(side="left", padx=(10, 10), pady=(30, 10)) preview_button["state"] = "disable" #building the export button, disabled at first until you have data to export export_button = Button(left_frame, text="Export", command=save_graph) export_button.pack(side="left", padx=(10, 0), pady=(30, 10)) export_button["state"] = "disable" #building the horizontal shift (used to shift one line left and right) Label(sub_middle_frame, text="Horizontal Shift").grid(column=0, row=1, padx=(0, 20)) horizontal_shift_slider = Scale(sub_middle_frame, orient="horizontal", length=300, from_=-10.0, to=10.0, command=update_h_shift) horizontal_shift_slider.grid(column=0, row=0, padx=(0, 20)) horizontal_shift_slider['state'] = 'disable' #building the vertical shift (shifts one line up and down) Label(sub_middle_frame, text="Vertical Shift").grid(column=1, row=1) vertical_shift_slider = Scale(sub_middle_frame, orient="horizontal", length=300, from_=-10.0, to=10.0, command=update_v_shift) vertical_shift_slider.grid(column=1, row=0) vertical_shift_slider['state'] = 'disable' #right side graph width, height = plot_disp_size image_canvas = Canvas(middle_frame, width=width, height=height) image_canvas.pack(padx=(20, 0), pady=(0, 0)) #blanks canvas with a white frame, image_canvas is modified to add the graph onto screen each time im = ImageTk.PhotoImage(Image.new("RGB", plot_disp_size, (255, 255, 255))) #PIL solution imload = image_canvas.create_image(0, 0, image=im, anchor='nw')
def __init__(self, parent, data, stepname): super().__init__(parent, data, stepname) lbl1 = Label( self, text= 'Click on each scale at the point that best indicates your experience of the task' ) lbl1.grid(row=1, column=1) lbl2 = Label(self, text="(1=extremely low,5=extremely high)") lbl2.grid(row=2, column=1) ########################### lbl3 = Label( self, text= 'Mental demand: How much mental and perceptual activity was required?' ) lbl3.grid(row=3, column=1) mentalscale = Scale(self, from_=1, to=10, length=200, tickinterval=1, orient=HORIZONTAL, command=self.updatemental) mentalscale.set(5) mentalscale.grid(row=3, column=2) self.data[self.stepname]["mental demand weight"] = mentalscale.get() ########### lbl4 = Label( self, text='Physical demand: How much physical activity was required?') lbl4.grid(row=4, column=1) physicalscale = Scale(self, from_=1, to=10, length=200, tickinterval=1, orient=HORIZONTAL, command=self.updatephysical) physicalscale.set(5) physicalscale.grid(row=4, column=2) self.data[ self.stepname]["physical demand weight"] = physicalscale.get() ########### ########### lbl5 = Label( self, text= 'Temporal demand: How much time pressure did you feel due to the rate of pace at which the tasks or task elements occurred?' ) lbl5.grid(row=5, column=1) temporalscale = Scale(self, from_=1, to=10, length=200, tickinterval=1, orient=HORIZONTAL, command=self.updatetemporal) temporalscale.set(5) temporalscale.grid(row=5, column=2) self.data[ self.stepname]["temporal demand weight"] = temporalscale.get() ########### ########### lbl6 = Label( self, text= 'Performance: How successful do you think you were in accomplishing the goals?' ) lbl6.grid(row=6, column=1) perforscale = Scale(self, from_=1, to=10, length=200, tickinterval=1, orient=HORIZONTAL, command=self.updateperformance) perforscale.set(5) perforscale.grid(row=6, column=2) self.data[self.stepname]["performance weight"] = perforscale.get() ########### ########### lbl7 = Label( self, text= 'Effort: How hard did you have to work (mentally and physically) to accomplish your level of performance?' ) lbl7.grid(row=7, column=1) effortscale = Scale(self, from_=1, to=10, length=200, tickinterval=1, orient=HORIZONTAL, command=self.updateeffort) effortscale.set(5) effortscale.grid(row=7, column=2) self.data[self.stepname]["effort weight"] = effortscale.get() ########### ########### lbl8 = Label( self, text= 'Frustration: How insecure, discouraged, irritated, stressed,and annoyed were you?' ) lbl8.grid(row=8, column=1) frustrationscale = Scale(self, from_=1, to=10, length=200, tickinterval=1, orient=HORIZONTAL, command=self.updatefrustration) frustrationscale.set(5) frustrationscale.grid(row=8, column=2) self.data[self.stepname]["frustration weight"] = frustrationscale.get() ########### self.data[self.stepname]["choose mental times"] = 0 self.data[self.stepname]["choose physical times"] = 0 self.data[self.stepname]["choose temporal times"] = 0 self.data[self.stepname]["choose performance times"] = 0 self.data[self.stepname]["choose effort times"] = 0 self.data[self.stepname]["choose frustration times"] = 0
def __init__(self, master=None): """ Constructor """ Frame.__init__(self, master, name='pvApplication', bg='black', padx=5, pady=5) # set black background, pad sides with 15 points, top/bottom 5 points # fill=BOTH fills in padding with background color # w/o fill=BOTH padding is default color # side=TOP is the default self.pack(fill=BOTH) master.resizable(False, False) # not resizable in x or y master.title(PVAPP_TXT) # set title bar of master (a.k.a. root) master.protocol("WM_DELETE_WINDOW", self._quit) # close window to quit self.validationConstants = self.readJSON('validationConstants') self.messagetext = self.readJSON('messagetext' + '.' + LANGUAGE) MAX_STRINGS = self.validationConstants["pvapplication"]["numStrs"] MAX_MODULES = self.validationConstants["pvapplication"]["numMods"] MAX_SUNS = self.validationConstants["pvapplication"]["sysEe"] CAPTION_FONT = nametofont('TkCaptionFont') # font for titles # PVsystem pvSys = self.pvSys = PVsystem() # variables numStrs = self.numStrs = IntVar(self, NUMBERSTRS, 'numStrs') numMods = self.numMods = IntVar(self, NUMBERMODS, 'numMods') numCells = self.numCells = IntVar(self, NUMBERCELLS, 'numCells') txtIsys = self.txtIsys = DoubleVar(self, name='txtIsys') txtVsys = self.txtVsys = DoubleVar(self, name='txtVsys') txtPsys = self.txtPsys = DoubleVar(self, name='txtPsys') txtImp = self.txtImp = StringVar(self, name='txtImp') txtVmp = self.txtVmp = StringVar(self, name='txtVmp') txtPmp = self.txtPmp = StringVar(self, name='txtPmp') txtIsc = self.txtIsc = StringVar(self, name='txtIsc') txtVoc = self.txtVoc = StringVar(self, name='txtVoc') txtFF = self.txtFF = StringVar(self, name='txtFF') txtEff = self.txtEff = StringVar(self, name='txtEff') sysEe = self.sysEe = DoubleVar(self, 1, name='sysEe') txtImp.set("{:7.3f}".format(self.pvSys.Imp)) # [A] txtVmp.set("{:7.3f}".format(self.pvSys.Vmp)) # [V] txtPmp.set("{:7.3f}".format(self.pvSys.Pmp / 1000)) # [kW] txtIsc.set("{:7.3f}".format(self.pvSys.Isc)) # [A] txtVoc.set("{:7.3f}".format(self.pvSys.Voc)) # [V] txtFF.set("{:7.3f}".format(self.pvSys.FF * 100)) # [%] txtEff.set("{:7.3f}".format(self.pvSys.eff * 100)) # [%] self.msgtext = StringVar(self, READY_MSG, 'msgtext') # must register vcmd and invcmd as Tcl functions vcmd = (self.register(self.validateWidget), '%d', '%i', '%P', '%s', '%S', '%v', '%V', '%W') invcmd = (self.register(self.invalidWidget), '%d', '%i', '%P', '%s', '%S', '%v', '%V', '%W') # SP logo # convert image to tk-compatible format (.gif, .pgm, or .ppm) self.SPlogo = ImageTk.PhotoImage(Image.open(SPLOGO)) # bg='black' fills extra space with black # anchor=W aligns photoimage on left side, NW is no different # padding is ignored by images, use borderwidth Label(self, image=self.SPlogo, borderwidth=5, bg='black', anchor=W).pack(fill=BOTH) # fill=BOTH expands the photoimage to fill parent frame # w/o fill=BOTH photoimage is centered in frame even with anchor=W # Intro text introText = 'PVmismatch calculates I-V and P-V curves as well as the' introText += ' max power point (MPP) for any sized system.\nSet the' introText += ' number of strings in the system, the number of modules' introText += ' per string and the number cells per module.' # anchor=W aligns message on left side, NW is no different # fg='white' sets text color to white, default is black, so it doesn't # show on black background # default aspect is 150%, about as wide as high, or set width>0 Message(self, text=introText, width=750, bg='black', fg='white', anchor=W).pack(fill=BOTH) # fill=BOTH expands the message to fill parent frame # w/o fill=BOTH message is centered in frame even with anchor=W # PVsystem frame pvSysFrame = self.pvSysFrame = Frame(master, name='pvSysFrame') # fill=BOTH keeps widgets in frame on left when window is resized pvSysFrame.pack(fill=BOTH) # PVsystem matplotlib figure canvas self.pvSysPlotFrame = Frame(pvSysFrame, name='pvSysPlotFrame') pvSysPlotFrame = self.pvSysPlotFrame pvSysPlotFrame.pack(side=RIGHT) pvSysPlot = self.pvSysPlot = pvSys.plotSys() self.pvSysFigCanvas = FigureCanvasTkAgg(pvSysPlot, master=pvSysPlotFrame, resize_callback=None) pvSysFigCanvas = self.pvSysFigCanvas pvSysFigCanvas.get_tk_widget()._name = 'pvSysFigCanvas' # IGNORE:W0212 pvSysFigCanvas.show() # NB: FigureCanvasTkAgg._tkcanvas is FigureCanvasTkAgg.get_tk_widget() pvSysFigCanvas.get_tk_widget().pack(fill=BOTH) pvSysToolbar = NavigationToolbar2TkAgg(pvSysFigCanvas, pvSysPlotFrame) pvSysToolbar.update() pvSysToolbar.pack(fill=BOTH) # PVsystem data frame pvSysDataFrame = self.pvSysDataFrame = Frame(pvSysFrame, name='pvSysDataFrame') pvSysDataFrame.pack(side=LEFT) _row = 0 Label(pvSysDataFrame, text='PVsystem', font=CAPTION_FONT).grid(row=_row, columnspan=3, sticky=W) # number of strings _row += 1 # row 1 Label(pvSysDataFrame, text='Number of Strings').grid(row=_row, columnspan=2, sticky=W) # use textVar to set number of strings from LOAD, RESET or default spinboxCnf = {'name': 'numStrSpinbox', 'from_': 1, 'to': MAX_STRINGS, 'textvariable': numStrs, 'width': 5, 'validate': 'all', 'validatecommand': vcmd, 'invalidcommand': invcmd, 'command': self.updatePVsys} self.numStrSpinbox = Spinbox(pvSysDataFrame, cnf=spinboxCnf) self.numStrSpinbox.bind("<Return>", self.keyBinding) self.numStrSpinbox.grid(row=_row, column=2) # number of modules _row += 1 # row 2 Label(pvSysDataFrame, text='Number of Modules').grid(row=_row, columnspan=2, sticky=W) # number of modules spinbox spinboxCnf = {'name': 'numModSpinbox', 'from_': 1, 'to': MAX_MODULES, 'textvariable': numMods, 'width': 5, 'validate': 'all', 'validatecommand': vcmd, 'invalidcommand': invcmd, 'command': self.updatePVsys} self.numModSpinbox = Spinbox(pvSysDataFrame, cnf=spinboxCnf) self.numModSpinbox.bind("<Return>", self.keyBinding) self.numModSpinbox.grid(row=_row, column=2) # number of cells _row += 1 # row 3 Label(pvSysDataFrame, text='Number of Cells').grid(row=_row, columnspan=2, sticky=W) # http://www.logilab.org/card/pylintfeatures#basic-checker # pylint: disable = W0142 self.numCellOption = OptionMenu(pvSysDataFrame, numCells, *MODSIZES, command=self.updatePVsys) # pylint: enable = W0142 self.numCellOption._name = 'numCellOption' # IGNORE:W0212 self.numCellOption.grid(row=_row, column=2) # Advanced Configuration button _row += 1 # row 14 buttonCnf = {'name': 'advCnfButton', 'text': 'Advanced Configuration', 'command': self.startAdvCnf_tk} pvStrButton = self.pvStrButton = Button(pvSysDataFrame, buttonCnf) pvStrButton.grid(row=_row, columnspan=3, sticky=(E + W)) # slider to explore IV curves _row += 1 # row 4, 5 & 6 self.pvSysScale = Scale(pvSysDataFrame, orient=HORIZONTAL, label='I-V Curve', font=CAPTION_FONT, command=self.getIV, showvalue=False, from_=0, to=(pvSys.pvconst.npts - 1)) self.pvSysScale.grid(row=_row, columnspan=3, sticky=(E + W)) # Isys Label(pvSysDataFrame, text='Isys [A]').grid(row=(_row + 1)) self.pvIsys = Entry(pvSysDataFrame, textvariable=txtIsys, width=7) self.pvIsys.grid(row=(_row + 2)) # Vsys Label(pvSysDataFrame, text='Vsys [V]').grid(row=(_row + 1), column=1) self.pvVsys = Entry(pvSysDataFrame, textvariable=txtVsys, width=7) self.pvVsys.grid(row=(_row + 2), column=1) # Psys Label(pvSysDataFrame, text='Psys [kW]').grid(row=(_row + 1), column=2) self.pvPsys = Entry(pvSysDataFrame, textvariable=txtPsys, width=7) self.pvPsys.grid(row=(_row + 2), column=2) # Imp, Vmp & Pmp _row += 3 # row 7, 8, 9, 10, 11 & 12 Label(pvSysDataFrame, text='I-V Characteristics', font=CAPTION_FONT).grid(row=_row, columnspan=3, sticky=W) Label(pvSysDataFrame, text='Imp [A]').grid(row=(_row + 1)) Label(pvSysDataFrame, text='Vmp [V]').grid(row=(_row + 1), column=1) Label(pvSysDataFrame, text='Pmp [kW]').grid(row=(_row + 1), column=2) self.pvImp = Entry(pvSysDataFrame, textvariable=txtImp, width=7, state='readonly') self.pvImp.grid(row=(_row + 2)) self.pvVmp = Entry(pvSysDataFrame, textvariable=txtVmp, width=7, state='readonly') self.pvVmp.grid(row=(_row + 2), column=1) self.pvPmp = Entry(pvSysDataFrame, textvariable=txtPmp, width=7, state='readonly') self.pvPmp.grid(row=(_row + 2), column=2) # Isc, Voc & FF Label(pvSysDataFrame, text='Isc [A]').grid(row=(_row + 3)) Label(pvSysDataFrame, text='Voc [V]').grid(row=(_row + 3), column=1) Label(pvSysDataFrame, text='FF [%]').grid(row=(_row + 3), column=2) self.pvIsc = Entry(pvSysDataFrame, textvariable=txtIsc, width=7, state='readonly') self.pvIsc.grid(row=(_row + 4)) self.pvVoc = Entry(pvSysDataFrame, textvariable=txtVoc, width=7, state='readonly') self.pvVoc.grid(row=(_row + 4), column=1) self.pvFF = Entry(pvSysDataFrame, textvariable=txtFF, width=7, state='readonly') self.pvFF.grid(row=(_row + 4), column=2) Label(pvSysDataFrame, text='Efficiency [%]').grid(row=(_row + 5), columnspan=2) self.pvEff = Entry(pvSysDataFrame, textvariable=txtEff, width=7, state='readonly') self.pvEff.grid(row=(_row + 5), column=2) # set suns _row += 6 # row 13 Label(pvSysDataFrame, text='Irradiance [suns]', font=CAPTION_FONT).grid(row=_row, columnspan=2, sticky=W) # number of modules spinbox spinboxCnf = {'name': 'sunSpinbox', 'from_': 0.2, 'to': MAX_SUNS, 'increment': 0.1, 'textvariable': sysEe, 'width': 5, 'validate': 'all', 'validatecommand': vcmd, 'invalidcommand': invcmd, 'command': self.updatePVsys} self.sunSpinbox = Spinbox(pvSysDataFrame, cnf=spinboxCnf) self.sunSpinbox.bind("<Return>", self.keyBinding) self.sunSpinbox.grid(row=_row, column=2) # PVstring button _row += 1 # row 14 buttonCnf = {'name': 'pvStrButton', 'text': 'PVstring', 'command': self.startPVstring_tk} pvStrButton = self.pvStrButton = Button(pvSysDataFrame, buttonCnf) pvStrButton.grid(row=_row, columnspan=3, sticky=(E + W)) # toolbar toolbar = self.toolbarframe = Frame(master, name='toolbar') toolbar.pack(fill=BOTH) self.QUIT = Button(toolbar, text='Quit', command=self._quit) self.QUIT.pack(side=RIGHT) self.SAVE = Button(toolbar, text='Save', command=self._save) self.SAVE.pack(side=RIGHT) self.LOAD = Button(toolbar, text='Load', command=self._load) self.LOAD.pack(side=RIGHT) self.RESET = Button(toolbar, text='Reset', command=self._reset) self.RESET.pack(side=RIGHT) self.UPDATE = Button(toolbar, text='Update', command=self._update) self.UPDATE.pack(side=RIGHT) self.HELP = Button(toolbar, text='Help', command=self._help) self.HELP.pack(side=RIGHT) self.MESSAGE = Message(toolbar, textvariable=self.msgtext, width=500, fg='red') self.MESSAGE.pack(side=LEFT)