Example #1
0
    def __init__(self, root, fileList, onSelect):
        LabelFrame.__init__(self, root, text="Duplicated Attributes")

        self.grid_rowconfigure(1, weight=1)
        self.grid_columnconfigure(2, weight=1)

        self.fileList = fileList
        self.attribList = []

        self.attribLbl = Label(self, text="Attribute")
        self.attribType = StringVar()
        self.attribMenu = OptionMenu(self, self.attribType, *DUPLICATE_TYPES)
        self.list = ScrollList(self, onSelect)

        self.attribMenu.config(width=10)
        self.attribType.set(DUPLICATE_TYPES[0])
        self.attribType.trace("w", self.refresh)

        self.attribLbl.grid(row=0, column=0, padx=5, pady=5, sticky="w")
        self.attribMenu.grid(row=0, column=2, padx=5, pady=5, sticky="w")
        self.list.grid(row=1,
                       column=0,
                       columnspan=3,
                       padx=5,
                       pady=5,
                       sticky="nesw")
Example #2
0
    def __init__(self, boss):
        #Magasin d'améliorations (cadre)
        LabelFrame.__init__(self, boss, text='Magasin')
        frameAmel = LabelFrame(self, text='Amelioration')
        frameAmel.pack(side='left')

        #Cadre objets
        frameObjets = LabelFrame(self, text='Objets')
        frameObjets.pack(side='right')

        #Statistiques possibles pour les améliorations (contenu)
        #listeStat = [[nom, nomAmel, max, prix par niveau, icone]]
        listeStat = [['Points de vie', 'pv', 50, 75, 5, 'pv'],
                     ['Dégats', 'atk', 75, 75, 5, 'atk'],
                     ['Mana', 'mana', 50, 50, 5, 'mana'],
                     ['Armure (%)', 'deff', 25, 15, 1, 'deff'],
                     ['Dégats critiques (%)', 'critDmg', 20, 50, 5, 'critDmg'],
                     ['Chance de critique (%)', 'critChc', 10, 40, 5, 'critChc'],
                     ["Multiplicateur d'or (%)", 'multOR', 20, 100, 10, 'multOR']]
        chargerImages()
        for i in range(len(listeStat)):
            Amel(frameAmel, listeStat[i][0], listeStat[i][1], listeStat[i][2], listeStat[i][3], listeStat[i][4], listeStat[i][5]).pack(fill=X)

        #Magasin d'objets (contenu)
        self.listComboBox = []
        for typ in range(len(listdir('Objets'))):
            Label(frameObjets, text=listdir('Objets')[typ]).pack()
            self.listComboBox.append(ComboboxObjet(frameObjets, listdir('Objets')[typ]))
            self.listComboBox[typ].pack()
Example #3
0
    def __init__(self, root, fileList, onNoDuplicates):
        LabelFrame.__init__(self, root, text="Files")

        self.grid_rowconfigure(1, weight=1)
        self.grid_columnconfigure(2, weight=1)

        self.fileList = fileList
        self.onNoDuplicates = onNoDuplicates
        self.activeFiles = []

        self.sortLbl = Label(self, text="Sort By")
        self.sortType = StringVar()
        self.sortMenu = OptionMenu(self, self.sortType, *SORT_OPTIONS)
        self.delBtn = Button(self,
                             text="Delete",
                             command=self.showDeleteDialog,
                             width=10)
        self.list = ScrollList(self)

        self.sortMenu.config(width=10)
        self.sortType.set(SORT_OPTIONS[0])
        self.sortType.trace("w", self.sort)

        self.sortLbl.grid(row=0, column=0, padx=5, pady=5, sticky="w")
        self.sortMenu.grid(row=0, column=1, padx=5, pady=5, sticky="w")
        self.delBtn.grid(row=0, column=3, padx=5, pady=5, sticky="e")
        self.list.grid(row=1,
                       column=0,
                       columnspan=4,
                       padx=5,
                       pady=5,
                       sticky="nesw")
