Ejemplo n.º 1
0
 def __init__(self, master=None, orientation='horizontal',
        min_=0, max_=100, width=100, height=18,
        appearance='sunken', fillColor='blue', background='gray',
        labelColor='yellow', labelFont='Verdana', labelFormat='%d%%',
        value=0, bd=2):
   # preserve various values
   self.master = master
   self.orientation = orientation
   self.min = min_
   self.max = max_
   self.width = width
   self.height = height
   self.fillColor = fillColor
   self.labelFont = labelFont
   self.labelColor = labelColor
   self.background = background
   self.labelFormat = labelFormat
   self.value = value
   Tix.Frame.__init__(self, master, relief=appearance, bd=bd)
   self.canvas = Tix.Canvas(self, height=height, width=width, bd=0,
                            highlightthickness=0, background=background)
   self.scale = self.canvas.create_rectangle(0, 0, width, height, fill=fillColor)
   self.label = self.canvas.create_text(width/2, height/2, text='', anchor='c',
                                        fill=labelColor, font=self.labelFont)
   self.update()
   self.bind('<Configure>', self.update)
   self.canvas.pack(side='top', fill='x', expand='no')
Ejemplo n.º 2
0
    def __init__(self, master, tag, varname="", text="", **args):
        width = args.get("width", 40)
        height = args.get("height", 40)
        anonymous = args.get("anonymous", False)
        if anonymous:
            varname = ""
        self.parent = master
        Tkinter.LabelFrame.__init__(
            self,
            master,
            name=tag,
            borderwidth=0,
            padx=30,
            labelanchor="s",
            text=varname,
        )
        self.args = args.copy()
        if width < 40: width = 40
        if height < 40: height = 40
        padx = self.args.get("padx", 2)
        pady = self.args.get("pady", 2)

        self.value = Tix.Canvas(
            self,
            borderwidth=0,
            width=width,
            height=height,
            selectbackground="#0000FF",
            highlightthickness=1,
        )
        self.value.grid(padx=padx, pady=pady)
        self.update(text)
Ejemplo n.º 3
0
    def __init__(self, master):
        Tix.Frame.__init__(self, master)
        self.rowconfigure(0, weight=1)
        self.columnconfigure(0, weight=1)

        self.item_name = ""
        self.master = master

        self.__canvas = Tix.Canvas(
            self,
            width=500,
            height=500,
            highlightthickness=0,
            )
        self.__canvas.grid(sticky="nesw")
Ejemplo n.º 4
0
    def __init__(self, master, tag, node, width):
        self.parent = master
        Tix.Frame.__init__(
            self,
            master,
            name=tag,
        )
        self.rowconfigure(0)
        self.rowconfigure(1)
        self.rowconfigure(2, weight=1)
        self.columnconfigure(0, weight=1)

        self.value = VisionStruct(
            self,
            "value_frame",
            args={
                "anchor": "center",
                "height": 40
            },
        )
        self.value.grid(row=0, column=0)
        self.value.append(node)

        self.__tree = Tix.Canvas(
            self,
            borderwidth=0,
            width=width,
            height=40,
        )
        self.__tree.grid(row=1, column=0, sticky="wen")

        self.__children = Tix.Frame(self)
        self.__children.grid(row=2, column=0, sticky="nesw")
        self.__children.rowconfigure(0, weight=1)

        self.child_list = {}
        self.parent = None

        self.bind("<Configure>", self.__resize)
