예제 #1
0
    def initPlkXYChoice(self):
        labellength = 3

        label = tk.Label(self, text="X")
        label.grid(row=0, column=1)
        label = tk.Label(self, text="Y")
        label.grid(row=0, column=2)

        self.grid_columnconfigure(0, weight=3)
        self.grid_columnconfigure(1, weight=1)
        self.grid_columnconfigure(2, weight=1)

        self.xbuttons = []
        self.ybuttons = []

        for ii, choice in enumerate(pulsar.plot_labels):
            label = tk.Label(self, text=choice)
            label.grid(row=ii + 1, column=0)

            self.xbuttons.append(
                tk.Radiobutton(self,
                               variable=self.xvar,
                               value=choice,
                               command=self.updateChoice))
            self.xbuttons[ii].grid(row=ii + 1, column=1)

            self.ybuttons.append(
                tk.Radiobutton(self,
                               variable=self.yvar,
                               value=choice,
                               command=self.updateChoice))
            self.ybuttons[ii].grid(row=ii + 1, column=2)
예제 #2
0
파일: paredit.py 프로젝트: limyansky/PINT
    def initLayout(self):
        self.choice = tk.StringVar()
        self.prefit = tk.Radiobutton(self,
                                     text='Pre-Fit',
                                     command=self.choose,
                                     variable=self.choice,
                                     value='prefit')
        self.prefit.select()
        self.prefit.grid(row=0, column=0)

        self.postfit = tk.Radiobutton(self,
                                      text='Post-Fit',
                                      command=self.choose,
                                      variable=self.choice,
                                      value='postfit')
        self.postfit.grid(row=0, column=1)
예제 #3
0
    def __init__(self, parent, radio_config, *args, **kwargs):
        tk.Frame.__init__(self, parent)
        self.parent = parent
        self.input_list = []

        frame_ops = funcs.extract_args(kwargs, FRAME_KEYS, FRAME_KEY)
        frame = tk.Frame(self, frame_ops)
        frame.pack(fill='both', expand=True)

        label_ops = funcs.extract_args(kwargs, LABEL_KEYS, LABEL_KEY)
        label = tk.Label(frame, label_ops)

        tvar = tk.StringVar()

        label.pack(side='top', fill='x', expand=True)

        for radio_kwargs in radio_config:
            radio_ops = funcs.extract_args(radio_kwargs, RADIOBUTTON_KEYS,
                                           RADIOBUTTON_KEY)
            radio_ops['variable'] = tvar
            this_radio = tk.Radiobutton(frame, radio_ops)
            this_radio.pack(side='left', fill='x', expand=True)
            self.input_list.append(this_radio)

        self.parent.columnconfigure(0, weight=1)
        self.get = tvar.get
        self.set = tvar.set
        # self.state = lambda: change_state(self.entry)
        self.enable = self._enable
        self.normal = self._enable
        self.disable = self._disable
        self.clear = lambda: funcs.clear(entry)
예제 #4
0
 def __init__(self, parent):
     tkinter.Frame.__init__(self, parent, borderwidth=2, relief=MYRIDGE)
     self.button = tkinter.Radiobutton(
         self, padx=5, pady=5, takefocus=0,
         indicatoron=tkinter.FALSE, highlightthickness=0,
         borderwidth=0, selectcolor=self.cget('bg'))
     self.button.pack()
예제 #5
0
파일: form.py 프로젝트: pigay/brocoli
    def get_widget(self, master):
        frame = FieldContainer(master)

        for v in self.values:
            rb = tk.Radiobutton(frame, text=v, value=v, variable=self.var)
            rb.pack(side=self.side)

        return frame
예제 #6
0
파일: fields.py 프로젝트: wutijat/glazier
    def __init__(self, root, option):
        tk.Frame.__init__(self, root)
        self.label = tk.Label(self, text=option['prompt'])
        self.label.grid(row=0, column=0, padx=20)

        self.state = tk.BooleanVar()
        self.on_button = tk.Radiobutton(self,
                                        text='On',
                                        variable=self.state,
                                        value=True)
        self.off_button = tk.Radiobutton(self,
                                         text='Off',
                                         variable=self.state,
                                         value=False)
        for opt in option['options']:
            if 'default' in opt:
                self.state.set(opt['value'])

        self.on_button.grid(row=0, column=1)
        self.off_button.grid(row=0, column=2)
