예제 #1
0
    def changeMode(self, *args):
        """
            Changes the available options depending on the user's choice.
            Called by self.options.trace() function.
        :param args: needed arguments for .trace()
        :return: none
        """
        if self.options.get() == "Host":
            #Removes existing entities
            try:
                self.nameEntry.grid_forget()
                self.enterButton.grid_forget()
                self.ipEntry.grid_forget()
                self.portNum.grid_forget()
                self.portLabel.grid_forget()
            except:
                print("Something went wrong :(")

            self.nameTip = ToolTip(self.nameEntry,
                                   "What other users will see you as.")
            self.portTip = ToolTip(self.portLabel,
                                   "The port that others will connect to.")
            self.portTip = ToolTip(self.portNum,
                                   "The port that others will connect to.")
            self.enterTip = ToolTip(self.enterButton, "Create a lobby!")

            self.portLabel.grid(row=0, column=2)
            self.portNum.grid(row=0, column=3)

            self.nameEntry.grid(row=0, column=4)
            self.enterButton['text'] = "Host!"
            self.enterButton['command'] = self.newHost
            self.enterButton.grid(row=0, column=5)
        elif self.options.get() == "User":
            #Removes existing entities
            try:
                self.nameEntry.grid_forget()
                self.enterButton.grid_forget()
                self.portLabel.grid_forget()
                self.portNum.grid_forget()
            except:
                print("Something went wrong :(")

            self.nameTip = ToolTip(self.nameEntry,
                                   "What other users will see you as.")
            self.portTip = ToolTip(self.portLabel,
                                   "The port that you will connect to.")
            self.portTip = ToolTip(self.portNum,
                                   "The port that you will connect to.")
            self.enterTip = ToolTip(self.enterButton, "Enter a lobby!")
            self.ipTip = ToolTip(self.ipEntry, "The hostname to connect to.")

            self.portLabel['text'] = 'Enter a port:'
            self.ipEntry.grid(row=0, column=3, columnspan=2)
            self.portLabel.grid(row=0, column=5)
            self.portNum.grid(row=0, column=6)
            self.nameEntry.grid(row=1, column=4)
            self.enterButton['text'] = "Connect!"
            self.enterButton['command'] = self.newUser
            self.enterButton.grid(row=1, column=5)
예제 #2
0
    def __init__(self):
        """
        This is the constructor for the initial window seen by the user.
        It contains the options for selecting how the user will interact with the chat room
        :return: none
        """
        self.master = Tk()
        self.options = StringVar()
        self.options.set("Choose an option:")
        self.options.trace('w', self.changeMode)
        self.userType = OptionMenu(self.master, self.options, "Host", "User")
        self.userTip = ToolTip(
            self.userType, "Host: Create a lobby for others to join \n"
            "User: Join a lobby with specific hostname and port")
        self.userType.grid(row=0, column=0)
        self.instructionsButton = Button(self.master,
                                         text="Instructions",
                                         command=self.openInstructions)
        self.instructionsButton.grid(row=0, column=1)

        self.ipString = StringVar()
        self.ipString.set("Enter a hostname here!")
        self.ipEntry = Entry(self.master, textvariable=self.ipString, width=25)
        self.nameString = StringVar()
        self.nameString.set("Enter your name here!")
        self.nameEntry = Entry(self.master, textvariable=self.nameString)
        self.enterButton = Button(self.master)
        self.portLabel = Label(self.master, text="Enter your port:")
        self.portNum = Spinbox(self.master, from_=10000, to_=13345, width=7)
        mainloop()
예제 #3
0
 def init_status_bar(self):  # for PyShell instance
     """ Place a status box into the status bar. It is also a clickable toggle."""
     sb = self.editwin.status_bar
     sb.set_label('EventLoop', text="")
     L = sb.labels['EventLoop']
     L.bind('<Button-1>', self.eventloop_toggle)
     self.tooltip = ToolTip.ToolTip(L, TOOLTIP_TEXT)
     self.display_state()