Example #4
0
    def __init__(self, window, base, **kwargs):
        LabelFrame.__init__(self, window, **kwargs)
        self.base = base
        self.staff_id = None
        self.all_staff = [x[0] for x in self.base.get_all_staff()]
        self.data_label = Label(self, text="Data zespołu")
        self.data_label.grid(row=0, column=0, padx=5, pady=1, sticky='e')
        self.data_entry = Entry(self, width=20)
        self.data_entry.grid(row=0, column=1, padx=5, pady=1, sticky='w')

        self.table = Treeview(self, columns=("name", "speciality"))
        self.table.heading('#1', text='imię i nazwisko')
        self.table.heading('#2', text='specjalizacja')
        self.table.column('#1', width = 200)
        self.table.column('#2', width = 200)

        self.table.grid(row=1,column=0, rowspan=1, columnspan=2, padx=5, pady=5)
        self.table['show'] = 'headings'
        self.table.bind('<<TreeviewSelect>>', self.on_treeview_selected)

        self.another_stuff_frame = LabelFrame(self, text="Inni specjaliści")
        self.another_stuff_frame.grid(row=2, column=0, columnspan=2, pady=5)
        
        self.another_staff = Listbox(self.another_stuff_frame, width=48, height=12)
        self.another_staff.grid(row=0, column=0, rowspan=2, padx=5, pady=5)
        self.another_staff.bind('<<ListboxSelect>>', self.on_listbox_select)
        self.add_button = Button(self, text="Dodaj członka", command=self.add_member)
        self.add_button.grid(row=3, column=0, padx=5, pady=5)
        self.delete_button = Button(self, text="Usuń członka", command=self.remove_member)
        self.delete_button.grid(row=3, column=1, padx=5, pady=5)
Example #5
0
    def __init__(self, boss):
        #Magasin d'améliorations (cadre)
        LabelFrame.__init__(self, boss, text='Magasin')
        frameAmel = LabelFrame(self, text='Amelioration')
        frameAmel.pack(side='left')

        #Cadre objets
        frameObjets = LabelFrame(self, text='Objets')
        frameObjets.pack(side='right')

        #Statistiques possibles pour les améliorations (contenu)
        #listeStat = [[nom, nomAmel, max, prix par niveau, icone]]
        listeStat = [
            ['Points de vie', 'pv', 50, 75, 5, 'pv'],
            ['Dégats', 'atk', 75, 75, 5, 'atk'],
            ['Mana', 'mana', 50, 50, 5, 'mana'],
            ['Armure (%)', 'deff', 25, 15, 1, 'deff'],
            ['Dégats critiques (%)', 'critDmg', 20, 50, 5, 'critDmg'],
            ['Chance de critique (%)', 'critChc', 10, 40, 5, 'critChc'],
            ["Multiplicateur d'or (%)", 'multOR', 20, 100, 10, 'multOR']
        ]
        chargerImages()
        for i in range(len(listeStat)):
            Amel(frameAmel, listeStat[i][0], listeStat[i][1], listeStat[i][2],
                 listeStat[i][3], listeStat[i][4],
                 listeStat[i][5]).pack(fill=X)

        #Magasin d'objets (contenu)
        self.listComboBox = []
        for typ in range(len(listdir('Objets'))):
            Label(frameObjets, text=listdir('Objets')[typ]).pack()
            self.listComboBox.append(
                ComboboxObjet(frameObjets,
                              listdir('Objets')[typ]))
            self.listComboBox[typ].pack()
