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')
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)
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")
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)
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)
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)
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)
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)
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")