예제 #4
0
    def createDownloaderTab(self, nb):
        frame = self._getFrame("download")

        config = downloadruian.config

        self._getTopLabel(frame, "RÚIAN Downloader umožňuje stáhnout aktuální databázi včetně stahování aktualizací.")
        self.editsRow = 1

        self.addControl(Label(frame, wraplength='4i', justify=LEFT, anchor=N, text="  Adresář se staženými daty:"))
        edit = self.addControl(Entry(frame, bd=1), aSticky=W+E)
        edit.insert(0, config.dataDir)

        CheckVar1 = IntVar()
        C1 = self.addControl(Checkbutton(frame, text = "Rozbalit stažené soubory", variable = CheckVar1, onvalue = 1, offvalue = 0))

        CheckVar2 = IntVar()
        C1 = self.addControl(Checkbutton(frame, text = "Spustit importér po stažení dat", variable = CheckVar2, onvalue = 1, offvalue = 0))

        CheckVar4 = IntVar()
        CheckVar4.set(1)#int(config.ignoreHistoricalData))
        C1 = self.addControl(Checkbutton(frame, text = "Ignorovat historická data", variable = CheckVar4, onvalue = 1, offvalue = 0))

        CheckVar3 = IntVar()
        C1 = self.addControl(Checkbutton(frame, text = "Stahovat automaticky každý den", variable = CheckVar3, onvalue = 1))

        self.addControl(Label(frame, wraplength='4i', justify=LEFT, anchor=N, text="  Čas stahování:"))
        b = self.addControl(Entry(frame, bd=1), aSticky=W)
        b.insert(0, config.automaticDownloadTime)
        ToolTip.ToolTip(b, 'Čas, ve který se mají stahovat denní aktualizace')

        self.editsRow += 1

        neatVar = StringVar()
        self.addControl(Button(frame, text='Stáhni data ', underline=0, command=lambda v=neatVar: self._say_neat(v)), aSticky=E)

        frame.columnconfigure(0, weight=1, uniform=1)
        nb.add(frame, text='Downloader ')