Example #6
0
    def __init__(self, parent, img_inputs, classifier, root, app):
        self.img_inputs = img_inputs
        self.classifier = classifier

        LabelFrame.__init__(self,
                            parent,
                            text='Image Input/s',
                            padx=10,
                            pady=10,
                            labelanchor='nw')
        self.pack(side=tk.LEFT, expand=False, fill=tk.BOTH)

        self.btn_select_images = Button(self,
                                        width=12,
                                        text='Select Images',
                                        command=self.select_images)
        self.btn_select_images.grid(row=2, column=1, pady=5, sticky='e')

        # Create scrollbars for image listbox (lb)
        self.scrollbar_v_lb = Scrollbar(self, orient=tk.VERTICAL)
        self.scrollbar_h_lb = Scrollbar(self, orient=tk.HORIZONTAL)

        self.scrollbar_v_lb.grid(row=0, column=2, sticky='nws')
        self.scrollbar_h_lb.grid(row=1, column=0, columnspan=2, sticky='wse')

        # Display all images selected by user in a listbox
        self.listbox = Listbox(self,
                               width=40,
                               height=15,
                               yscrollcommand=self.scrollbar_v_lb.set,
                               xscrollcommand=self.scrollbar_h_lb.set)
        self.listbox.grid(row=0, column=0, columnspan=2)

        # Create a label that displays '[count] image/s selected'
        self.label_image_count = Label(self,
                                       width=20,
                                       padx=5,
                                       pady=3,
                                       text='No image selected.',
                                       anchor='w',
                                       borderwidth=2,
                                       relief='ridge')
        self.label_image_count.grid(row=2, column=0, sticky='w')

        self.classifier.model_name.set(' No model selected.')
        self.model_name_display = Entry(
            self, textvariable=self.classifier.model_name, width=25)

        self.btn_select_model = Button(
            self,
            text='Select Model',
            width=12,
            command=lambda: self.classifier.select_model(self))
        self.btn_classify = Button(
            self,
            text='CLASSIFY',
            width=35,
            command=lambda: self.classifier.classify(root, app))
Example #7
0
    def __init__(self, parent, img_dir, classifier, root, app):
        self.img_dir = img_dir
        self.classifier = classifier
        self.dir_count = 0

        LabelFrame.__init__(self,
                            parent,
                            text='Image Input/s',
                            padx=10,
                            pady=10,
                            labelanchor='nw')
        self.pack(side=tk.LEFT, expand=False, fill=tk.BOTH)

        self.btn_select_images = Button(self,
                                        width=12,
                                        text='Select Img Dir',
                                        command=self.select_directory)
        self.btn_select_images.grid(row=2, column=1, pady=5, sticky='e')

        # Create scrollbars for image listbox (lb)
        self.scrollbar_v_lb = Scrollbar(self, orient=tk.VERTICAL)
        self.scrollbar_h_lb = Scrollbar(self, orient=tk.HORIZONTAL)

        self.scrollbar_v_lb.grid(row=0, column=2, sticky='nws')
        self.scrollbar_h_lb.grid(row=1, column=0, columnspan=2, sticky='wse')

        # Display all images selected by user in a list box
        self.listbox = Listbox(self,
                               width=40,
                               height=15,
                               yscrollcommand=self.scrollbar_v_lb.set,
                               xscrollcommand=self.scrollbar_h_lb.set)
        self.listbox.grid(row=0, column=0, columnspan=2)

        # Create a label that displays '[count] image/s selected'
        self.label_image_count = Label(self,
                                       width=25,
                                       padx=5,
                                       pady=3,
                                       text='No directory selected.',
                                       anchor='w',
                                       borderwidth=2,
                                       relief='ridge')
        self.label_image_count.grid(row=2, column=0, sticky='w')

        self.btn_select_images = Button(
            self,
            width=40,
            text='Preprocess training and test data',
            command=self.preprocess_data)
        self.btn_select_images.grid(row=3, column=0, columnspan=2, sticky='w')

        #progress data processing
        self.data_progress = Label(self, text='Processing data...', width=25)
