Beispiel #1
0
 def __init__(self, parent, title, text, **kw):
     kw = self.initKw(kw)
     self._calc_MfxDialog().__init__(self, parent, title, kw.resizable,
                                     kw.default)
     top_frame, bottom_frame = self.createFrames(kw)
     self.createBitmaps(top_frame, kw)
     #
     self.text_w = tkinter.Text(top_frame,
                                bd=1,
                                relief="sunken",
                                wrap="word",
                                width=64,
                                height=16)
     self.text_w.pack(side='left', fill="both", expand=True)
     # self.text_w.pack(side='top', padx=kw.padx, pady=kw.pady)
     vbar = self._calcToolkit().Scrollbar(top_frame)
     vbar.pack(side='right', fill='y')
     self.text_w["yscrollcommand"] = vbar.set
     vbar["command"] = self.text_w.yview
     #
     self.text = ""
     if text:
         self.text = text
         old_state = self.text_w["state"]
         self.text_w.config(state="normal")
         self.text_w.insert("insert", self.text)
         self.text_w.config(state=old_state)
     #
     focus = self.createButtons(bottom_frame, kw)
     focus = self.text_w
     self.mainloop(focus, kw.timeout)
 def __init__(self, parent, odf):
   tk.Toplevel.__init__(self, parent)
   self.wm_title("Value set code")
   self.parent = parent
   self.newVal = None
   self.odf = odf
   self.showFrame = tk.Frame(self)
   
   self.textLabel = tk.Label(self.showFrame, text="Model name: ")
   self.textLabel.grid(row=0,column=0)
   self.modelName = tk.StringVar()
   self.modelName.set("model")
   self.modelEntry = tk.Entry(self.showFrame, textvariable=self.modelName, width=8)
   self.modelEntry.bind('<Return>', self._updateModelName)
   self.modelEntry.grid(row=0,column=1)
   
   self.showText = tk.Text(self.showFrame)
   self.showText.config(background='white')
   self.showText.grid(row=1,column=0,columnspan=2) #.pack(expand=True)
   
   self.clipboardButton = tk.Button(self.showFrame, text="Copy to Clipboard", command=self._copyToClipboard)
   self.clipboardButton.grid(row=2, column=0, columnspan=2)
   
   self.helpLabel = tk.Label(self.showFrame, text="You may use the above code for pasting...")
   self.helpLabel.grid(row=3, column=0, columnspan=2)
   
   self.showFrame.pack()
   
   self.protocol("WM_DELETE_WINDOW", self._windowClosed)
    def __init__(self, parent, **kwargs):
        tk.Frame.__init__(self, parent)

        text_ops = funcs.extract_args(kwargs, TEXT_KEYS, TEXT_KEY)
        text = tk.Text(self, **text_ops)

        scrollbar_ops = funcs.extract_args(kwargs, SCROLLBAR_KEYS,
                                           SCROLLBAR_KEY)
        vsb = tk.Scrollbar(self, command=text.yview, **scrollbar_ops)
        text.configure(yscrollcommand=vsb.set)
        vsb.pack(side="right", fill="y")
        text.pack(side="left", fill="both", expand=True)
        text.tag_configure('br', lmargin2=80, tabs=35)

        # expose some text methods as methods on this object
        self.insert = text.insert
        self.delete = text.delete
        self.get = text.get
        self.index = text.index
        self.search = text.search
        self.see = text.see
        # self.state = lambda: change_state(self.text)
        self.enable = lambda: funcs.set_state_normal(text)
        self.disable = lambda: funcs.set_state_disabled(text)
        self.clear = text.delete(1.0, tk.END)