예제 #5
0
    def __init__(self, parent):
        ttk.Frame.__init__(self, parent)

        self.parent = parent
        self.pack(fill=tk.BOTH, expand=True)

        self.folder_queue = queue.Queue()
        # hide images and icons folder for Windows users
        if sys.platform == "win32":
            os.popen("attrib +h .images").close()
            os.popen("attrib +h .icons").close()
            os.popen("attrib +h .data_files").close()
            self.pointer = "hand2"
            choose_info_btn_font = "-size 18"
            field_width = 35
            if not os.path.exists("WG Ad Links") or not os.path.exists("Offline Ad Links"):
                folder_thread = threading.Thread(target=create_results_folders.create_folders, args=[self.folder_queue])
                folder_thread.daemon = True
                folder_thread.start()
        elif sys.platform == "linux":
            self.pointer = "hand2"
            choose_info_btn_font = "-size 16"
            field_width = 30
            home = expanduser('~')
            if not os.path.exists("{}/WG Finder/WG Ad Links".format(home)) or not os.path.exists(
                    "{}/WG Finder/Offline Ad Links".format(home)):
                folder_thread = threading.Thread(target=create_results_folders.create_folders, args=[self.folder_queue])
                folder_thread.daemon = True
                folder_thread.start()
        else:
            self.pointer = "pointinghand"
            choose_info_btn_font = "-size 20"
            field_width = 30
            home = expanduser('~')
            if not os.path.exists("{}/WG Finder/WG Ad Links".format(home)) or not os.path.exists(
                    "{}/WG Finder/Offline Ad Links".format(home)):
                folder_thread = threading.Thread(target=create_results_folders.create_folders, args=[self.folder_queue])
                folder_thread.daemon = True
                folder_thread.start()

        # kills phantomjs process incase user exits program without stopping in first
        atexit.register(self.kill_phantomjs)

        choose_info = ttk.Style()
        choose_info.configure("Choose.TButton", font=choose_info_btn_font, padding=(10, 30, 10, 30))
        self.warning_lbl_style = ttk.Style()
        self.warning_lbl_style.configure('Warning.TLabel', foreground="red")
        self.large_warning_lbl_style = ttk.Style()
        self.large_warning_lbl_style.configure('LargeWarning.TLabel', foreground="red")

        self.window_width = 1

        # create GUI title widgets
        self.title_frame = ttk.Frame(self)
        self.title_frame.columnconfigure(0, weight=1)
        self.title_frame.grid(row=0, column=0, padx=20, pady=(10, 20), sticky=tk.W+tk.E)
        if sys.platform == 'win32':
            self.title_img = Image.open('.images/title.png')
            self.title_photo = ImageTk.PhotoImage(self.title_img)
        elif sys.platform == 'linux':
            self.title_img = Image.open('.images/title.png')
            self.title_photo = ImageTk.PhotoImage(self.title_img)
        else:
            self.title_img = Image.open('.images/title.gif')
            self.title_photo = ImageTk.PhotoImage(self.title_img)
        self.title = ttk.Label(self.title_frame, image=self.title_photo)
        self.title.grid(row=0, column=0)

        #  create Choose Info widgets
        self.choose_info_btn_frame = ttk.Frame(self)
        self.saved_info_btn = ttk.Button(self.choose_info_btn_frame, style="Choose.TButton", cursor=self.pointer,
                                         text="Use saved login details",
                                         command=lambda: self.check_credentials("choose info"))
        self.saved_info_btn_tooltip = ToolTip(self.saved_info_btn, "Log into WG-Gesucht.de with the email and \n"
                                                                   "password you have saved previously and start \n"
                                                                   "searching for new apartments")
        self.update_info_btn = ttk.Button(self.choose_info_btn_frame, style="Choose.TButton", cursor=self.pointer,
                                          text="Update login details",
                                          command=lambda: self.save_login_details("choose info"))
        self.update_info_btn_tooltip = ToolTip(self.update_info_btn, "Update your WG-Gesucht.de password if you have \n"
                                                                     "changed it since running the program last")
        warning_text = "***You seem to have moved or deleted your login info file, if you have moved it, please " \
                       "move it back to the '.data_files' folder, or if you have accidentally deleted it, please " \
                       "email '[email protected].***"
        self.choose_info_warning_var = tk.StringVar()
        self.choose_info_warning_lbl = ttk.Label(self.choose_info_btn_frame, style="Warning.TLabel",
                                                 textvariable=self.choose_info_warning_var)
        self.no_login_warning = ttk.Label(self.choose_info_btn_frame, text=warning_text, style='LargeWarning.TLabel')

        if not os.path.exists(".data_files"):
            os.makedirs(".data_files")
        self.login_info_file = '.data_files/.login_info.json'
        self.login_info = dict()
        if os.path.isfile(self.login_info_file):
            # make login file hidden for Windows users
            if sys.platform == "win32":
                os.popen("attrib +h {}".format(self.login_info_file)).close()
            with open(self.login_info_file) as file:
                self.login_info = json.load(file)
        else:
            with open('.data_files/.login_info.json', 'w', encoding='utf-8') as save:
                json.dump(self.login_info, indent=4, sort_keys=True, fp=save)

        self.check_credentials_queue = queue.Queue()
        self.log_output_queue = multiprocessing.Queue()
        self.main_process = multiprocessing.Process(target=wg_gesucht.start_searching,
                                                    args=[self.login_info, self.log_output_queue])

        #  create login form widgets
        bullet = "\u2022"
        self.form_frame = ttk.Frame(self)
        self.form_frame.columnconfigure(1, weight=1)
        self.email_lbl = ttk.Label(self.form_frame, text="Email: ")
        self.email_var = tk.StringVar()
        self.email_entry = ttk.Entry(self.form_frame, textvariable=self.email_var, width=field_width)
        self.email_var.set(self.login_info.get("email", ""))
        self.password_lbl = ttk.Label(self.form_frame, text="Password: "******"<Return>", lambda event: self.check_credentials('save details'))
        self.phone_number_lbl = ttk.Label(self.form_frame, text="Phone Number: ")
        self.phone_number_var = tk.StringVar()
        self.phone_number_entry = ttk.Entry(self.form_frame, textvariable=self.phone_number_var, width=field_width)
        self.phone_number_entry.bind("<Return>", lambda event: self.check_credentials('save details'))
        self.form_warning_var = tk.StringVar()
        self.form_warning_lbl = ttk.Label(self.form_frame, style='Warning.TLabel', textvariable=self.form_warning_var)
        self.save_button = ttk.Button(self.form_frame, text="Save and Start", cursor=self.pointer,
                                      command=lambda: self.check_credentials('save details'))
        self.form_back_btn = ttk.Button(self.form_frame, text="Back", cursor=self.pointer,
                                        command=lambda: self.choose_info("save details"))

        #  create log window widgets
        self.stop_restart_frame = ttk.Frame(self)
        self.log_stop_button = ttk.Button(self.stop_restart_frame, text="Stop", cursor=self.pointer, command=self.stop)
        self.log_back_button = ttk.Button(self.stop_restart_frame, text="Back", cursor=self.pointer,
                                          command=lambda: self.choose_info("log window"))
        self.log_restart_button = ttk.Button(self.stop_restart_frame, text="Restart", cursor=self.pointer,
                                             command=lambda: self.log_window("restart"))
        self.log_frame = ttk.Frame(self)
        self.log_text = scrolledtext.ScrolledText(self.log_frame, borderwidth=1, relief='sunken', state=tk.DISABLED)

        if self.login_info.get("password", "") == '' or self.login_info.get("phone_number", "") == '':
            self.save_login_details("init")
        else:
            self.choose_info("init")