Example #8
0
    def __init__(self):
        LabelFrame.__init__(self, text="Rechnungsdaten")
        self.partList = []

        self.row = 0

        self.lblNumber = Label(self, text="Rechnungsnummer:")
        self.number = Spinbox(self,
                              from_=1,
                              to=1000000,
                              wrap=True,
                              increment=1)
        self.btnAdd = Button(self, text="+", width=2)

        self.lblNumber.grid(row=self.row, column=0, sticky='w')
        self.row += 1
        self.number.grid(row=self.row, column=0, sticky='w')
        self.btnAdd.grid(row=self.row, column=9, sticky='e')
        self.row += 1

        # Data Frame with scrollable Data Fields
        self.frameData = Frame(self)
        self.frameData.grid(row=self.row, column=0, columnspan=10)
        self.canvas = Canvas(self.frameData, width=875)
        self.canvas.grid(row=0, column=0, sticky='nsew')

        self.canvasFrame = Frame(self.canvas)
        self.canvas.create_window(0, 0, window=self.canvasFrame, anchor='nw')

        self.myScrollbar = Scrollbar(self.frameData, orient='vertical')
        self.myScrollbar.config(command=self.canvas.yview)
        self.canvas.config(yscrollcommand=self.myScrollbar.set)
        self.myScrollbar.grid(row=0, column=1, sticky="nse")

        self.canvasFrame.bind("<Configure>", lambda e: self.scrollregion())

        self.row = 0

        self.lblQuantity = Label(self.canvasFrame, text="Menge:")
        self.lblUnit = Label(self.canvasFrame, text="Einheit:")
        self.lblDescription = Label(self.canvasFrame, text="Beschreibung:")
        self.lblPricePerUnit = Label(self.canvasFrame, text="Stückpreis:")

        self.lblQuantity.grid(row=self.row, column=0, sticky='w')
        self.lblUnit.grid(row=self.row, column=1, sticky='w')
        self.lblDescription.grid(row=self.row,
                                 column=2,
                                 columnspan=2,
                                 sticky='w')
        self.lblPricePerUnit.grid(row=self.row, column=4, sticky='w')
        self.row += 1

        self.addPart()
Example #9
0
 def __init__(self, boss, personnage, numero):
     LabelFrame.__init__(self, boss, text=personnage.type)
     self.pv = Label(self)
     self.pv.pack()
     self.atk = Label(self)
     self.atk.pack()
     self.deff = Label(self)
     self.deff.pack()
     self.critChc = Label(self)
     self.critChc.pack()
     Button(self, text='Choisir', command=self.choisir).pack()
     self.personnage = personnage
     self.maj()
Example #10
0
 def __init__(self, boss, nom, amelioration, maximum, prix, up, logo):
     """
     amelioration (str) : Nom de l'amélioration du bouton
     maximum (int) : Maximum de fois que l'on peut augmenter l'amélioration
     prix (int) : Prix de l'amélioration par niveau
     up (int) : Montant de point apporté par l'amélioration
     """
     global imagesMag
     self.amel = amelioration
     self.max = maximum
     self.prix = prix
     self.up = up
     LabelFrame.__init__(self,  boss)
     Label(self, image=imagesMag[logo]).pack(side=LEFT)
     Label(self, text=nom, width=18).pack(side=LEFT)
     self.button = Button(self, command=self.acheter, width = 6)
     self.level = Label(self, width=5)
     self.total = Label(self, width=11)
     self.total.pack(side=RIGHT)
     self.level.pack(side=RIGHT)
     self.button.pack(side=RIGHT)
     self.maj()
Example #11
0
 def __init__(self, boss, nom, amelioration, maximum, prix, up, logo):
     """
     amelioration (str) : Nom de l'amélioration du bouton
     maximum (int) : Maximum de fois que l'on peut augmenter l'amélioration
     prix (int) : Prix de l'amélioration par niveau
     up (int) : Montant de point apporté par l'amélioration
     """
     global imagesMag
     self.amel = amelioration
     self.max = maximum
     self.prix = prix
     self.up = up
     LabelFrame.__init__(self, boss)
     Label(self, image=imagesMag[logo]).pack(side=LEFT)
     Label(self, text=nom, width=18).pack(side=LEFT)
     self.button = Button(self, command=self.acheter, width=6)
     self.level = Label(self, width=5)
     self.total = Label(self, width=11)
     self.total.pack(side=RIGHT)
     self.level.pack(side=RIGHT)
     self.button.pack(side=RIGHT)
     self.maj()
Example #12
0
    def __init__(self):
        LabelFrame.__init__(self, text="Kunde")
        start_row = 0
        # -------------------------------------------------------------------
        # Row 0 - lblframeSort
        # -------------------------------------------------------------------
        # Labels + Comboboxes
        self.lblframeSort = LabelFrame(self, text="Sortieren")
        self.lblframeSort.grid(row=start_row, column=0, sticky='w')

        self._addSortableChooseList(self.lblframeSort)

        start_row += 1

        # -------------------------------------------------------------------
        # Row 1 - lblframeData
        # -------------------------------------------------------------------
        # Customer - Labels + Entries
        self.lblframeData = LabelFrame(self, text="Kundendaten")
        self.lblframeData.grid(row=start_row, column=0, sticky='w')

        self._addDataFields(self.lblframeData)

        start_row += 1