예제 #7
0
    def get_widget(self, master):
        frame = FieldContainer(master)
        frame.configure(relief=tk.GROOVE, borderwidth=2)

        inner_frame = FieldContainer(frame)
        inner_frame.pack()

        for v in self.values:
            rb = tk.Radiobutton(inner_frame,
                                text=v,
                                value=v,
                                variable=self.var)
            rb.pack(side=self.side, anchor=tk.NW)

        return frame
예제 #8
0
    def createWidgets(self):
        # Action Button
        Tk.Button(self, text='Regénération cache',
                  command=self.populate).pack(side=Tk.TOP, fill=Tk.X)

        # Listbox for thumbcache entries
        #self.thumblist = ThumbsListbox(self, height=25, width=35)
        self.thumblist = ThumbsListboxMulti(self,
                                            headings=(('index', {
                                                'width': 60,
                                                'anchor': Tk.E
                                            }), ('hash', {
                                                'width': 200,
                                                'anchor': Tk.CENTER
                                            }), ('size', {
                                                'width': 100,
                                                'anchor': Tk.CENTER
                                            })),
                                            style='ThumbList.Treeview',
                                            height=25)
        self.thumblist.pack(side=Tk.LEFT, fill=Tk.Y)

        # radiobuttons
        self.cachefile = Tk.StringVar()
        for label, cachefile in THMBC_DBS.items():
            Tk.Radiobutton(self,
                           text=label,
                           variable=self.cachefile,
                           value=cachefile,
                           command=self.populate).pack(anchor=Tk.W)
        self.cachefile.set(THMBC_DBS['256x256'])

        # checkbox empty
        self.empty = Tk.BooleanVar()
        Tk.Checkbutton(self,
                       text='Images vides',
                       variable=self.empty,
                       command=self.populate).pack(anchor=Tk.W)