Ejemplo n.º 5
0
    def __init__(self, parent=None):
        self.myparent = parent
        self.myroot = self.myparent.myparent
        self.metermaybe = copy.deepcopy(self.myparent.meterlist)
        self.meterfr = tk.Toplevel(self.myroot, width=400, height=300)
        self.meterfr.title("Meter Changes")
        self.meterfr.rowconfigure(0, weight=1)
        self.meterfr.rowconfigure(1, weight=0)
        self.meterfr.columnconfigure(0, weight=1)
        self.meterbuttons = tk.ButtonBox(self.meterfr, width=400, height=300)
        self.meterbuttons.add('ok', text='OK', command=self.ok)
        self.meterbuttons.add('cancel', text='Cancel', command=self.cancel)
        self.meterbuttons.add('apply', text='Apply', command=self.apply)
        self.meterbuttons.add('sort', text='Sort', command=self.reorder)
        self.meterbuttons.grid(row=1, column=0, sticky='')
        self.canvas = tk.Canvas(self.meterfr, width=400, height=300)
        self.canvas.grid(row=0, column=0, sticky='nesw')
        self.canvas.rowconfigure(2, weight=1)
        self.canvas.columnconfigure(0, weight=1)
        self.toprow = tk.Frame(self.canvas)
        self.toprowoncanvas = self.canvas.create_window(0,
                                                        0,
                                                        window=self.toprow,
                                                        anchor="nw")
        self.toprow.columnconfigure(0, weight=0)
        self.toprow.columnconfigure(1, weight=1)
        self.botrow = tk.Frame(self.canvas, bd=3, relief="ridge")
        #        self.botrow.grid(row=1, column=0, sticky='we')
        self.botrow.columnconfigure(0, weight=0)
        self.botrow.columnconfigure(1, weight=1)
        bottomy = self.toprow.winfo_reqheight()
        #        print bottomy
        self.botrowoncanvas = self.canvas.create_window(0,
                                                        bottomy,
                                                        window=self.botrow,
                                                        anchor="nw")
        self.meterlinelist = []

        #        print self.metermaybe
        self.scroll = tk.Scrollbar(self.meterfr,
                                   orient='vertical',
                                   takefocus=0)
        self.canvas.config(yscrollcommand=self.scroll.set)
        self.canvas.config(scrollregion=self.canvas.bbox("all"))
        self.scroll.config(command=self.canvas.yview)
        self.meterfr.bind("<Button-4>",
                          lambda event, arg1="scroll", arg2=-1, arg3="units":
                          self.canvas.yview(arg1, arg2, arg3),
                          "+")
        self.meterfr.bind("<Button-5>",
                          lambda event, arg1="scroll", arg2=1, arg3="units":
                          self.canvas.yview(arg1, arg2, arg3),
                          "+")
        for meter in self.metermaybe:
            number = self.metermaybe.index(meter)
            newline = self.addmeterline(meter, number)

        self.addbar = tk.IntVar()
        self.addbar.set(1)
        self.addtop = tk.IntVar()
        self.addtop.set(4)
        self.addbottom = tk.IntVar()
        self.addbottom.set(4)
        self.blankbar = tk.Entry(self.botrow,
                                 width=4,
                                 textvariable=self.addbar)
        self.blankbar.focus_set()
        self.blankbar.select_range(0, "end")
        self.blankbar.grid(padx=10, sticky='')
        self.blanktop = tk.Entry(self.botrow,
                                 width=3,
                                 textvariable=self.addtop)
        self.blanktop.grid(row=0, column=1, padx=10, sticky='')
        self.blankbottom = tk.Entry(self.botrow,
                                    width=5,
                                    textvariable=self.addbottom)
        self.blankbottom.grid(row=0, column=2, padx=10, sticky='')

        self.blankaddmeter = tk.Button(self.botrow,
                                       text="Add Meter",
                                       command=self.newmeter)
        self.blankaddmeter.grid(row=0, column=4, padx=10, rowspan=1)

        self.meterfr.update_idletasks()
        self.meterfr.bind("<Return>", self.ok)
        self.meterfr.bind("<Escape>", self.cancel)