Example #13
0
    def __init__(self, parent, img_data, classifier, root, app):
        self.img_data = img_data
        self.classifier = classifier

        LabelFrame.__init__(self,
                            parent,
                            text='Results',
                            padx=10,
                            pady=10,
                            labelanchor='nw')

        self.str_status = StringVar()
        self.str_status.set('STATUS: ')

        self.pack(side=tk.LEFT, expand=False, fill=tk.BOTH)
        self.label_few = Label(self,
                               text='Few: ',
                               width=18,
                               padx=3,
                               pady=5,
                               anchor='w')
        self.label_intermediate = Label(self,
                                        text='Intermediate: ',
                                        width=18,
                                        padx=3,
                                        pady=5,
                                        anchor='w')
        self.label_dense = Label(self,
                                 text='Dense: ',
                                 width=18,
                                 padx=3,
                                 pady=5,
                                 anchor='w')
        self.label_very_dense = Label(self,
                                      text='Very Dense: ',
                                      width=18,
                                      padx=3,
                                      pady=5,
                                      anchor='w')

        self.label_few.grid(row=1, column=0, sticky='w')
        self.label_intermediate.grid(row=1, column=1, sticky='w')
        self.label_dense.grid(row=1, column=2, sticky='w')
        self.label_very_dense.grid(row=1, column=3, sticky='w')

        self.label_status = Label(self,
                                  textvariable=self.str_status,
                                  width=75,
                                  padx=3,
                                  pady=5,
                                  anchor='w',
                                  borderwidth=2,
                                  relief='ridge')
        self.label_status.grid(row=0, column=0, columnspan=4, sticky='w')

        self.str_few_stats = StringVar()
        self.str_few_stats.set('Few: ')
        self.str_intermediate_stats = StringVar()
        self.str_intermediate_stats.set('Intermediate: ')
        self.str_dense_stats = StringVar()
        self.str_dense_stats.set('Dense: ')
        self.str_very_dense_stats = StringVar()
        self.str_very_dense_stats.set('Very Dense: ')

        self.label_few = Label(self,
                               textvariable=self.str_few_stats,
                               width=18,
                               padx=3,
                               pady=5,
                               anchor='w')
        self.label_few.grid(row=1, column=0, sticky='w')
        self.label_intermediate = Label(
            self,
            textvariable=self.str_intermediate_stats,
            width=18,
            padx=3,
            pady=5,
            anchor='w')
        self.label_intermediate.grid(row=1, column=1, sticky='w')
        self.label_dense = Label(self,
                                 textvariable=self.str_dense_stats,
                                 width=18,
                                 padx=3,
                                 pady=5,
                                 anchor='w')
        self.label_dense.grid(row=1, column=2, sticky='w')
        self.label_very_dense = Label(self,
                                      textvariable=self.str_very_dense_stats,
                                      width=18,
                                      padx=3,
                                      pady=5,
                                      anchor='w')
        self.label_very_dense.grid(row=1, column=3, sticky='w')

        self.listbox_few = Listbox(self, width=19, height=13)
        self.listbox_few.grid(row=2, column=0, sticky='w')
        self.listbox_intermediate = Listbox(self, width=19, height=13)
        self.listbox_intermediate.grid(row=2, column=1, sticky='w')
        self.listbox_dense = Listbox(self, width=19, height=13)
        self.listbox_dense.grid(row=2, column=2, sticky='w')
        self.listbox_very_dense = Listbox(self, width=19, height=13)
        self.listbox_very_dense.grid(row=2, column=3, sticky='w')

        self.button_save_results = Button(
            self,
            width=15,
            text="Save Results",
            command=lambda: self.classifier.save_results(app),
            state=tk.DISABLED)
        self.button_save_results.grid(row=3, column=3, pady=5, sticky='w')