예제 #6
0
        def create_calculations_window(event, master, circuit):
            pack_settings = self.master_frame.pack_info()
            self.master_frame.pack_forget()

            def go_back():
                self.circuit_frame.pack_forget()
                self.master_frame.pack(pack_settings)

            self.circuit_frame = frame(master,
                                       padx=20,
                                       pady=20,
                                       font='Verdana 11 bold')

            navbar_frame = frame(self.circuit_frame)
            go_back = Button(navbar_frame, text='GO BACK', command=go_back)
            go_back.pack(anchor=W, side=LEFT, pady=1)

            def handler(circuit=circuit, master=navbar_frame):
                return self.info_pop_up(circuit, master)

            help_btn = Button(navbar_frame,
                              bitmap='question',
                              height=26,
                              command=handler)
            help_btn.pack(pady=1, side=RIGHT, padx=1)

            def handler(circuit=circuit):
                return self.plot(circuit)

            refresh = Button(navbar_frame, text='GRAPH', command=handler)
            refresh.pack(anchor=E, pady=1, side=RIGHT)

            Label(self.circuit_frame,
                  text='Circuit attributes {} circuit'.format(circuit)).pack(
                      pady=10)

            labels_frame = frame(self.circuit_frame, font='Verdana 11')

            self.variables = {}
            if circuit == 'RL':
                for text in InputTexts.RL:
                    var = self.variables[text[0]] = StringVar()
                    entry_frame = frame(labels_frame,
                                        side=TOP,
                                        anchor=W,
                                        padx=5)

                    Label(entry_frame,
                          text='{} ({}):  '.format(text[1],
                                                   text[0])).pack(anchor=W,
                                                                  side=LEFT,
                                                                  pady=1,
                                                                  expand=YES)

                    field_frame = frame(entry_frame)
                    entry = Entry(field_frame, textvariable=var, width=10)
                    if text[0].lower() in ['i', 'z', 'θ', 'vr', 'vl', 'xl']:
                        entry.configure(state='disabled')
                    # TODO better validation?
                    entry.pack(pady=1, side=LEFT, anchor=W)
                    unit = Label(field_frame,
                                 text='{}'.format(text[2]),
                                 width=3)
                    unit.pack(side=LEFT, anchor=E)
                    ToolTip(unit, text[3])

                    def handler(event,
                                circuit=circuit,
                                last_updated=text[0].lower()):
                        return self.calculate_method(circuit, last_updated)

                    entry.bind('<FocusOut>', handler)
                    entry.bind('<KeyRelease-Return>', handler)
                # placeholder for chart
                self.chart_frame = frame(self.circuit_frame)
            elif circuit == 'RC':
                for text in InputTexts.RC:
                    var = self.variables[text[0]] = StringVar()
                    entry_frame = frame(labels_frame,
                                        side=TOP,
                                        anchor=W,
                                        padx=5)

                    Label(entry_frame,
                          text='{} ({}):  '.format(text[1],
                                                   text[0])).pack(anchor=W,
                                                                  side=LEFT,
                                                                  pady=1,
                                                                  expand=YES)

                    field_frame = frame(entry_frame)
                    entry = Entry(field_frame, textvariable=var, width=10)
                    if text[0].lower() in ['i', 'z', 'θ', 'vr', 'vc', 'xc']:
                        entry.configure(state='disabled')
                    # TODO better validation?
                    entry.pack(pady=1, side=LEFT, anchor=W)
                    unit = Label(field_frame,
                                 text='{}'.format(text[2]),
                                 width=3)
                    unit.pack(side=LEFT, anchor=E)
                    ToolTip(unit, text[3])

                    def handler(event,
                                circuit=circuit,
                                last_updated=text[0].lower()):
                        return self.calculate_method(circuit, last_updated)

                    entry.bind('<FocusOut>', handler)
                    entry.bind('<KeyRelease-Return>', handler)
                # placeholder for chart
                self.chart_frame = frame(self.circuit_frame)
            else:
                for text in InputTexts.RLC:
                    var = self.variables[text[0]] = StringVar()
                    entry_frame = frame(labels_frame,
                                        side=TOP,
                                        anchor=W,
                                        padx=5)

                    Label(entry_frame,
                          text='{} ({}):  '.format(text[1],
                                                   text[0])).pack(anchor=W,
                                                                  side=LEFT,
                                                                  pady=1,
                                                                  expand=YES)

                    field_frame = frame(entry_frame)
                    entry = Entry(field_frame, textvariable=var, width=10)
                    if text[0].lower() in [
                            'i', 'z', 'θ', 'vr', 'vc', 'xc', 'vl', 'xl'
                    ]:
                        entry.configure(state='disabled')
                    # TODO better validation?
                    entry.pack(pady=1, side=LEFT, anchor=W)
                    unit = Label(field_frame,
                                 text='{}'.format(text[2]),
                                 width=3)
                    unit.pack(side=LEFT, anchor=E)
                    ToolTip(unit, text[3])

                    def handler(event,
                                circuit=circuit,
                                last_updated=text[0].lower()):
                        return self.calculate_method(circuit, last_updated)

                    entry.bind('<FocusOut>', handler)
                    entry.bind('<KeyRelease-Return>', handler)
                # placeholder for chart
                self.chart_frame = frame(self.circuit_frame)