예제 #9
0
  def __init__(self, odf, plotter):
    self.f = Figure()
    
    # Save reference to the model
    self.odf = odf
    # Save reference to the plotter
    self.plotter = plotter
    
    self.leftMask = None
    self.rightMask = None
    self.activeLine = None

    self.root = tk.Tk()
    self.root.wm_title("PyA Model Explorer")
    # Make the widgets expand/shrink as window size changes
    self.root.columnconfigure(0, weight=1)
    self.root.rowconfigure(0, weight=1)
    
    # Bind the mouse wheel
    if platform.system() == "Linux":
        self.root.bind("<Button-4>", self._mouseWheel)
        self.root.bind("<Button-5>", self._mouseWheel)    
    elif platform.system() == "Darwin":
        self.root.bind("<MouseWheel>", self._onWheel) # for OS X

    # A frame containing the mpl plot
    self.plotFrame = tk.Frame()
    self.plotFrame.pack(fill=tk.BOTH, side=tk.LEFT, expand=True)
    self.canvas = FigureCanvasTkAgg(self.f, master=self.plotFrame)
    
    # A frame containing the box with selected points
    # and control buttons
    self.controlFrame = tk.Frame(self.root)
    self.controlFrame.pack(side=tk.RIGHT, expand=False, fill=tk.BOTH)
    self.selectedPar = tk.StringVar(self.controlFrame)

    # Get parameters of model
    ps = list(self.odf.parameters().keys())
    # Set default modification properties
    # Saves these properties for all parameters
    self.modProps = {}
    for p in ps:
      self.modProps[p] = {"modus":"mul", "modValMul":1.02, "modValAdd":0.01}
    
    # Frame containing all parameters
    self.parameterFrame = tk.Frame(self.controlFrame, height=2, bd=1, relief=tk.SUNKEN)    
    
    # Dictionaries holding the specific information for each parameter
    self.singleParameterFrames = {}
    self.singleParameterEntry = {}
    self.singleParameterVar = {}
    self.singleParameterFree = {} # knows whether the parameter is free (value=True) or frozen (=False)
        
    # Closures around the functions adapting thaw/freeze    
    def frozenChanged(k):
        def change():
            if self.singleParameterFree[k].get() == True:
                self.odf.thaw(k)
            else:
                self.odf.freeze(k)
            self._updateDof()     
        return change
    
    # define what happens when a value is set to the entered parameter (closures)
    def hitReturn(k):
      def change(*args):
        self.selectedPar.set(k)
        self.odf[k] = float(self.singleParameterVar[k].get())
        self._parameterValueChanged()
      return change  
    
    # defines what happens when a parameter's value is changed, but not set yet, i.e., not current (closures)
    def parameterValueChanged(k):
        def valueChanged(*args):
            pp,ll = str(self.singleParameterVar[k].get()).find("."), len(str(self.singleParameterVar[k].get()))
            if round(self.odf[k],ll-pp-1) != round(self.singleParameterVar[k].get(), ll-pp-1):
                self.singleParameterEntry[k].configure(bg = "red")
            else:
                self.singleParameterEntry[k].configure(bg = "white")
        return valueChanged    
    
    
    # Create an entry for each parameter
      ## Create a scrollable region
      ## Check maximum number of characters for parameter names:
    maxParamLen = 0
    for k in sorted(self.odf.parameters().keys()):
      if len(k) > maxParamLen:
        maxParamLen = len(k)
      ## Create an entry for each parameter	
    for k in sorted(self.odf.parameters().keys()):
      x = tk.Frame(self.parameterFrame, height=2, bd=2, relief=tk.SUNKEN,pady=2)
      self.singleParameterFrames[k] = x 
      y0 = tk.Radiobutton(x, text=k,variable=self.selectedPar,value=k, width=maxParamLen+1, indicatoron=0)
      y0.pack(side=tk.LEFT)
      #y1 = tk.StringVar()
      y1 = tk.DoubleVar()
      y1.set(self.odf[k])
      y2 = tk.Entry(x, textvariable=y1, width=8)
      y2.bind('<Return>', hitReturn(k))
      self.singleParameterVar[k] = y1
      self.singleParameterVar[k].trace('w', parameterValueChanged(k))
      self.singleParameterEntry[k]= y2
      y2.pack(side=tk.LEFT)
      self.singleParameterFrames[k].pack()
      modModus = tk.StringVar()
      modModus.set(self.modProps[k]["modus"])
      self.singleParameterFree[k] = tk.BooleanVar()
      self.singleParameterFree[k].set(k in self.odf.freeParamNames())
      y3 = tk.Radiobutton(x, text="Thawed", value=True,variable=self.singleParameterFree[k], command=frozenChanged(k))
      y4 = tk.Radiobutton(x, text="Frozen", value=False,variable=self.singleParameterFree[k], command=frozenChanged(k))
      y3.pack(side=tk.RIGHT)
      y4.pack(side=tk.RIGHT)
      self.parameterFrame.pack(fill=tk.X, expand=False)
      
    # Set of the menu to select the current parameter
    self.selectedPar.set(ps[0])
    
    
    # Chi2 frame:
    self.chi2Frame = tk.Frame(self.controlFrame, borderwidth=10)#, relief=tk.SUNKEN)
    self.chi2value = tk.DoubleVar()
    self.chi2value.set(self.plotter.chi2)
    self.dofValue = tk.IntVar()
    #self.dofValue.set(len(self.plotter.fitIdx))
    #self.dofValue.set(100)
    self.dofValue.set(len(self.plotter.x) - len(self.odf.freeParameters())-1)
    self.chi2Label = tk.Label(self.chi2Frame,text="Chi2: ")
    self.dofLabel = tk.Label(self.chi2Frame,text="dof: ")
    self.chi2Entry = tk.Entry(self.chi2Frame, textvariable=self.chi2value, bd=2, width=10)
    self.dofEntry = tk.Entry(self.chi2Frame, textvariable=self.dofValue, bd=2, width=10)
    self.chi2Label.pack(side=tk.LEFT)
    self.chi2Entry.pack(side=tk.LEFT)
    self.dofLabel.pack(side=tk.LEFT)
    self.dofEntry.pack(side=tk.LEFT)
    self.chi2Frame.pack()
  
    
    # Frame to bundle mouse-wheel inputs
    self.mouseWheelFrame = tk.Frame(self.controlFrame, height=2, bd=3, relief=tk.SUNKEN)
    self.mwmLabel = tk.Label(self.mouseWheelFrame, text="Mouse wheel manipulation")
    self.mwmLabel.pack()
    # Modify by multiplication or addition (modModus)
    self.modModus = tk.StringVar()
    self.modModus.set("mul")
    # Entry field and radiobutton to specify factor to be used
    self.factorFrame = tk.Frame(self.mouseWheelFrame)
    self.modEntryTextMul = tk.StringVar()
    self.modEntryFactor = tk.Entry(self.factorFrame, textvariable=self.modEntryTextMul, width=6)
    self.modEntryFactor.pack(side=tk.LEFT)
    self.radioMultipli = tk.Radiobutton(self.factorFrame, text="Multiply", value="mul", variable=self.modModus)
    self.radioMultipli.pack(side=tk.LEFT)
    self.factorFrame.pack(fill=tk.BOTH)
    # Entry field and radiobutton to specify step (delta) to be used
    self.addFrame = tk.Frame(self.mouseWheelFrame)
    self.modEntryTextAdd = tk.StringVar()
    self.modEntryAdd = tk.Entry(self.addFrame, textvariable=self.modEntryTextAdd, width=6)
    self.modEntryAdd.pack(side=tk.LEFT)
    self.radioAdd = tk.Radiobutton(self.addFrame, text="Add", value="add", variable=self.modModus)
    self.radioAdd.pack(side=tk.LEFT)
    self.addFrame.pack(fill=tk.BOTH)
    # Set text fields for modification factor/step to default
    self.modEntryTextMul.set(self.modProps[self.selectedPar.get()]["modValMul"])
    self.modEntryTextAdd.set(self.modProps[self.selectedPar.get()]["modValAdd"])
    self.modEntryTextAdd.trace("w", self._modModeChangedAdd)
    self.modEntryTextMul.trace("w", self._modModeChangedMul)
    # Show the frame