Ejemplo n.º 6
0
    def __init__(self, parent=None):
        self.myparent = parent
        self.myroot = self.myparent.myparent
        self.tempomaybe = copy.deepcopy(self.myparent.tempolist)
        self.tempofr = tk.Toplevel(self.myroot, width=480, height=360)
        self.tempofr.title("Tempo Changes")
        self.tempofr.rowconfigure(0, weight=1)
        self.tempofr.rowconfigure(1, weight=0)
        self.tempofr.columnconfigure(0, weight=1)
        self.tempobuttons = tk.ButtonBox(self.tempofr, width=480, height=360)
        self.tempobuttons.add('ok', text='OK', command=self.ok)
        self.tempobuttons.add('cancel', text='Cancel', command=self.cancel)
        self.tempobuttons.add('apply', text='Apply', command=self.apply)
        self.tempobuttons.add('sort', text='Sort', command=self.reorder)
        self.tempobuttons.grid(row=1, column=0, sticky='')
        self.canvas = tk.Canvas(self.tempofr, width=480, height=360)
        self.canvas.grid(row=0, column=0, sticky='nesw')
        self.canvas.rowconfigure(2, weight=1)
        self.canvas.columnconfigure(0, weight=1)
        self.toprow = tk.Frame(self.canvas)
        self.toprowoncanvas = self.canvas.create_window(0,
                                                        0,
                                                        window=self.toprow,
                                                        anchor="nw")
        self.toprow.columnconfigure(0, weight=0)
        self.toprow.columnconfigure(1, weight=1)
        self.botrow = tk.Frame(self.canvas, bd=3, relief="ridge")
        #        self.botrow.grid(row=1, column=0, sticky='we')
        self.botrow.columnconfigure(0, weight=0)
        self.botrow.columnconfigure(1, weight=1)
        bottomy = self.toprow.winfo_reqheight()
        #        print bottomy
        self.botrowoncanvas = self.canvas.create_window(0,
                                                        bottomy,
                                                        window=self.botrow,
                                                        anchor="nw")
        self.tempolinelist = []

        #        print self.tempomaybe
        self.scroll = tk.Scrollbar(self.tempofr,
                                   orient='vertical',
                                   takefocus=0)
        self.canvas.config(yscrollcommand=self.scroll.set)
        self.canvas.config(scrollregion=self.canvas.bbox("all"))
        self.scroll.config(command=self.canvas.yview)
        self.tempofr.bind("<Button-4>",
                          lambda event, arg1="scroll", arg2=-1, arg3="units":
                          self.canvas.yview(arg1, arg2, arg3),
                          "+")
        self.tempofr.bind("<Button-5>",
                          lambda event, arg1="scroll", arg2=1, arg3="units":
                          self.canvas.yview(arg1, arg2, arg3),
                          "+")
        for tempo in self.tempomaybe:
            number = self.tempomaybe.index(tempo)
            newline = self.addtempoline(tempo, number)

        self.addbar = tk.IntVar()
        self.addbeat = tk.IntVar()
        self.addbpm = tk.DoubleVar()
        self.addunit = tk.IntVar()
        self.blankbar = tk.Entry(self.botrow,
                                 width=4,
                                 textvariable=self.addbar)
        self.blankbar.focus_set()
        self.blankbar.select_range(0, "end")
        self.blankbar.grid(padx=10, sticky='')
        self.blankbeat = tk.Entry(self.botrow,
                                  width=3,
                                  textvariable=self.addbeat)
        self.blankbeat.grid(row=0, column=1, padx=10, sticky='')
        self.blankbpm = tk.Entry(self.botrow,
                                 width=5,
                                 textvariable=self.addbpm)
        self.blankbpm.grid(row=0, column=2, padx=10, sticky='')
        self.blankunit = tk.ComboBox(self.botrow,
                                     editable=1,
                                     variable=self.addunit,
                                     listwidth=8)
        self.blankunit.entry.configure(width=3)
        self.blankunit.append_history(1)
        self.blankunit.append_history(2)
        self.blankunit.append_history(3)
        self.blankunit.append_history(4)
        self.blankunit.append_history(6)
        self.blankunit.append_history(8)
        self.blankunit.append_history(12)
        self.blankunit.append_history(16)
        self.blankunit.grid(row=0, column=3, padx=10, sticky='')

        self.blankaddtempo = tk.Button(self.botrow,
                                       text="Add Tempo",
                                       command=self.newtempo)
        self.blankaddtempo.grid(row=0, column=4, padx=10, rowspan=1)

        self.tempofr.update_idletasks()
        self.tempofr.bind("<Return>", self.ok)
        self.tempofr.bind("<Escape>", self.cancel)