Beispiel #4
0
    def __init__(self):
        # ===============GUI items initializarion===============
        self.root = Tk.Tk()
        self.root.wm_title("MathsPhysics")

        self.text_frame = Tk.Frame(master=self.root)
        self.text = Tk.Text(self.text_frame)
        self.text_scrollbar = Tk.Scrollbar(self.text_frame)
        self.text.config(yscrollcommand=self.text_scrollbar.set)
        self.text.pack(side=Tk.LEFT, fill=Tk.BOTH, expand=1)
        self.text_scrollbar.config(command=self.text.yview)
        self.text_scrollbar.pack(side=Tk.RIGHT, fill=Tk.Y)

        self.fig = plt.figure(figsize=(5, 5))  #(dpi=100) # figsize=(5, 4),
        self.canvas = FigureCanvasTkAgg(self.fig,
                                        master=self.root)  # A tk.DrawingArea.
        self.canvas.get_tk_widget().pack(side=Tk.TOP, fill=Tk.BOTH,
                                         expand=1)  # canvas.draw()
        self.toolbar = NavigationToolbar2TkAgg(self.canvas, self.root)
        self.toolbar.update()
        self.canvas._tkcanvas.pack(side=Tk.TOP, fill=Tk.BOTH, expand=1)

        self.text_frame.pack(side=Tk.TOP, fill=Tk.BOTH, expand=1)

        self.menubar = Tk.Menu(self.root)
        self.filemenu = Tk.Menu(self.menubar, tearoff=0)
        self.filemenu.add_command(label="Load input", command=self._load_data)
        self.filemenu.add_command(label="Triangulate",
                                  command=self._triangulate)
        self.filemenu.add_command(label="Compare", command=self._compare)
        self.filemenu.add_command(label="Set conditions",
                                  command=self._ask_conds)
        self.filemenu.add_command(label="Solve",
                                  command=self._solve)  # Do nothing
        self.filemenu.add_separator()
        self.filemenu.add_command(label="Quit", command=self._quit)
        self.menubar.add_cascade(label="Menu", menu=self.filemenu)
        self.root.config(menu=self.menubar)

        # conditions window
        self.cond_window = None
        # ============================================================

        self.delaunay_triangulation = None
        self.entries = None
        self.fem_solver = None
        self.solver = None
        self.solution = None
        self.x_vertices = None
        self.y_vertices = None

        # =============================================================
        self.tester = None
Beispiel #5
0
    def initLayout(self):
        self.editor = tk.Text(self)
        self.editor.grid(row=0, column=0, sticky="nesw")

        scrollbar = tk.Scrollbar(self, command=self.editor.yview)
        scrollbar.grid(row=0, column=1, sticky="nesw")
        self.editor["yscrollcommand"] = scrollbar.set

        self.actionsWidget = TimActionsWidget(master=self)
        self.actionsWidget.grid(row=1, column=0, sticky="w")

        self.grid_rowconfigure(0, weight=10)
        self.grid_rowconfigure(1, weight=1)
def show_info(*args):
    if list_box.curselection():
        cs_name = list_box.get(list_box.curselection())
        cs = cardsets_dict[cs_name]
        fn = os.path.join(cs.dir, 'COPYRIGHT')
        top = tkinter.Toplevel()
        text = tkinter.Text(top)
        text.insert('insert', open(fn).read())
        text.pack(expand=tkinter.YES, fill=tkinter.BOTH)
        b_frame = tkinter.Frame(top)
        b_frame.pack(fill=tkinter.X)
        button = tkinter.Button(b_frame, text='Close', command=top.destroy)
        button.pack(side=tkinter.RIGHT)
 def __init__(self, parent, odf):
   tk.Toplevel.__init__(self, parent)
   self.wm_title("Parameter Summary")
   self.parent = parent
   self.newVal = None
   
   self.showFrame = tk.Frame(self)
   self.showText = tk.Text(self.showFrame)
   self.showText.config(background='white')
   self.showText.pack(fill=tk.BOTH, expand=True)
   self.showFrame.pack(fill=tk.BOTH, expand=True)
   
   self.protocol("WM_DELETE_WINDOW", self._windowClosed)
 def make_expts_part(self, parent, part_name):
     """Make a component frame for the experiment editor."""
     frame = ttk.Frame(parent)
     self.make_label(frame, part_name)
     if isinstance(self.template_expt[part_name], collections.Mapping):
         # This is actually a related group of fields
         self.expts_boxes[part_name] = boxes = {}
         self.make_expts_fields(frame, self.template_expt[part_name], boxes)
     else:
         textbox = T.Text(frame, width=100, height=5, wrap='word')
         textbox.grid(row=1, column=0, sticky='nesw')
         textbox.insert('1.0', self.template_expt[part_name])
         self.expts_boxes[part_name] = textbox
     frame.pack(side='top', fill='x', expand=True)
Beispiel #9
0
    def _showList(self):
        """
        Creates a new window containing a copy-and-paste aware list of the points.
      """
        def _quitWin():
            win.destroy()

        win = tk.Tk()
        text = tk.Text(master=win)
        text.pack()
        for p in self.pointList:
            text.insert(tk.END, p.asStr() + "\n")
        quit = tk.Button(master=win, text='Quit', command=_quitWin)
        quit.pack()
        win.wm_title("Copy Window")