Example #14
0
 def __init__(self, root, label, font, **kw):
     LabelFrame.__init__(self, root, text=label, font=font)
     self.text = Text(self, font=font, relief='flat', **kw)
     self.text.pack(expand=True, fill=BOTH)
Example #15
0
    def __init__(self):
        LabelFrame.__init__(self, text="Firma")
        start_row = 0
        maxColCount = 3
        # My Company - Entries
        self.lblName = Label(self, text="Meine Firma:")
        self.name = Entry(self, width=63)
        self.lblName.grid(row=start_row, column=0, sticky='w')
        start_row += 1
        self.name.grid(row=start_row,
                       column=0,
                       columnspan=maxColCount,
                       sticky='w',
                       padx=1)
        start_row += 1

        self.lblAddress = Label(self, text="Addresse:")
        self.street = Entry(self, width=63)
        self.lblAddress.grid(row=start_row, column=0, sticky='w')
        start_row += 1
        self.street.grid(row=start_row,
                         column=0,
                         columnspan=maxColCount,
                         sticky='w',
                         padx=1)
        start_row += 1

        self.frameCodeCity = Frame(self)
        self.lblPostcode = Label(self.frameCodeCity, text="PLZ:")
        self.postcode = Entry(self.frameCodeCity, width=10)
        self.lblCity = Label(self.frameCodeCity, text="Ort:")
        self.city = Entry(self.frameCodeCity, width=52)
        self.frameCodeCity.grid(row=start_row,
                                column=0,
                                sticky='w',
                                columnspan=maxColCount)
        self.lblPostcode.grid(row=0, column=0, sticky='w')
        self.lblCity.grid(row=0, column=1, sticky='w')
        self.postcode.grid(row=1, column=0, sticky='w', padx=1)
        self.city.grid(row=1, column=1, sticky='w', padx=1)
        start_row += 1

        self.lblCountry = Label(self, text="Land:")
        self.country = Entry(self, width=63)
        self.lblCountry.grid(row=start_row, column=0, sticky='w')
        start_row += 1
        self.country.grid(row=start_row,
                          column=0,
                          columnspan=maxColCount,
                          sticky='w',
                          padx=1)
        start_row += 1

        self.lblMail = Label(self, text="E-Mail:")
        self.mail = Entry(self, width=63)
        self.lblMail.grid(row=start_row, column=0, sticky='w')
        start_row += 1
        self.mail.grid(row=start_row,
                       column=0,
                       columnspan=maxColCount,
                       sticky='w',
                       padx=1)
        start_row += 1

        self.lblPhone = Label(self, text="Telefon:")
        self.phone = Entry(self, width=63)
        self.lblPhone.grid(row=start_row, column=0, sticky='w')
        start_row += 1
        self.phone.grid(row=start_row,
                        column=0,
                        columnspan=maxColCount,
                        sticky='w',
                        padx=1)
        start_row += 1

        self.lblBank = Label(self, text="Bank:")
        self.bank = Entry(self, width=63)
        self.lblIban = Label(self, text="IBAN:")
        self.iban = Entry(self, width=63)
        self.lblBic = Label(self, text="BIC:")
        self.bic = Entry(self, width=63)
        self.lblBank.grid(row=start_row, column=0, sticky='w')
        start_row += 1
        self.bank.grid(row=start_row,
                       column=0,
                       columnspan=maxColCount,
                       sticky='w',
                       padx=1)
        start_row += 1
        self.lblIban.grid(row=start_row, column=0, sticky='w')
        start_row += 1
        self.iban.grid(row=start_row,
                       column=0,
                       columnspan=maxColCount,
                       sticky='w',
                       padx=1)
        start_row += 1
        self.lblBic.grid(row=start_row, column=0, sticky='w')
        start_row += 1
        self.bic.grid(row=start_row,
                      column=0,
                      columnspan=maxColCount,
                      sticky='w',
                      padx=1)
        start_row += 1