Ejemplo n.º 7
0
    def __init__(self, parent=None):
        self.myparent = parent
        self.myroot = self.myparent.myparent
        self.regionmaybe = copy.deepcopy(self.myparent.regionlist)
        self.regionfr = tk.Toplevel(self.myroot, width=640, height=480)
        self.regionfr.title("Regions")
        self.regionfr.rowconfigure(0, weight=1)
        self.regionfr.rowconfigure(1, weight=0)
        self.regionfr.columnconfigure(0, weight=1)
        self.regionbuttons = tk.ButtonBox(self.regionfr, width=640, height=80)
        self.regionbuttons.add('ok', text='OK', command=self.ok)
        self.regionbuttons.add('cancel', text='Cancel', command=self.cancel)
        self.regionbuttons.add('apply', text='Apply', command=self.apply)
        self.regionbuttons.grid(row=1, column=0, sticky='ew')
        self.canvas = tk.Canvas(self.regionfr)
        self.canvas.grid(row=0, column=0, sticky='nesw')
        self.canvas.rowconfigure(2, weight=1)
        self.canvas.columnconfigure(0, weight=1)
        self.toprow = tk.Frame(self.canvas)
        self.toprowoncanvas = self.canvas.create_window(0,
                                                        0,
                                                        window=self.toprow,
                                                        anchor="nw")
        self.toprow.columnconfigure(0, weight=0)
        self.toprow.columnconfigure(1, weight=1)
        self.botrow = tk.Frame(self.canvas, bd=3, relief="ridge")
        #        self.botrow.grid(row=1, column=0, sticky='we')
        self.botrow.columnconfigure(0, weight=0)
        self.botrow.columnconfigure(1, weight=1)
        self.scroll = tk.Scrollbar(self.regionfr,
                                   orient='vertical',
                                   takefocus=0)
        self.canvas.config(yscrollcommand=self.scroll.set)
        self.canvas.config(scrollregion=self.canvas.bbox("all"))
        self.scroll.config(command=self.canvas.yview)
        self.regionfr.bind("<Button-4>",
                           lambda event, arg1="scroll", arg2=-1, arg3="units":
                           self.canvas.yview(arg1, arg2, arg3),
                           "+")
        self.regionfr.bind("<Button-5>",
                           lambda event, arg1="scroll", arg2=1, arg3="units":
                           self.canvas.yview(arg1, arg2, arg3),
                           "+")

        self.regionlinelist = []

        #        print self.regionmaybe
        for reg in self.regionmaybe:
            number = self.regionmaybe.index(reg)
            newline = self.addregionline(reg, number)

#        self.blankcolor = tk.Frame(self.botrow, width=40, height=40, bg='#999999')
#        self.blankcolor.grid(row=0, column=0, rowspan=2, padx=10)

#        self.blanknum = tk.Control(self.botrow, width=2, min=1, max=9999)
#        self.blanknum.grid(row=0, column=1, padx=20, sticky='w')
#        self.blankden = tk.Control(self.botrow, width=2, min=1, max=9999)
#        self.blankden.grid(row=1, column=1, padx=20, sticky='w')
#        self.blanksubmit = tk.Button(self.botrow, text="Submit")
#        self.blanksubmit.grid(row=0, column=2, padx=10, rowspan=2)

#        self.regionfr.update_idletasks()
#        bottomy = self.toprow.winfo_reqheight()
#        print bottomy
#        self.botrowoncanvas = self.canvas.create_window(0, bottomy, window=self.botrow, anchor="nw")
        self.regionfr.bind("<Return>", self.ok)
        self.regionfr.bind("<Escape>", self.cancel)