Beispiel #10
0
def show_config():
    if list_box.curselection():
        cs_name = list_box.get(list_box.curselection())
        card_set = cardsets_dict[cs_name]

        file_name = os.path.join(card_set.cs_dir, 'config.txt')

        top = tkinter.Toplevel()
        text = tkinter.Text(top)
        text.insert('insert', open(file_name).read())
        text.pack(expand=tkinter.YES, fill=tkinter.BOTH)

        b_frame = tkinter.Frame(top)
        b_frame.pack(fill=tkinter.X)
        button = tkinter.Button(b_frame, text='Close', command=top.destroy)
        button.pack(side=tkinter.RIGHT)
Beispiel #11
0
    def __init__(self):
        self.root = Tk.Tk()
        self.root.wm_title("MathsPhysics")

        self.text_frame = Tk.Frame(master=self.root)
        self.text = Tk.Text(self.text_frame)
        self.text_scrollbar = Tk.Scrollbar(self.text_frame)
        self.text.config(yscrollcommand=self.text_scrollbar.set)
        self.text.pack(side=Tk.LEFT, fill=Tk.BOTH, expand=1)
        self.text_scrollbar.config(command=self.text.yview)
        self.text_scrollbar.pack(side=Tk.RIGHT, fill=Tk.Y)

        self.fig = plt.figure(figsize=(5, 5))  #(dpi=100) # figsize=(5, 4),
        self.canvas = FigureCanvasTkAgg(self.fig,
                                        master=self.root)  # A tk.DrawingArea.
        self.canvas.get_tk_widget().pack(side=Tk.TOP, fill=Tk.BOTH,
                                         expand=1)  # canvas.draw()
        self.toolbar = NavigationToolbar2TkAgg(self.canvas, self.root)
        self.toolbar.update()
        self.canvas._tkcanvas.pack(side=Tk.TOP, fill=Tk.BOTH, expand=1)

        self.text_frame.pack(side=Tk.TOP, fill=Tk.BOTH, expand=1)

        self.menubar = Tk.Menu(self.root)
        self.filemenu = Tk.Menu(self.menubar, tearoff=0)
        self.filemenu.add_command(label="Load input", command=self.load_data)
        self.filemenu.add_command(label="Triangulate",
                                  command=self.triangulate)
        self.filemenu.add_command(label="Compare", command=self.compare)
        self.filemenu.add_separator()
        self.filemenu.add_command(label="Quit", command=self._quit)
        self.menubar.add_cascade(label="Menu", menu=self.filemenu)
        self.root.config(menu=self.menubar)

        self.A = None
        self.B = None
        self.filepath = None
        self.angle = None
        self.area = None
        self.points = None
        self.segments = None
        self.data = None
        self.holes = None
        self.labels = False
        self.number_triangles = False
        self.vertices = None
Beispiel #12
0
    def initLayout(self):
        self.choiceWidget = ParChoiceWidget(master=self)
        self.choiceWidget.grid(row=0, column=0, sticky='nw')

        self.editor = tk.Text(self)
        self.editor.grid(row=1, column=0, sticky='nesw')

        scrollbar = tk.Scrollbar(self, command=self.editor.yview)
        scrollbar.grid(row=1, column=1, sticky='nesw')
        self.editor['yscrollcommand'] = scrollbar.set

        self.actionsWidget = ParActionsWidget(master=self)
        self.actionsWidget.grid(row=2, column=0, sticky='w')

        self.grid_rowconfigure(0, weight=1)
        self.grid_rowconfigure(1, weight=10)
        self.grid_rowconfigure(2, weight=1)
    def __init__(self, parent, app=None, home=None):
        self.parent = parent
        self.app = app
        self.home = home
        self.url = None
        self.history = Struct(
            list=[],
            index=0,
        )
        self.visited_urls = []
        # need to keep a reference because of garbage collection
        self.images = {}
        self.defcursor = parent["cursor"]
        # self.defcursor = 'xterm'
        self.handcursor = "hand2"

        frame = ttk.Frame(parent, width=640, height=440)
        frame.pack(expand=True, fill='both')
        frame.grid_propagate(False)

        # create buttons
        button_width = 8
        self.homeButton = ttk.Button(frame, text=_("Index"),
                                     width=button_width,
                                     command=self.goHome)
        self.homeButton.grid(row=0, column=0, sticky='w')
        self.backButton = ttk.Button(frame, text=_("Back"),
                                     width=button_width,
                                     command=self.goBack)
        self.backButton.grid(row=0, column=1, sticky='w')
        self.forwardButton = ttk.Button(frame, text=_("Forward"),
                                        width=button_width,
                                        command=self.goForward)
        self.forwardButton.grid(row=0, column=2, sticky='w')
        self.closeButton = ttk.Button(frame, text=_("Close"),
                                      width=button_width,
                                      command=self.destroy)
        self.closeButton.grid(row=0, column=3, sticky='e')

        # create text widget
        text_frame = ttk.Frame(frame)
        text_frame.grid(row=1, column=0, columnspan=4,
                        sticky='nsew', padx=1, pady=1)
        vbar = ttk.Scrollbar(text_frame)
        vbar.pack(side='right', fill='y')
        self.text = tkinter.Text(text_frame,
                                 fg='black', bg='white',
                                 bd=1, relief='sunken',
                                 cursor=self.defcursor,
                                 wrap='word', padx=10)
        self.text.pack(side='left', fill='both', expand=True)
        self.text["yscrollcommand"] = vbar.set
        vbar["command"] = self.text.yview

        # statusbar
        self.statusbar = HtmlStatusbar(frame, row=2, column=0, columnspan=4)

        frame.columnconfigure(2, weight=1)
        frame.rowconfigure(1, weight=1)

        # load images
        for name, fn in self.symbols_fn.items():
            self.symbols_img[name] = self.getImage(fn)

        self.initBindings()