예제 #7
0
    def __init__(self):
        window = Tk()
        window.title("Super Calculator made by Izzan")
        #Lock the window so it can't be resized
        window.minsize(width=300, height=400)
        window.maxsize(width=300, height=400)
        frame1 = Frame(window)
        print(
            'Selamat datang di aplikasi kalkulator saya. Mohon kritik dan saran nya. :)'
        )
        self.memory = '0'  #Calculator memory container
        self.expr = ''  #First operand and equation container
        self.startOfNextOperand = True
        self.enterinput = Entry(frame1,
                                relief=RIDGE,
                                borderwidth=3,
                                width=20,
                                font=('Roboto', 18),
                                bg='white',
                                fg='black')
        self.enterinput.grid(row=0, column=0, columnspan=5)
        buttons = [
            ['CLR', 'MC', 'M+', 'M-',
             'MR'],  #Array of available buttons on the calculator
            ['d', 'e', 'f', '+', '-'],
            ['a', 'b', 'c', '/', '*'],
            ['7', '8', '9', '**', '√'],
            ['4', '5', '6', 'sin', 'cos'],
            ['1', '2', '3', 'tan', 'ln'],
            ['0', '.', '±', '~', '2C'],
            ['x', 'o', '^', '|', '&'],
            ['π', 'int', 'rad', '//', 'exp'],
            ['bin', 'hex', 'oct', '%', '=']
        ]

        #Array of tooltips available when the cursor is on a button
        ToolTips = [[
            'Clear', 'Memory Clear', 'Memory Add', 'Memory Subtract',
            'Memory Recall'
        ], [
            'Letter d', 'Letter e/Euler Number', 'Letter f', 'Add', 'Subtract'
        ], ['Letter a', 'Letter b', 'Letter c', 'Float Divide', 'Multiply'],
                    ['Seven', 'Eight', 'Nine', 'Power by n', 'Square Root'],
                    ['Four', 'Five', 'Six', 'sine(radians)', 'cos(radians)'],
                    ['One', 'Two', 'Three', 'tan(radians)', 'natural log'],
                    [
                        'Zero', 'Decimal point', 'Toggle +- sign',
                        'Bitwise complement', "32-bit 2's Complement"
                    ],
                    [
                        'Letter x', 'Letter o', 'Bitwise XOR', 'Bitwise OR',
                        'Bitwise AND'
                    ],
                    [
                        'Pi', 'Change to Integer', 'Change to radians',
                        'Integer divide', 'Power of E(2,718...)'
                    ],
                    [
                        'Change to binary', 'Change to hexadecimal',
                        'Change to octal', 'Modulo', 'Compute to decimal'
                    ]]

        #Looping for each button and tool tip in the row and column
        for r in range(10):
            for c in range(5):

                def cmd(x=buttons[r][c]):
                    self.click(x)

                b = Button(frame1,
                           text=buttons[r][c],
                           width=2,
                           relief=RAISED,
                           font=("Roboto", 12),
                           command=cmd,
                           bg="maroon",
                           fg="white")
                b.grid(row=r + 5, column=c)
                tip = ToolTip(b, ToolTips[r][c])
        frame1.pack()

        window.mainloop()