Ejemplo n.º 8
0
    def __draw_complex_var(self, canvas, item, **args):
        """显示一个结构体或者数组。

        结构体的孩子有两种类型:

        一是简单变量,一是结构体。

        两种类型都需要增加下列标签:

        tags = ( key, varname, 'tag_%s' % key)

        其中前面两个用来修改变量的值,后面用来定位和移动孩子结点。

        """
        name = args.get("name", "")
        text = item["value"]
        tname = item["type"]
        assert(tname in ("Array", "Record"))
        assert(isinstance(text, basestring) and text)
        data = eval(text, {}, self.master.items)
        assert(isinstance(data, dict))
        if len(data) == 0:
            return
        anonymous = args.get("anonymous", False)
        orientation = args.get("orientation", "horizontal")
        width = args.get("width", 40)
        height = args.get("height", 40)
        shape = args.get("shape", "oval")
        x = args.get("x", 0)
        y = args.get("y", 0)
        padx = args.get("padx", 2)
        pady = args.get("pady", 2)
        xincrement = args.get("xincrement", 0)
        yincrement = args.get("yincrement", 0)
        anchor = args.get("anchor", "nw")

        # 计算开始的填充宽度

        title_height = 20
        # 内置填充宽度
        ipadx = 2
        ipady = 2

        # 排序孩子元素
        klist = data.keys()
        if tname == "Array":
            klist.sort(lambda x,y: cmp(int(x), int(y)))
        else:
            klist.sort()
        n = len(klist)

        # 计算自身范围: x1, y1, x2, y2
        if canvas.winfo_viewable():
            canvas_width = canvas.winfo_width()
            canvas_height = canvas.winfo_height()
        else:
            canvas_width = canvas.winfo_reqwidth()
            canvas_height = canvas.winfo_reqheight()

        if orientation == "horizontal":
            x1 = x
            y1 = y
            x2 = canvas_width - x
            if height:
                y2 = y + height
            else:
                y2 = canvas_height - y

        else:
            x1 = x
            y1 = y
            if width:
                x2 = x + width
            else:
                x2 = canvas_width - x
            y2 = canvas_height - y
        y2 -= title_height
        assert(x1 >= 0 and x2 >= 0 and y1 >= 0 and y2 >= 0)
        assert(x1 < x2 and y1 < y2)

        x = x1 + ipadx + padx
        y = y1 + ipady + pady
        if width < 40: width = 40
        if height < 40: height = 40

        offset = 0
        xoffset = 0
        yoffset = 0
        for i in range(n):
            k = klist[i]
            v = data[k]
            if v is None:
                continue

            if orientation == "horizontal":
                if yincrement > 0:
                    yoffset = (n - i - 1) * yincrement
                else:
                    yoffset = - i * yincrement
            else:
                if xincrement > 0:
                    xoffset = (n - i - 1) * xincrement
                else:
                    xoffset = - i * xincrement

            assert(isinstance(v, dict))
            if v["type"] in ("Array", "Record", "Tree"):
                varname = v[0]
                child_frame = Tix.Frame(canvas)
                child_options = self.master.items[varname]
                child_canvas = Tix.Canvas(
                    child_frame,
                    highlightthickness=0,
                    width=_width,
                    height=_height,
                    )
                child_canvas.grid(sticky="nesw")
                canvas.create_window(
                    x + xoffset,
                    y + yoffset,
                    window=child_frame,
                    anchor="nw",
                    tags=(k, name, "tag_%s" % k),
                    )
                # 还需要判断是否是树还是结构体
                r = self.__draw_complex_var(
                    child_canvas,
                    v,
                    name=k,
                    x=0,
                    y=0,
                    **child_options
                    )
                # 重新设置宽度和高度
                child_canvas.configure(
                    width=r[2],
                    height=r[3],
                    )

            else:
                if anonymous:
                    title = None
                else:
                    title = k
                text = v["value"]
                r = self.__draw_simple_var(
                    canvas,
                    tags=(k, name, "tag_%s" % k),
                    title=title,
                    text=text,
                    x=x + xoffset,
                    y=y + yoffset,
                    width=width,
                    height=height,
                    shape=shape,
                    )
            if orientation == "horizontal":
                x += r[2]
                if offset < r[3]: offset = r[3]
            else:
                y += r[3]
                if offset < r[2]: offset = r[2]
            width += 2 * xincrement
            height += 2 * yincrement


        # 根据孩子的实际尺寸调整自身的尺寸
        # 计算尺寸:x1, y1, x2, y2
        # 实际坐标,x, y
        if orientation == "horizontal":
            xr = x
            yr = y + offset
        else:
            xr = x + offset
            yr = y

        # 修改终点值
        x2 = xr + ipadx + padx
        y2 = yr + ipady + pady
        xmount, ymount = self.__get_child_offset(
            anchor,
            (xr, yr),
            (x1, y1, x2, y2),
            (ipadx + padx, ipady + pady),
            )
        if xmount or ymount:
            for k in klist:
                canvas.move("tag_%s" % k, xmount, ymount)

        canvas.create_rectangle(
            x1 + ipadx,
            y1 + ipady,
            x2 - ipadx,
            y2 - ipady,
            )
        canvas.create_text(
            (x1 + x2) / 2,
            y2 + ipady,
            anchor="n",
            text=name,
            )
        return (x1, y1, x2 - x1, y2 - y1 + title_height)
Ejemplo n.º 9
0
    def __init__(self, parent, inst):
        self.myparent = parent
        self.myinst = inst
        number = self.myinst.number
        self.linelist = []
        self.mute = tk.BooleanVar()
        self.mute.set(self.myinst.mute)
        self.mute.trace("w", self.mutechange)
        self.solo = tk.BooleanVar()
        self.solo.set(self.myinst.solo)
        self.solo.trace("w", self.solochange)
        self.widget = self.myparent.nb.add('inst%.4d' % number, label='i%d' % number, raisecmd=lambda arg1=0.0: self.canvas.yview_moveto(arg1))

        self.widget.rowconfigure(0, weight=0)
        self.widget.rowconfigure(1, weight=1)
#        self.widget.rowconfigure(2, weight=1)
#        self.widget.rowconfigure(3, weight=1)
        self.widget.columnconfigure(0, weight=1)