rmin = tk.Entry(master=root, text='rmin')
rmin.place(anchor=tk.W, relx=0.66, rely=0.16, width=40)
rmin.insert(0, 368)
tk.Label(master=root, text="to").place(relx=0.74, rely=0.14)
rmax = tk.Entry(master=root, text='rmax')
rmax.place(anchor=tk.W, relx=0.78, rely=0.16, width=40)
rmax.insert(0, 389)

tk.Button(master=root, text='Quit', command=_quit).pack(anchor=tk.SW)

# a tk.DrawingArea ---------------
canvas = FigureCanvasTkAgg(f, master=root)
a.annotate("load image file", (0.5, 0.6), horizontalalignment="center")
a.annotate("e.g. data/O2-ANU1024.txt.bz2", (0.5, 0.5),
           horizontalalignment="center")
canvas.draw()
canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)

toolbar = NavigationToolbar2Tk(canvas, root)
toolbar.update()
canvas._tkcanvas.pack(side=tk.TOP, fill=tk.BOTH, expand=1)

# text info box
text = tk.Text(master=root, height=4, fg="blue")
text.pack(fill=tk.X)
text.insert(
    tk.END,
    "To start load an image data file using the `Load image file' button\n")

tk.mainloop()
Beispiel #15
0
    def createWidgets(self):

        self.chatFrame = tk.Frame(self)
        self.chatFrame.grid(row=0,
                            column=0,
                            rowspan=10,
                            sticky=tk.S + tk.N + tk.E + tk.W)
        self.chatBox = tk.Text(self.chatFrame, height=10)
        self.chatBox.grid(row=0, column=0, sticky=tk.S + tk.N + tk.E + tk.W)
        self.chatBox.bind("<Key>", lambda e: "break")
        self.sscr = tk.Scrollbar(self.chatFrame)
        self.sscr.grid(column=1, row=0, sticky=tk.N + tk.S + tk.W + tk.E)
        self.chatBox.config(yscrollcommand=self.sscr.set)
        self.sscr.config(command=self.chatBox.yview)
        self.chatFrame.columnconfigure(0, weight=1)
        self.chatFrame.rowconfigure(0, weight=1)

        self.usersFrame = tk.Frame(self)
        self.usersFrame.grid(column=1,
                             row=0,
                             rowspan=15,
                             padx=5,
                             sticky=tk.N + tk.S + tk.W + tk.E)
        scr = tk.Scrollbar(self.usersFrame)
        scr.grid(column=1, row=1, sticky=tk.N + tk.S + tk.W + tk.E)

        userLabel = tk.Label(self.usersFrame, text='User list:').grid(
            column=0, row=0, sticky=tk.N + tk.S + tk.E + tk.W)
        self.userList = tk.Listbox(self.usersFrame)
        self.userList.insert(0, 'ALL')
        self.userList.activate(0)

        self.userList.grid(column=0, row=1, sticky=tk.N + tk.S + tk.E + tk.W)
        self.userList.config(yscrollcommand=scr.set)
        scr.config(command=self.userList.yview)

        self.usersFrame.columnconfigure(0, weight=1)
        self.usersFrame.rowconfigure(0, weight=1)
        self.usersFrame.rowconfigure(1, weight=15)

        self.messageBox = tk.Text(self, height=3)
        self.messageBox.grid(row=10,
                             column=0,
                             rowspan=5,
                             sticky=tk.S + tk.N + tk.E + tk.W)

        self.sendButton = tk.Button(self, text='Send Message')
        self.sendButton.myName = "Send Button"
        self.sendButton.grid(row=15,
                             column=0,
                             sticky=tk.N + tk.S + tk.E + tk.W)
        self.sendButton.bind("<Button-1>", self.send)
        self.exitButton = tk.Button(self, text='Exit')
        self.exitButton.myName = "Exit Button"
        self.exitButton.grid(row=15,
                             column=1,
                             sticky=tk.N + tk.S + tk.E + tk.W)
        self.exitButton.bind("<Button-1>", self.exit)

        self.master.bind_all("<Return>", self.send)

        for i in range(16):
            self.rowconfigure(i, weight=1)
        self.columnconfigure(0, weight=3)
        self.columnconfigure(1, weight=1)
 def __init__(self, parent, title, cardset, images, **kw):
     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(fill="both", expand=True, padx=5, pady=10)
     #
     #
     info_frame = tkinter.LabelFrame(frame, text=_('About cardset'))
     info_frame.grid(row=0,
                     column=0,
                     columnspan=2,
                     sticky='ew',
                     padx=0,
                     pady=5,
                     ipadx=5,
                     ipady=5)
     styles = nationalities = year = None
     if cardset.si.styles:
         styles = '\n'.join([CSI.STYLE[i] for i in cardset.si.styles])
     if cardset.si.nationalities:
         nationalities = '\n'.join(
             [CSI.NATIONALITY[i] for i in cardset.si.nationalities])
     if cardset.year:
         year = str(cardset.year)
     row = 0
     for n, t in (
             # ('Version:', str(cardset.version)),
         (_('Type:'), CSI.TYPE[cardset.type]),
         (_('Styles:'), styles),
         (_('Nationality:'), nationalities),
         (_('Year:'), year),
             # (_('Number of cards:'), str(cardset.ncards)),
         (_('Size:'), '%d x %d' % (cardset.CARDW, cardset.CARDH)),
     ):
         if t is not None:
             label = tkinter.Label(info_frame,
                                   text=n,
                                   anchor='w',
                                   justify='left')
             label.grid(row=row, column=0, sticky='nw')
             label = tkinter.Label(info_frame,
                                   text=t,
                                   anchor='w',
                                   justify='left')
             label.grid(row=row, column=1, sticky='nw')
             row += 1
     if images:
         try:
             from random import choice
             im = choice(images)
             f = os.path.join(cardset.dir, cardset.backname)
             self.back_image = loadImage(file=f)
             canvas = tkinter.Canvas(info_frame,
                                     width=2 * im.width() + 30,
                                     height=im.height() + 2)
             canvas.create_image(10, 1, image=im, anchor='nw')
             canvas.create_image(im.width() + 20,
                                 1,
                                 image=self.back_image,
                                 anchor='nw')
             canvas.grid(row=0, column=2, rowspan=row + 1, sticky='ne')
             info_frame.columnconfigure(2, weight=1)
             info_frame.rowconfigure(row, weight=1)
         except Exception:
             pass
     # bg = top_frame["bg"]
     bg = 'white'
     text_w = tkinter.Text(frame,
                           bd=1,
                           relief="sunken",
                           wrap="word",
                           padx=4,
                           width=64,
                           height=16,
                           bg=bg)
     text_w.grid(row=1, column=0, sticky='nsew')
     sb = tkinter.Scrollbar(frame)
     sb.grid(row=1, column=1, sticky='ns')
     text_w.configure(yscrollcommand=sb.set)
     sb.configure(command=text_w.yview)
     frame.columnconfigure(0, weight=1)
     frame.rowconfigure(1, weight=1)
     #
     text = ''
     f = os.path.join(cardset.dir, "COPYRIGHT")
     try:
         text = open(f).read()
     except Exception:
         pass
     if text:
         text_w.config(state="normal")
         text_w.insert("insert", text)
     text_w.config(state="disabled")
     #
     focus = self.createButtons(bottom_frame, kw)
     # focus = text_w
     self.mainloop(focus, kw.timeout)