#     self.mouseWheelFrame.grid(row=4, column=0, columnspan=3, pady=10)
    self.mouseWheelFrame.pack()
    
    
    # React to change in modify Modus
    self.modModus.trace('w', self._modModusChanged)
    # React to a change in the active parameter
    self.selectedPar.trace("w", self._activeParameterChanged)
    
    dummyLabel = tk.Label(self.controlFrame)
    dummyLabel.pack()
    
    # Fit button and fit ranges
    self.fitRangeFrame = tk.Frame(self.controlFrame, bd=3, relief=tk.SUNKEN)
    self.fit_lo = tk.DoubleVar()
    self.fit_hi = tk.DoubleVar()
    self.fit_lo.set(min(plotter.x))
    self.fit_hi.set(max(plotter.x))
    self.fitRangeLoLim = tk.Entry(self.fitRangeFrame, textvariable=self.fit_lo, width=9, bd=2)
    self.fitRangeHiLim = tk.Entry(self.fitRangeFrame, textvariable=self.fit_hi, width=9, bd=2)
    self.fitRangeLabel = tk.Label(self.fitRangeFrame, text="Fit range:")
    self.fitButton = tk.Button(self.fitRangeFrame, text="Fit", command=self._fitClicked)
    self.fitButton.pack(side=tk.BOTTOM, fill=tk.X)
    self.fitRangeLabel.pack(side=tk.LEFT, fill=tk.X)
    self.fitRangeHiLim.pack(side=tk.RIGHT)    
    self.fitRangeLoLim.pack(side=tk.RIGHT)
    self.fitRangeFrame.pack(fill=tk.X)
    #self.fitRangeLoLim.bind('<Return>', self._fitRangeChanged())
    self.fit_lo.trace("w", self._fitRangeChanged)
    self.fit_hi.trace("w", self._fitRangeChanged)
    self.numberClicked=0
    #self.modModus.trace('w', self._modModusChanged)
    #self.modModus.trace('w', self._modModusChanged)
    
    dummyLabel = tk.Label(self.controlFrame)
    dummyLabel.pack()
    
    self.showFrame = tk.Frame(self.controlFrame, bd=3)#, relief=tk.SUNKEN)
    self.showFrame.pack(side=tk.TOP)
    
    self.parSumButton = tk.Button(self.showFrame, text="Parameter summary", command=self._parameterSummaryClicked)
    self.parSumButton.pack(side=tk.LEFT)
        
    self.valSetButton = tk.Button(self.showFrame, text="Value set code", command=self._valueSetClicked)