예제 #8
0
    def _make_toolbar(self):
        if self.TB is not None:
            return  # toolbar exists

        top = self.editwin.top

        f = Frame(top)
        widgets = self.editwin.top.pack_slaves()
        widgets = list(widgets) # list for Python 3 support
        f.pack(side='top', fill=X, before=widgets[0])  # make toolbar play nicely with CodeContext


        f.config(height=8)
        mvar = [StringVar(top), StringVar(top)]
        Separator = Label

        try:
            osx = (macosxSupport.runningAsOSXApp() or
                    sys.platform == 'darwin')
        except:
            osx = False

        toolbar = [(Button(f, command=lambda: self.toolbar('titles'), text='>',
                           width=1 if not osx else 2),
                    None, 'Show %s Labels' % SUBCODE_STR),

                   (Button(f, command=lambda: self.toolbar('ins'), text='##',
                           width=2 if not osx else 3),
                    None, 'Insert %s Marker' % SUBCODE_STR),

                   (Separator(f), {'fill':Y, 'pady':0, 'padx':4}, None),

                   (Button(f, command=lambda: self.toolbar('minus'), text='-',
                           width=1 if not osx else 2),
                    None, 'Subtract from number by cursor then run %s' % SUBCODE_STR.lower()),

                   (Entry(f, width=6, justify='center', textvar=mvar[0]), {'fill':Y},
                    '+ - value'),

                   (Button(f, command=lambda: self.toolbar('plus'), text='+',
                           width=1 if not osx else 2),
                    None, 'Add to number by cursor then run %s' % SUBCODE_STR.lower()),

                   (Separator(f), {'fill':Y, 'pady':0, 'padx':4}, None),

                   (Button(f, command=lambda: self.toolbar('div'), text='/',
                           width=1 if not osx else 2),
                    None, 'Divide number by cursor then run %s' % SUBCODE_STR.lower()),

                   (Entry(f, width=6, justify='center',
                          textvar=mvar[1]), {'fill':Y},
                    '* / value'),

                   (Button(f, command=lambda: self.toolbar('mult'), text='*',
                           width=1 if not osx else 2),
                    None, 'Multiply number by cursor then run %s' % SUBCODE_STR.lower()),

                   (Separator(f), {'fill':Y, 'pady':0, 'padx':4}, None),

                   (Button(f, command=lambda: self.toolbar('run_subcode'), text='R%s' %
                           SUBCODE_STR[0].upper(),
                           width=2 if not osx else 4),
                    None, 'Run %s' % SUBCODE_STR),

                   (Button(f, command=lambda: self.toolbar('run_subcode_proceed'), text='R%sP' %
                           SUBCODE_STR[0].upper(),
                           width=3 if not osx else 4),
                    None, 'Run %s and Proceed' % SUBCODE_STR),

                   (Button(f, command=lambda: self.toolbar('run_all'), text='RA',
                           width=2 if not osx else 4),
                    None, 'Run All %ss' % SUBCODE_STR),

                   (Separator(f), {'fill':Y, 'pady':0, 'padx':4}, None),

                    ]

        mvar[0].set('1.0')
        mvar[1].set('1.1')
        self.mvar = mvar

        for i, cfg, tooltip  in toolbar:
            if cfg is None:
                cfg = {}
            try:
                i.configure(pady=0, padx=7)
                i.configure(wraplength=0)
                i.configure(borderwidth=1)
            except:  # catch ALL THE ERRORS
                #print 'error',i, cfg, tooltip
                pass
            i.pack(side='left', **cfg)
            if tooltip is not None:
                ToolTip.ToolTip(i, ' %s ' % tooltip)

        self.TB = f
        self.TITLES = toolbar[0][0]  # pointer to the titles button