#        self.widget.columnconfigure(1, weight=1)
        self.toprow = tk.Frame(self.widget)
        self.toprow.grid(row=0, column=0, sticky='we')
        self.toprow.columnconfigure(0, weight=0)
        self.toprow.columnconfigure(1, weight=0)
        self.toprow.columnconfigure(2, weight=0)
        self.toprow.columnconfigure(3, weight=1)
        self.canvas = tk.Canvas(self.widget)
        self.canvas.grid(row=1, column=0, sticky='nesw')
        self.canvas.rowconfigure(2, weight=1)
        self.canvas.columnconfigure(0, weight=1)
        self.midrow = tk.Frame(self.canvas)
#        self.midrow.grid(row=0, column=0, sticky='we')
        self.midrowoncanvas = self.canvas.create_window(0, 0, window=self.midrow, anchor="nw")
        self.midrow.columnconfigure(0, weight=0)
        self.midrow.columnconfigure(1, weight=1)
        self.botrow = tk.Frame(self.canvas, bd=5, relief="ridge")
#        self.botrow.grid(row=1, column=0, sticky='we')
        self.botrow.columnconfigure(0, weight=0)
        self.botrow.columnconfigure(1, weight=1)
#        self.scroll = tk.Scrollbar(self.widget, orient='vertical', takefocus=0, troughcolor="#ccaaaa", activebackground="#cc7777", bg="#cc8f8f")
        self.scroll = tk.Scrollbar(self.widget, orient='vertical', takefocus=0)
        self.canvas.config(yscrollcommand=self.scroll.set)
        self.canvas.config(scrollregion=self.canvas.bbox("all"))
        self.scroll.config(command=self.canvas.yview)
        self.myparent.outputfr.bind("<Button-4>",
                              lambda
                              event, arg1="scroll", arg2=-1, arg3="units":
                              self.canvas.yview(arg1, arg2, arg3), "+")
        self.myparent.outputfr.bind("<Button-5>",
                              lambda
                              event, arg1="scroll", arg2=1, arg3="units":
                              self.canvas.yview(arg1, arg2, arg3), "+")
#        self.scroll.grid(row=1, column=1, sticky='ns')
#       SF2 LINE GRID COLUMNS
        self.sc1 = 3
        self.scs1 = 1
        self.sc2 = 4
        self.scs2 = 1
        self.sc3 = 5
        self.scs3 = 1
        self.sc4 = 6
        self.scs4 = 1
        self.sc5 = 7
        self.scs5 = 1
        self.sc6 = 8
        self.scs6 = 1
        self.sc7 = 9
        self.scs7 = 1
#       CSOUND LINE GRID COLUMNS
        self.cc1 = 3
        self.ccs1 = 1
        self.cc2 = 4
        self.ccs2 = 1
        self.cc3 = 5
        self.ccs3 = 1
        self.cc4 = 6
        self.ccs4 = 1
        self.cc5 = 7
        self.ccs5 = 1
        self.color = tk.StringVar()
        self.color.set(self.myinst.color)
        self.color.trace("w", self.colorchange)
        self.colorwidget = tk.Frame(self.toprow, width=40, height=40, bg=self.color.get())
        self.colorwidget.grid(row=0, column=0, padx=10)
        self.colorwidget.bind("<Button-1>", self.colorchoose)
        self.mutewidget = tk.Checkbutton(self.toprow, bg='#ffaaaa', text='M', variable=self.mute, indicatoron=1, activebackground='#ffaaaa', selectcolor='#ff0000', width=1, height=1, bd=2, highlightthickness=0)
        self.mutewidget.grid(row=0, column=1, padx=4)
        self.solowidget = tk.Checkbutton(self.toprow, bg='#00aa00', text='S', variable=self.solo, indicatoron=1, activebackground='#00aa00', selectcolor='#00ff00', width=1, height=1, bd=2, highlightthickness=0)
        self.solowidget.grid(row=0, column=2)
        self.blank = tk.Entry(self.botrow, width=2)
        self.blank.grid(row=0, column=0, pady=10, padx=20, sticky='w')
        self.blank.bind("<Tab>", self.outputselect)
        self.widget.update_idletasks()
        bottomy = self.midrow.winfo_reqheight()
#        print bottomy
        self.botrowoncanvas = self.canvas.create_window(0, bottomy, window=self.botrow, anchor="nw")