#     self.valSetButton.grid(row=7, column=2)
    self.valSetButton.pack(side=tk.RIGHT)
     
    # a tk.DrawingArea
#     self.canvas.get_tk_widget().grid(column=0, columnspan=7, row=0, rowspan=10)
    self.canvas.get_tk_widget().pack()
    self.cid = self.f.canvas.mpl_connect('button_press_event', self._mouseButtonClicked)
    self.toolbar = NavigationToolbar2TkAgg(self.canvas, self.plotFrame)
    self.toolbar.update()
    self.canvas._tkcanvas.pack(side=tk.TOP, fill=tk.BOTH, expand=True)

    def _quit():
      # stops main loop
      self.root.quit()
      # this is necessary on Windows to prevent
      # Fatal Python Error: PyEval_RestoreThread: NULL tstate
      self.root.destroy()

    self.quitButton = tk.Button(master=self.controlFrame, text='Quit', command=_quit)
    self.quitButton.pack(side=tk.BOTTOM)
    
    # Plot the model for the first time
    self._parameterValueChanged()
    
    # Whether or not parameter summary exists
    self.root.parSumWin = None
    
    if platform.system() == "Darwin":
        self.root.bind("<MouseWheel>", self._onWheel) # for OS X
예제 #10
0
    def __init__(self, x, y, yerr=None, mode="gauss", config=None):
        self.windowTitle = "PyA interactive GV"
        self.f = Figure()
        self.a = self.f.add_subplot(111)

        self._config = {"modelLS":'r--', \
                        "dataLS":'bp', \
                        "dataLSerr":'b+', \
                        "activeCompLS":'k-', \
                        "inactiveCompLS":'y--', \
                        "plotIndComps":True, \
                        "rangeLS":'m--', \
                        "defaultFreeVoigt":["A", "ad", "al", "mu"], \
                        "default_alad":0.1, \
                        "defaultFreeGauss":["A", "sig", "mu"], \
                        "defaultWheelAdd":0.01, \
                        "defaultWheelMult": 2}

        # Modify configuration according to input
        if config is not None:
            for k in six.iterkeys(self._config):
                if k in config:
                    # Value has been modified
                    self._config[k] = config[k]

        # Tk root
        self.root = tk.Tk()

        # Create data plot
        self._x = x
        self._y = y
        self._yerr = yerr
        if self._yerr is None:
            self.a.plot(x, y, self._config["dataLS"])
        else:
            self.a.errorbar(x,
                            y,
                            yerr=self._yerr,
                            fmt=self._config["dataLSerr"])

        # The input mode determines how clicks on the mouse wheel are
        # interpreted.
        self._inputMode = "newComp"

        # Component count/assignment starts at 1
        self._activeComponent = 1
        self._compoCount = 0

        # Create model and parameter lists
        self._mode = mode
        if self._mode == "voigt":
            self._model = fuf.MultiVoigt1d(1)
            self._compPars = ["mu", "ad", "al", "A"]
        elif self._mode == "gauss":
            self._model = fuf.MultiGauss1d(1)
            self._compPars = ["mu", "sig", "A"]
        else:
            raise(PE.PyAValError("No such mode: " + str(self._mode), \
                                 solution="Choose either 'voigt' or 'gauss'."))
        self._model["off"] = 1.0

        # List used to cache points used to add component
        # as long as component is not completely specified
        self._pointCache = []

        # What to consider in the fit
        self._rangeIndices = np.arange(self._x.size, dtype=np.int)

        # A frame containing the mpl plot
        self.plotFrame = tk.Frame()
        self.plotFrame.pack(fill=tk.BOTH, side=tk.LEFT, expand=True)
        self.canvas = FigureCanvasTkAgg(self.f, master=self.plotFrame)

        # A frame containing the box with selected points
        # and control buttons
        self.pointFrame = tk.Frame(self.root)
        self.pointFrame.pack(side=tk.LEFT, fill=tk.BOTH)

        # Manage active component
        self.activeCompoFrame = tk.Frame(self.pointFrame)
        self.activeCompoFrame.pack(side=tk.TOP)
        self.currentComponentLabel = tk.Label(self.activeCompoFrame,
                                              text="Active component")
        self.currentComponentLabel.pack(side=tk.TOP)
        # De- and increase no. of active component
        self.downACB = tk.Button(self.activeCompoFrame,
                                 text="-",
                                 command=self._downAC)
        self._acstring = tk.StringVar()
        self._acstring.set(str(self._activeComponent))
        self.ACLabel = tk.Label(self.activeCompoFrame,
                                textvariable=self._acstring)
        self.upACB = tk.Button(self.activeCompoFrame,
                               text="+",
                               command=self._upAC)
        self.downACB.pack(side=tk.LEFT)
        self.ACLabel.pack(side=tk.LEFT)
        self.upACB.pack(side=tk.RIGHT)

        # Show and work with parameters
        self.parameterFrame = tk.Frame(self.pointFrame,
                                       relief=tk.RAISED,
                                       borderwidth=1)
        self.parameterFrame.pack(side=tk.TOP)
        # Headline
        tk.Label(self.parameterFrame,
                 text="Parameters (active comp.)").pack(side=tk.TOP)
        # List of parameters to show
        pars = ["off"]
        pars.extend(self._compPars)
        self._parSelect = tk.IntVar()
        # Frames for individual parameters
        self._parFrames = []
        self._parValues = []
        self._parFreeVars = []

        for i, p in enumerate(pars):
            self._parFrames.append(tk.Frame(self.parameterFrame))
            self._parFrames[-1].pack(side=tk.TOP)
            b = tk.Radiobutton(self._parFrames[-1],
                               text="",
                               variable=self._parSelect,
                               value=i)
            b.pack(side=tk.LEFT, anchor=tk.W)
            l = tk.Label(self._parFrames[-1], text=("%3s" % p), width=3)
            l.pack(side=tk.LEFT, anchor=tk.W)
            self._parValues.append(tk.StringVar())
            self._parValues[-1].set("0.0")
            l = tk.Label(self._parFrames[-1],
                         textvariable=self._parValues[-1],
                         width=10)
            l.pack(side=tk.LEFT)

            self._parFreeVars.append(tk.IntVar())
            c = tk.Checkbutton(self._parFrames[-1], text="free", variable=self._parFreeVars[-1], \
                               command=self._freeCheckboxClicked)
            c.pack(side=tk.LEFT)

        # Wheel modification
        self._wheelModFrame = tk.Frame(self.pointFrame,
                                       relief=tk.RAISED,
                                       borderwidth=1)
        self._wheelModFrame.pack(side=tk.TOP)
        # Headline
        tk.Label(self._wheelModFrame, text="Mouse wheel").pack(side=tk.TOP)
        self._multAddSelect = tk.IntVar()
        self._multAddSelect.set(1)
        multiFrame = tk.Frame(self._wheelModFrame)
        addFrame = tk.Frame(self._wheelModFrame)
        multiFrame.pack(side=tk.TOP)
        addFrame.pack(side=tk.TOP)
        tk.Radiobutton(multiFrame,
                       text="multiply [%]",
                       variable=self._multAddSelect,
                       value=1,
                       width=9,
                       anchor=tk.W).pack(side=tk.LEFT)
        tk.Radiobutton(addFrame,
                       text="add",
                       variable=self._multAddSelect,
                       value=2,
                       width=9,
                       anchor=tk.W).pack(side=tk.LEFT)
        self._multNumber = tk.StringVar()
        self._addNumber = tk.StringVar()
        self._multNumber.set(str(self._config["defaultWheelMult"]))
        self._addNumber.set(str(self._config["defaultWheelAdd"]))
        self._multNumberEntry = tk.Entry(multiFrame,
                                         textvariable=self._multNumber,
                                         width=10)
        self._multNumberEntry.pack(side=tk.RIGHT)
        self._addNumberEntry = tk.Entry(addFrame,
                                        textvariable=self._addNumber,
                                        width=10)
        self._addNumberEntry.pack(side=tk.RIGHT)

        # Common width
        if self._mode == "gauss":
            commonSigFrame = tk.Frame(self.pointFrame)
            commonSigFrame.pack(side=tk.TOP)
            self._commonSig = tk.IntVar()
            c = tk.Checkbutton(commonSigFrame, text="Common width (sig)", variable=self._commonSig, \
                               command=self._commonSigClicked)
            c.pack(side=tk.LEFT)

        # Fit button
        self._fitButton = tk.Button(self.pointFrame,
                                    text="Fit",
                                    command=self._fitModel)
        self._fitButton.pack(side=tk.TOP, fill=tk.X)

        # Range button
        self._rangeButton = tk.Button(self.pointFrame,
                                      text="Set fit range",
                                      command=self._rangeButtonClicked)
        self._rangeButton.pack(side=tk.TOP, fill=tk.X)

        # Remove button
        self.removeButton = tk.Button(master=self.pointFrame, text="Remove component", \
                                      command=self._removeButtonClicked)
        self.removeButton.pack(side=tk.TOP, fill=tk.X)

        # a tk.DrawingArea
        self.canvas.get_tk_widget().pack()
        self.cid = self.f.canvas.mpl_connect('button_press_event',
                                             self._mouseButtonClicked)
        self.mwe = self.f.canvas.mpl_connect('scroll_event', self._mouseWheel)

        self.toolbar = NavigationToolbar2TkAgg(self.canvas, self.plotFrame)
        self.toolbar.update()
        self.canvas._tkcanvas.pack(side=tk.TOP, fill=tk.BOTH, expand=True)

        def _quit():
            # stops main loop
            self.root.quit()
            # this is necessary on Windows to prevent
            # Fatal Python Error: PyEval_RestoreThread: NULL tstate
            self.root.destroy()

        self.quitButton = tk.Button(master=self.pointFrame,
                                    text='Quit',
                                    command=_quit)
        self.quitButton.pack(side=tk.BOTTOM, fill=tk.X)