Example #16
0
    def __init__(self, mainframe, index):
        LabelFrame.__init__(self, mainframe)

        self.mainframe = mainframe
        self.index = index
        self.hist_index = 0
        self.collapsed = False
        self.rollers = []
        self.control_frame = Frame(None)
        default_font = ('Verdana', 10)

        self.name = StringVar()
        self.name.trace('w', self.mainframe.set_unsaved_title)

        self.expand_img = PhotoImage(
            data=
            b'R0lGODlhEAAQAIABAAAAAP///yH5BAEKAAEALAAAAAAQABAAAAIlhI+pq+EPHYo0TGjifRkfDYAdI33WUnZc6KmlyK5wNdMrg+dJAQA7'
        )
        self.collapse_img = PhotoImage(
            data=
            b'R0lGODlhEAAQAIABAAAAAP///yH5BAEKAAEALAAAAAAQABAAAAIfhI+pq+EPHYo0zAovlme/y3CGmJCeeWqbirEVA8dLAQA7'
        )

        self.collapse_btn = Button(self.control_frame,
                                   bd=0,
                                   image=self.collapse_img,
                                   command=self.show_hide)
        self.menu_btn = Menubutton(self.control_frame,
                                   bd=1,
                                   relief='solid',
                                   font=('Courier', 8),
                                   text='\u25e2',
                                   takefocus=1,
                                   highlightthickness=1)
        self.name_entry = Entry(self.control_frame,
                                bd=1,
                                relief='solid',
                                font=('Verdana', 12),
                                width=16,
                                textvariable=self.name)

        self.history_frame = LabelFrame(self.control_frame,
                                        bd=1,
                                        text='History',
                                        relief='solid',
                                        font=default_font,
                                        labelanchor='w')
        self.roll_frame = LabelFrame(self.control_frame,
                                     bd=1,
                                     text='Roll',
                                     relief='solid',
                                     font=default_font,
                                     labelanchor='w')

        self.roll_img = PhotoImage(
            data=
            b'R0lGODlhDgARAIABAAAAAP///yH5BAEKAAEALAAAAAAOABEAAAIkjB+Ai6C83GOy0iqjM7ltPoFhKEKeKZJadynfVa6HlbAp3ZIFADs='
        )
        self.left_arrow = PhotoImage(
            data=
            b'R0lGODlhBwANAIABAAAAAP///yH5BAEKAAEALAAAAAAHAA0AAAITjA9nkMj+Apty2lvt0jt2VYFSAQA7'
        )
        self.right_arrow = PhotoImage(
            data=
            b'R0lGODlhBwANAIABAAAAAP///yH5BAEKAAEALAAAAAAHAA0AAAITRI5gGLrnXlzT1NsidEkx/zFHAQA7'
        )

        self.roll_btn = Button(self.roll_frame,
                               bd=0,
                               image=self.roll_img,
                               height=24,
                               command=self.roll_group)
        self.hist_prev_btn = Button(
            self.history_frame,
            bd=0,
            image=self.left_arrow,
            height=24,
            width=16,
            repeatdelay=250,
            repeatinterval=100,
            command=lambda: self.navigate_history(offset=-1))
        self.hist_next_btn = Button(
            self.history_frame,
            bd=0,
            image=self.right_arrow,
            height=24,
            width=16,
            repeatdelay=250,
            repeatinterval=100,
            command=lambda: self.navigate_history(offset=1))

        self.menu_btn.config(menu=self.create_menu())

        self.collapse_btn.grid(row=0, column=0, padx=(4, 0))
        self.menu_btn.grid(row=0, column=1, padx=(4, 0))
        self.name_entry.grid(row=0, column=2, padx=(4, 0))
        self.history_frame.grid(row=0, column=3, padx=(6, 0))
        self.hist_prev_btn.grid(row=0, column=0, padx=(6, 0))
        self.hist_next_btn.grid(row=0, column=1, padx=(0, 2))
        self.roll_frame.grid(row=0, column=4, padx=(6, 4))
        self.roll_btn.grid(row=0, column=0, padx=(6, 2))

        self.config(relief='solid', labelwidget=self.control_frame)
        self.name.set('Group {}'.format(len(roller_groups) + 1))
        self.grid(row=index, padx=4, pady=4, sticky='w')