예제 #9
0
파일: pygraph.py 프로젝트: yisy/pygraph
    def initUI(self):
        """ Initialize the GUI-Elements """
        self.master.title("Formula Plotter")

        self.menu = tk.Menu(self.master)
        self.master.config(menu=self.menu)
        self.helpmenu = tk.Menu(self.menu)
        self.menu.add_cascade(label='Help', menu=self.helpmenu)
        self.helpmenu.add_command(label='Usage', command=self.instructions)

        self.scale_x_min = tk.Scale(self.master,
                                    from_=-500,
                                    to=0,
                                    tickinterval=100,
                                    length=600,
                                    orient='horizontal',
                                    command=self.set_x_min)
        self.scale_x_min.grid(row=4, column=1)
        self.x_min = tk.IntVar()

        self.scale_x_max = tk.Scale(self.master,
                                    from_=0,
                                    to=500,
                                    tickinterval=100,
                                    length=600,
                                    orient='horizontal',
                                    command=self.set_x_max)
        self.scale_x_max.grid(row=5, column=1)
        self.scale_x_max.set(10)
        self.x_max = tk.IntVar()

        self.replot_button = tk.Button(self.master,
                                       text='New plot',
                                       command=self.replot)
        self.replot_button.grid(row=0, column=2)
        ToolTip.ToolTip(self.replot_button,
                        'Clear current plot and draw new function')
        self.updateplot_button = tk.Button(self.master,
                                           text='Add to plot',
                                           command=self.update)
        self.updateplot_button.grid(row=0, column=3)
        ToolTip.ToolTip(self.updateplot_button, 'Draw new plot on existing')

        self.minima_button = tk.Button(self.master,
                                       text='Local Minima',
                                       command=self.minima)
        self.minima_button.grid(row=4, column=2)
        ToolTip.ToolTip(self.minima_button, 'Show local Minima')

        self.maxima_button = tk.Button(self.master,
                                       text='Local Maxima',
                                       command=self.maxima)
        self.maxima_button.grid(row=5, column=2)
        ToolTip.ToolTip(self.maxima_button, 'Show local Maxima')

        self.turning_button = tk.Button(self.master,
                                        text='Turning point',
                                        command=self.turning_point)
        self.turning_button.grid(row=6, column=2)
        ToolTip.ToolTip(self.turning_button, 'Show turning points')

        self.tangent_button = tk.Button(self.master,
                                        text='Tangent',
                                        command=self.tangent)
        self.tangent_button.grid(row=6, column=3)
        ToolTip.ToolTip(self.tangent_button, 'Show tangent at entered value')

        tk.Label(self.master, text='f (x) =').grid(row=0, column=0)
        tk.Label(self.master, text='x minimum').grid(row=4, column=0)
        tk.Label(self.master, text='x maximum').grid(row=5, column=0)
        tk.Label(self.master, text='Enter tangent value').grid(row=4, column=3)

        self.formula = tk.Entry(self.master, width=80)
        self.formula.grid(row=0, column=1)
        self.formula.insert(0, 'sin(x)')
        self.tangent_val = tk.Entry(self.master, width=10)
        self.tangent_val.grid(row=5, column=3)
        self.tangent_val.insert(0, 0)

        fig = plt.figure()
        canvas = FigureCanvasTkAgg(fig, master=self.master)
        toolbar = NavigationToolbar2TkAgg(canvas, self.master)
        canvas.get_tk_widget().grid(row=3, column=1)
        toolbar.grid(row=6, column=1)