예제 #11
0
    def __init__(self, parent, title, app, player, gameid, **kw):

        font_name = app.getFont('default')
        font = tkinter_font.Font(parent, font_name)
        tkfont = tkinter_font.Font(parent, font)
        font_metrics = font.metrics()
        measure = tkfont.measure
        self.text_height = font_metrics['linespace']
        self.text_width = measure('XX.XX.XX')

        self.items = []
        self.formatter = ProgressionFormatter(app, player, gameid)

        kw = self.initKw(kw)
        MfxDialog.__init__(self, parent, title, kw.resizable, kw.default)
        top_frame, bottom_frame = self.createFrames(kw)
        self.createBitmaps(top_frame, kw)

        frame = tkinter.Frame(top_frame)
        frame.pack(expand=True, fill='both', padx=5, pady=10)
        frame.columnconfigure(0, weight=1)

        # constants
        self.canvas_width, self.canvas_height = 600, 250
        if parent.winfo_screenwidth() < 800 or \
                parent.winfo_screenheight() < 600:
            self.canvas_width, self.canvas_height = 400, 200
        self.xmargin, self.ymargin = 10, 10
        self.graph_dx, self.graph_dy = 10, 10
        self.played_color = '#ff7ee9'
        self.won_color = '#00dc28'
        self.percent_color = 'blue'
        # create canvas
        self.canvas = canvas = tkinter.Canvas(frame,
                                              bg='#dfe8ff',
                                              highlightthickness=1,
                                              highlightbackground='black',
                                              width=self.canvas_width,
                                              height=self.canvas_height)
        canvas.pack(side='left', padx=5)
        #
        dir = os.path.join('images', 'stats')
        try:
            fn = app.dataloader.findImage('progression', dir)
            self.bg_image = loadImage(fn)
            canvas.create_image(0, 0, image=self.bg_image, anchor='nw')
        except Exception:
            pass
        #
        tw = max(measure(_('Games/day')), measure(_('Games/week')),
                 measure(_('% won')))
        self.left_margin = self.xmargin + tw // 2
        self.right_margin = self.xmargin + tw // 2
        self.top_margin = 15 + self.text_height
        self.bottom_margin = 15 + self.text_height + 10 + self.text_height
        #
        x0, y0 = self.left_margin, self.canvas_height - self.bottom_margin
        x1, y1 = self.canvas_width - self.right_margin, self.top_margin
        canvas.create_rectangle(x0, y0, x1, y1, fill='white')
        # horizontal axis
        canvas.create_line(x0, y0, x1, y0, width=3)

        # left vertical axis
        canvas.create_line(x0, y0, x0, y1, width=3)
        t = _('Games/day')
        self.games_text_id = canvas.create_text(x0 - 4,
                                                y1 - 4,
                                                anchor='s',
                                                text=t)

        # right vertical axis
        canvas.create_line(x1, y0, x1, y1, width=3)
        canvas.create_text(x1 + 4, y1 - 4, anchor='s', text=_('% won'))

        # caption
        d = self.text_height
        x, y = self.xmargin, self.canvas_height - self.ymargin
        canvas.create_rectangle(x,
                                y,
                                x + d,
                                y - d,
                                outline='black',
                                fill=self.played_color)
        x += d + 5
        canvas.create_text(x, y, anchor='sw', text=_('Played'))
        x += measure(_('Played')) + 20
        canvas.create_rectangle(x,
                                y,
                                x + d,
                                y - d,
                                outline='black',
                                fill=self.won_color)
        x += d + 5
        canvas.create_text(x, y, anchor='sw', text=_('Won'))
        x += measure(_('Won')) + 20
        canvas.create_rectangle(x,
                                y,
                                x + d,
                                y - d,
                                outline='black',
                                fill=self.percent_color)
        x += d + 5
        canvas.create_text(x, y, anchor='sw', text=_('% won'))

        # right frame
        right_frame = tkinter.Frame(frame)
        right_frame.pack(side='left', fill='x', padx=5)
        self.all_games_variable = var = tkinter.StringVar()
        var.set('all')
        b = tkinter.Radiobutton(right_frame,
                                text=_('All games'),
                                variable=var,
                                value='all',
                                command=self.updateGraph,
                                justify='left',
                                anchor='w')
        b.pack(fill='x', expand=True, padx=3, pady=1)
        b = tkinter.Radiobutton(right_frame,
                                text=_('Current game'),
                                variable=var,
                                value='current',
                                command=self.updateGraph,
                                justify='left',
                                anchor='w')
        b.pack(fill='x', expand=True, padx=3, pady=1)
        label_frame = tkinter.LabelFrame(right_frame, text=_('Statistics for'))
        label_frame.pack(side='top', fill='x', pady=10)
        self.variable = var = tkinter.StringVar()
        var.set('week')
        for v, t in (
            ('week', _('Last 7 days')),
            ('month', _('Last month')),
            ('year', _('Last year')),
            ('all', _('All time')),
        ):
            b = tkinter.Radiobutton(label_frame,
                                    text=t,
                                    variable=var,
                                    value=v,
                                    command=self.updateGraph,
                                    justify='left',
                                    anchor='w')
            b.pack(fill='x', expand=True, padx=3, pady=1)
        label_frame = tkinter.LabelFrame(right_frame, text=_('Show graphs'))
        label_frame.pack(side='top', fill='x')
        self.played_graph_var = tkinter.BooleanVar()
        self.played_graph_var.set(True)
        b = tkinter.Checkbutton(label_frame,
                                text=_('Played'),
                                command=self.updateGraph,
                                variable=self.played_graph_var,
                                justify='left',
                                anchor='w')
        b.pack(fill='x', expand=True, padx=3, pady=1)
        self.won_graph_var = tkinter.BooleanVar()
        self.won_graph_var.set(True)
        b = tkinter.Checkbutton(label_frame,
                                text=_('Won'),
                                command=self.updateGraph,
                                variable=self.won_graph_var,
                                justify='left',
                                anchor='w')
        b.pack(fill='x', expand=True, padx=3, pady=1)
        self.percent_graph_var = tkinter.BooleanVar()
        self.percent_graph_var.set(True)
        b = tkinter.Checkbutton(label_frame,
                                text=_('% won'),
                                command=self.updateGraph,
                                variable=self.percent_graph_var,
                                justify='left',
                                anchor='w')
        b.pack(fill='x', expand=True, padx=3, pady=1)

        self.updateGraph()

        focus = self.createButtons(bottom_frame, kw)
        self.mainloop(focus, kw.timeout)