Beispiel #17
0
    def __init__(self, parent, title, cardset, images, **kw):
        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 = ttk.Frame(top_frame)
        frame.pack(fill="both", expand=True, padx=5, pady=10)
        #
        #
        row = 0
        info_frame = ttk.LabelFrame(frame, text=_('About cardset'))
        info_frame.grid(row=row, column=0, columnspan=2, sticky='ew',
                        padx=0, pady=5, ipadx=5, ipady=5)
        row += 1
        styles = nationalities = year = None
        if cardset.si.styles:
            styles = '\n'.join([CSI.STYLE[i] for i in cardset.si.styles])
        if cardset.si.nationalities:
            nationalities = '\n'.join([CSI.NATIONALITY[i]
                                       for i in cardset.si.nationalities])
        if cardset.year:
            year = str(cardset.year)
        frow = 0
        for n, t in (
            # ('Version:', str(cardset.version)),
            (_('Type:'),          CSI.TYPE[cardset.type]),
            (_('Styles:'),        styles),
            (_('Nationality:'),   nationalities),
            (_('Year:'),          year),
            # (_('Number of cards:'), str(cardset.ncards)),
            (_('Size:'), '%d x %d' % (cardset.CARDW, cardset.CARDH)),
                ):
            if t is not None:
                label = ttk.Label(info_frame, text=n,
                                  anchor='w', justify='left')
                label.grid(row=frow, column=0, sticky='nw', padx=4)
                label = ttk.Label(info_frame, text=t,
                                  anchor='w', justify='left')
                label.grid(row=frow, column=1, sticky='nw', padx=4)
                frow += 1
        if images:
            try:
                from random import choice
                im = choice(images)
                f = os.path.join(cardset.dir, cardset.backname)
                self.back_image = loadImage(file=f)  # store the image
                label = ttk.Label(info_frame, image=im, padding=5)
                label.grid(row=0, column=2, rowspan=frow+1, sticky='ne')
                label = ttk.Label(info_frame, image=self.back_image,
                                  padding=(0, 5, 5, 5))  # left margin = 0
                label.grid(row=0, column=3, rowspan=frow+1, sticky='ne')

                info_frame.columnconfigure(2, weight=1)
                info_frame.rowconfigure(frow, weight=1)
            except Exception:
                pass
        if USE_PIL:
            padx = 4
            pady = 0
            settings_frame = ttk.LabelFrame(frame, text=_('Settings'))
            settings_frame.grid(row=row, column=0, columnspan=2, sticky='ew',
                                padx=0, pady=5, ipadx=5, ipady=5)
            row += 1
            var = tkinter.IntVar()
            self.x_offset = PysolScale(
                settings_frame, label=_('X offset:'),
                from_=5, to=40, resolution=1,
                orient='horizontal', variable=var,
                value=cardset.CARD_XOFFSET,
                # command=self._updateScale
                )
            self.x_offset.grid(row=0, column=0, sticky='ew',
                               padx=padx, pady=pady)
            var = tkinter.IntVar()
            self.y_offset = PysolScale(
                settings_frame, label=_('Y offset:'),
                from_=5, to=40, resolution=1,
                orient='horizontal', variable=var,
                value=cardset.CARD_YOFFSET,
                # command=self._updateScale
                )
            self.y_offset.grid(row=1, column=0, sticky='ew',
                               padx=padx, pady=pady)
            row += 1

        # bg = top_frame["bg"]
        bg = 'white'
        text_w = tkinter.Text(frame, bd=1, relief="sunken", wrap="word",
                              padx=4, width=64, height=16, bg=bg)
        text_w.grid(row=row, column=0, sticky='nsew')
        sb = ttk.Scrollbar(frame)
        sb.grid(row=row, column=1, sticky='ns')
        text_w.configure(yscrollcommand=sb.set)
        sb.configure(command=text_w.yview)
        frame.columnconfigure(0, weight=1)
        frame.rowconfigure(1, weight=1)
        #
        text = ''
        fn = os.path.join(cardset.dir, "COPYRIGHT")
        try:
            with open(fn, "rt") as fh:
                text = fh.read()
        except Exception:
            pass
        if text:
            text_w.config(state="normal")
            text_w.insert("insert", text)
        text_w.config(state="disabled")
        #
        focus = self.createButtons(bottom_frame, kw)
        # focus = text_w
        self.mainloop(focus, kw.timeout)