Beispiel #1
0
    def createTextPadGroup(self):
        groupBox = QGroupBox('Codeeditor')
        # tabWidthBox

        label1 = Label('Width for <Tab> in whitespaces:')

        self.tabWidthBox = QSpinBox()
        self.tabWidthBox.setMinimum(2)
        self.tabWidthBox.setMaximum(10)
        tab = int(self.c.getTab())
        self.tabWidthBox.setValue(tab)

        label2 = Label('Font size:')

        self.fontBox = QSpinBox()
        self.fontBox.setMinimum(6)
        self.fontBox.setMaximum(30)
        font = int(self.c.getFont())
        self.fontBox.setValue(font)

        label3 = WhiteLabel(
            'Changes in this area will be appear on\nrestart or new Tab')
        vbox = QVBoxLayout()

        vbox.addWidget(label1)
        vbox.addWidget(self.tabWidthBox)
        vbox.addWidget(label2)
        vbox.addWidget(self.fontBox)
        vbox.addWidget(label3)

        groupBox.setLayout(vbox)

        return groupBox
Beispiel #2
0
    def make_colors_table(self, colors):

        def clear_select(evt):
            evt.widget.selection_clear()

        l_col = [
            'background 1', 'background 2', 'background 3', 'font color']

        self.h1.grid(
            column=0, row=0, 
            sticky='ew', 
            ipady=3,
            pady=6)

        self.h2.grid(
            column=1, row=0, 
            sticky='ew', 
            ipady=3,
            pady=6)

        self.entries_combos = []
        j = 1
        for name in l_col:
            lab = Label(
                self.colors_table,
                anchor='w',
                text=name)
            lab.grid(column=0, row=j, sticky='ew', padx=(6,12), pady=3)
            ent = Entry(self.colors_table, width=12)
            self.r_col[name] = ent
            ent.grid(column=1, row=j, pady=3)
            self.entries_combos.append(ent)
            ent.bind('<FocusOut>', clear_select)
            ent.bind('<Double-Button-1>', self.open_color_chooser)
            j += 1
Beispiel #3
0
 def update_db(widg):
     final = widg.get()
     for child in frame.winfo_children():
         child.destroy()
     final = ValidatePlace(view, treebard, final)
     j = 0
     for dkt in final.place_dicts:
         lab = Label(frame,
                     text='{} id#{}'.format(final.place_dicts[j]["input"],
                                            final.place_dicts[j]["id"]))
         lab.grid()
         j += 1
Beispiel #4
0
def startResultsScreen(techMechsSaved, saveRequirement):
    global continueResults, savedText, requiredText, finalText

    continueResults = True
    savedText = Label(0, 0,
                      "You saved " + str(techMechsSaved) + " Tech Mechs.")
    requiredText = Label(0, 50,
                         "You needed " + str(saveRequirement) + " Tech Mechs.")
    if techMechsSaved >= saveRequirement:
        finalText = Label(0, 100, "Congratulations! You beat the level!")
    else:
        finalText = Label(0, 100, "Too bad! You didn't save enough.")
Beispiel #5
0
    def __init__(self, master, command, *args, **kwargs):
        Frame.__init__(self, master, *args, **kwargs)

        self.ent = Entry(self, width=36)
        spacer = Label(self, width=3)

        ok_butt = Button(self, text='OK', command=command)

        cancel_butt = Button(self, text='CANCEL', command=self.remove_edit_row)

        spacer.grid(column=0, row=0)
        self.ent.grid(column=1, row=0, padx=3, pady=3)
        ok_butt.grid(column=2, row=0, padx=6, pady=6)
        cancel_butt.grid(column=3, row=0, padx=6, pady=6)
Beispiel #6
0
    def make_menus(self):

        menu = Label(self.master.menu, text='menu bar')
        icon1 = Label(self.master.ribbon, text='ribbon menu')

        menu.grid()
        icon1.grid()
Beispiel #7
0
    def __init__(self, text="", ok="Ok", cancel="Cancel",
                 window=None, batch=None, group=None, theme=None,
                 on_ok=None, on_cancel=None):
        def on_ok_click(dialog=None):
            if on_ok is not None:
                on_ok(self)
            self.teardown()

        def on_cancel_click(dialog=None):
            if on_cancel is not None:
                on_cancel(self)
            self.teardown()

        return Dialog.__init__(self, content=Frame(
            VerticalLayout([
                Label(text),
                HorizontalLayout([
                    Button(ok, on_click=on_ok_click),
                    None,
                    Button(cancel, on_click=on_cancel_click)
                ]),
            ])),
            window=window, batch=batch, group=group,
            theme=theme, movable=True,
            on_enter=on_ok_click, on_escape=on_cancel_click)
Beispiel #8
0
    def __init__(self, disp, buttons, tim):
        super().__init__(name="Name",
                         display=disp,
                         buttons=buttons,
                         timer=tim,
                         btn_b=self.btn_b)
        cont = self.get_cont()
        cont.set_center()

        first, nick, last = self.get_name()

        self.add_item("firstname", Label(cont.lv_obj, first))
        self.add_item("nickname", Label(cont.lv_obj, nick, font_size=28))
        self.add_item("lastname", Label(cont.lv_obj, last))

        self.load_screen()
Beispiel #9
0
    def __init__(self, title, content=None, is_open=True, align=HALIGN_CENTER):
        Control.__init__(self)
        if align == HALIGN_LEFT:
            left_expand = False
            right_expand = True
        elif align == HALIGN_CENTER:
            left_expand = True
            right_expand = True
        else:  # HALIGN_RIGHT
            left_expand = True
            right_expand = False

        self.is_open = is_open
        self.folding_content = content
        self.book = Graphic(self._get_image_path())

        self.header = HorizontalLayout([
            Graphic(path=["section", "left"], is_expandable=left_expand),
            Frame(HorizontalLayout([
                self.book,
                Label(title, path=["section"]),
            ]),
                  path=["section", "center"],
                  use_bg_group=True),
            Graphic(path=["section", "right"], is_expandable=right_expand),
        ],
                                       align=VALIGN_BOTTOM,
                                       padding=0)
        layout = [self.header]
        if self.is_open:
            layout.append(content)

        VerticalLayout.__init__(self, content=layout, align=align)
Beispiel #10
0
 def init_ranked_list(self):
     # create labels and display them in a 1-column grid
     self.labels = [Label(str(i), self) for i in range(10)]
     for i in range(len(self.labels)):
         y = self.grid_y + i * self.row_height
         rank_label = QtGui.QLabel('%i' % i, self)
         rank_label.move(20, y)
     self.createGrid()
Beispiel #11
0
    def initUI(self):
        vbox = QVBoxLayout()
        hbox = QHBoxLayout()
        grid = QGridLayout()

        runLabel = Label('Run Command: ')

        terminalLabel = Label('Terminal Command: ')
        interpreterLabel = Label('Interpreter Command: ')

        self.c = Configuration()
        system = self.c.getSystem()

        runCommand = self.c.getRun(system)
        terminalCommand = self.c.getTerminal(system)
        interpreterCommand = self.c.getInterpreter(system)

        self.runBox = QLineEdit(runCommand)
        self.runBox.setCursorPosition(0)
        self.runBox.setMinimumWidth(30)
        self.terminalBox = QLineEdit(terminalCommand)
        self.terminalBox.setCursorPosition(0)
        self.interpreterBox = QLineEdit(interpreterCommand)
        self.interpreterBox.setCursorPosition(0)

        okButton = PushButton('OK')
        okButton.pressed.connect(self.close)

        groupBox1 = self.createRadioGroup()
        groupBox2 = self.createTextPadGroup()

        self.checkRadio(system)

        grid.addWidget(runLabel, 0, 0)
        grid.addWidget(self.runBox, 0, 1)
        grid.addWidget(terminalLabel, 1, 0)
        grid.addWidget(self.terminalBox, 1, 1)
        grid.addWidget(interpreterLabel, 2, 0)
        grid.addWidget(self.interpreterBox, 2, 1)
        grid.addWidget(okButton, 4, 1)
        grid.addWidget(groupBox1, 3, 0)
        grid.addWidget(groupBox2, 3, 1)

        self.setLayout(grid)

        self.show()
Beispiel #12
0
 def __init__(self, widget, name='Widget', color='#ff999999'):
     if widget.width + 4 >= len(name) + 1:
         box = self.generate_box(widget.width + 2, widget.height + 2, color)
     else:
         box = self.generate_box(len(name), widget.height + 2, color)
     super().__init__(*box)
     self.add_child(widget, pos=(2, 2))
     self.add_child(Label(name, color='green'), pos=(1, 0))
     self._rebuild_self()
Beispiel #13
0
    def make_widgets(self):

        self.make_scrollbars()

        self.make_menus()

        scridth = 20
        scridth_n = Frame(self, height=scridth)
        scridth_w = Frame(self, width=scridth)
        header = Frame(self)
        heading = LabelH3(header, text='header text')
        self.main_tabs = Frame(self)
        persons_tab = Frame(self.main_tabs)
        footer = Frame(self)
        boilerplate = Label(footer, text='footer')

        current_person_area = Frame(persons_tab)
        current_person = LabelH3(current_person_area)
        right_panel = Frame(persons_tab)
        attributes_table = Label(right_panel, text='attributes table')

        findings_table = EventsTable(persons_tab, self.view, self.treebard)

        # children of self
        scridth_n.grid(column=0, row=0, sticky='ew')
        scridth_w.grid(column=0, row=1, sticky='ns')
        header.grid(column=1, row=1, sticky='ew')
        self.columnconfigure(1, weight=1)
        self.rowconfigure(2, weight=1)
        self.main_tabs.grid(column=1, row=2, sticky='ew')
        footer.grid(column=1, row=3, sticky='ew')

        # children of header
        heading.grid(column=0, row=0, sticky='ew')

        # children of self.main_tabs
        persons_tab.grid(column=0, row=0, sticky='news')

        # children of persons_tab
        current_person_area.grid(column=0, row=0, sticky='w')
        right_panel.grid(column=1, row=0, sticky='e')
        findings_table.grid(column=0, row=1, columnspan=2, sticky='news')

        # children of current_person_area
        current_person.grid(column=0, row=0, sticky='w')

        # children of right_panel
        attributes_table.grid(column=0, row=0, sticky='news')

        # children of footer
        boilerplate.grid()
Beispiel #14
0
 def _get_content(self):
     return Frame(
         VerticalLayout([
             SectionHeader(self.title),
             self.scrollable,
             Label("Directory:"),
             self.text_input,
             HorizontalLayout([
                 self.select_button, None, self.cancel_button
             ]),
         ], align=HALIGN_LEFT)
     )
Beispiel #15
0
    def __init__(self, master, icon='sizer_15_dark', *args, **kwargs):
        Label.__init__(self, master, *args, **kwargs)
        ''' 
            SE corner gripper/resizer. Replaces ttk.Sizegrip.
            The master has to be the toplevel window being resized.
            Since it's placed, not gridded, it will overlap so
            the statusbar tooltips had to be moved to the left
            with padding. See StatusbarTooltips class in widgets.py
            for an example of how to place() and bind() this. 
        '''

        self.master = master
        self.click_x = 0
        self.click_y = 0
        file = '{}images/icons/{}.png'.format(project_path, icon)
        img = Image.open(file)
        self.tk_img = ImageTk.PhotoImage(img)

        self.config(bg=formats['bg'],
                    bd=0,
                    cursor='size_nw_se',
                    image=self.tk_img)
Beispiel #16
0
    def __init__(self, text="", window=None, batch=None, group=None,
                 theme=None, on_escape=None):
        def on_ok(dialog=None):
            if on_escape is not None:
                on_escape(self)
            self.teardown()

        return Dialog.__init__(self, content=Frame(
            VerticalLayout([
                Label(text),
                Button("Ok", on_click=on_ok),
            ])),
            window=window, batch=batch, group=group,
            theme=theme, movable=True,
            on_enter=on_ok, on_escape=on_ok)
Beispiel #17
0
 def __init__(self, title, content):
     VerticalLayout.__init__(
         self,
         content=[
             HorizontalLayout([
                 Graphic(path=["titlebar", "left"], is_expandable=True),
                 Frame(Label(title, path=["titlebar"]),
                       path=["titlebar", "center"]),
                 Graphic(path=["titlebar", "right"], is_expandable=True),
             ],
                              align=VALIGN_BOTTOM,
                              padding=0),
             Frame(content, path=["titlebar", "frame"], is_expandable=True),
         ],
         padding=0)
Beispiel #18
0
    def __init__(self, title, align=HALIGN_CENTER):
        if align == HALIGN_LEFT:
            left_expand = False
            right_expand = True
        elif align == HALIGN_CENTER:
            left_expand = True
            right_expand = True
        else:  # HALIGN_RIGHT
            left_expand = True
            right_expand = False

        HorizontalLayout.__init__(self,
                                  content=[
                                      Graphic(path=["section", "left"],
                                              is_expandable=left_expand),
                                      Frame(Label(title, path=["section"]),
                                            path=['section', 'center'],
                                            use_bg_group=True),
                                      Graphic(path=["section", "right"],
                                              is_expandable=right_expand),
                                  ],
                                  align=VALIGN_BOTTOM,
                                  padding=0)
Beispiel #19
0
class Game:
    def __init__(self):
        self.screen = pygame.display.set_mode((SCREENX, SCREENY), 0, 32)
        self.clock = pygame.time.Clock()
        self.block_list = pygame.sprite.Group()

        self.create_tiles(DIST_Y)
        self.board = None
        self.undos = None
        self.restarting = False

        self.create_widgets()

    def create_widgets(self):
        #Label((275,50,180,50), font=self.fonts[2], text=f"SCORE: {self.score}", bgcolor=BGCOLOR, fgcolor=BLACK).draw(self.screen)

        fonts = [
            pygame.font.SysFont('Arial', size, True) for size in (70, 40, 25)
        ]
        self.lose_label = Label(center=True,
                                size=(200, 100),
                                font=fonts[1],
                                text='You Lose',
                                fgcolor=BLACK)

        # Restart UI
        self.restartUI = Frame(pos=(45, 145),
                               size=(405, 405),
                               bgcolor=BLACK,
                               transparency=100)
        restart_lbl = Frame(parent=self.restartUI,
                            pos=(100, 100),
                            size=(205, 105),
                            bgcolor=(100, 100, 190))
        Label(parent=restart_lbl, center=True, font=fonts[1], text='Restart?')

        cancel_restart = Frame(parent=self.restartUI,
                               pos=(220, 215),
                               size=(75, 35),
                               bgcolor=(192, 100, 100))
        Button(parent=cancel_restart,
               center=True,
               font=fonts[1],
               text='No',
               command=lambda _: self.set_restart(False))

        do_restart = Frame(parent=self.restartUI,
                           pos=(115, 215),
                           size=(75, 35),
                           bgcolor=(192, 100, 100))
        Button(parent=do_restart,
               center=True,
               font=fonts[1],
               text='Yes',
               command=self.restart)

        # Main UI
        self.mainUI = Frame(pos=(0, 0),
                            size=(SCREENX, SCREENY),
                            bgcolor=BGCOLOR)

        undo_btn_image = Frame(parent=self.mainUI,
                               pos=(390, 95),
                               size=(50, 50),
                               image=pygame.image.load('undo.png'))
        Button(parent=undo_btn_image, command=self.undo)

        restart_btn_image = Frame(parent=self.mainUI,
                                  pos=(330, 95),
                                  size=(50, 50),
                                  image=pygame.image.load('restart.png'))
        Button(parent=restart_btn_image,
               command=lambda _: self.set_restart(True))

        title_frame = Frame(parent=self.mainUI, pos=(25, 50), size=(200, 80))
        Label(parent=title_frame, center=True, font=fonts[0], text="2048")

        score_frame = Frame(parent=self.mainUI, pos=(275, 50), size=(180, 50))
        self.score_label = Label(parent=score_frame,
                                 center=True,
                                 font=fonts[2],
                                 text='score')

    def state(self):
        """0 for not finished, -1 for lose """
        # Check for empty spaces
        if any(self.board[i][j] == 0 for j in range(4) for i in range(4)):
            return 0

        # Check if 2 similar numbers are in consecutive cells
        for i in range(3):
            for j in range(3):
                if self.board[i][j] == self.board[
                        i + 1][j] or self.board[i][j] == self.board[i][j + 1]:
                    return 0

        return -1

    def generate_board(self):
        try:
            with open('saves.dat', 'rb') as file:
                self.undos = pickle.load(file)
                self.score, self.board = self.undos.pop()
        except:
            self.board = [[0 for _ in range(4)] for _ in range(4)]
            self.drop(self.board, 2)

            self.undos = [(0, copy.deepcopy(self.board))]
            self.score = 0

    def create_tiles(self, top):
        for i in range(4):
            for j in range(4):
                block = Block(self,
                              j * (block_size[0] + spaces[0]) + spaces[1], top,
                              (i, j))
                self.block_list.add(block)

            top += block_size[1] + spaces[2]

    def getEmpty(self, board):
        """ Empty spaces """
        return [(i, j) for i in range(4) for j in range(4) if board[i][j] == 0]

    def removeSpaces(self, board):
        """ remove the spaces between tiles """
        for x in range(3):
            for i in range(4):
                for j in range(x, 4):
                    if board[i][x] == 0:
                        board[i][x] = board[i][j]
                        board[i][j] = 0
        return board

    def rot90(self, board, direction):
        if direction < 0:
            direction += 4
        for _ in range(direction):
            board = [list(row) for row in zip(*board)][::-1]
        return board

    def drop(self, board, n):
        """ Random drops """
        for i in range(n):
            row, col = random.choice(self.getEmpty(board))
            board[row][col] = random.choice(vals)
        return board

    def move(self, direction):
        """ Move in Left, Right, Up or Down """
        initial_score = self.score
        board1 = copy.deepcopy(self.board)
        board2 = self.rot90(board1, direction)
        board2 = self.removeSpaces(board2)

        # merge adjacent tiles
        for i in range(4):
            for j in range(1, 4):
                if board2[i][j] == board2[i][j - 1]:
                    board2[i][j - 1] *= 2
                    self.score += board2[i][j - 1]
                    board2[i][j] = 0

        board2 = self.removeSpaces(board2)
        board1 = self.rot90(board2, -direction)

        if self.board != board1:
            self.undos.append((initial_score, self.board))
            board1 = self.drop(board1, 1)

        return board1

    def undo(self, _=None):
        try:
            self.score, self.board = self.undos.pop()
        except:
            pass

    def set_restart(self, value):
        self.restarting = value

    def restart(self, _=None):
        self.running = False
        self.run()

    def save(self):
        with open('saves.dat', 'wb') as file:
            pickle.dump(self.undos, file)

    def run(self):
        self.generate_board()
        self.running = True
        self.restarting = False
        while self.running:
            self.score_label.config(text=f"SCORE: {self.score}")
            self.mainUI.draw(self.screen)

            pygame.draw.rect(self.screen, (119, 110, 101), (45, 145, 405, 405))
            self.block_list.draw(self.screen)

            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    self.running = False

                elif event.type == pygame.KEYDOWN:  # and not restarting:
                    "game movement based on keys pressed "

                    if event.key == pygame.K_w: self.board = self.move(1)
                    elif event.key == pygame.K_a: self.board = self.move(0)
                    elif event.key == pygame.K_s: self.board = self.move(3)
                    elif event.key == pygame.K_d: self.board = self.move(2)
                    elif event.key == pygame.K_u and len(self.undos):
                        self.undo()

            x = self.state()
            self.block_list.update()
            if x == -1:
                self.lose_label.draw(self.screen)
                self.restarting = True

            if self.restarting:
                self.restartUI.draw(self.screen)

            pygame.display.flip()
            self.clock.tick(FPS)
Beispiel #20
0
    def make_widgets(self):

        all_pics = self.get_all_pics()

        lab1 = Label(self, text='Gender:')
        self.gender_input = ClearableReadonlyCombobox(self, values=GENDER_TYPES)

        lab2 = Label(self, text='Main Image:')
        self.image_input = ClickAnywhereCombo(self, values=all_pics)

        lab3 = Label(self, text='Name Type:')
        self.name_type_input = ClearableReadonlyCombobox(self, values=self.get_name_types())

        lab4 = Label(self, text='Full Name')
        self.name_input = Entry(self, width=65)

        self.how = LabelH3(
            self, 
            text='Alphabetize name: after clicking auto-sort, tab into '
                  'auto-filled name fields to modify\nsort order with '
                  'arrow keys or if sort order is correct, just click ADD.')

        autosort = Button(
            self, text='AUTOSORT', command=self.show_sort_order)

        self.order_frm = Frame(self)

        s = 0
        for stg in range(20):
            mov = LabelMovable(self.order_frm)
            mov.grid(column=s, row=0, padx=3)
            s += 1 

        self.buttonbox = Frame(self)
        self.add_butt = Button(self.buttonbox, text='ADD', width=8)

        lab1.grid(column=0, row=3)
        self.gender_input.grid(
            column=1, row=3, padx=12, pady=12, sticky='e')
        lab2.grid(column=2, row=3)
        self.image_input.grid(column=3, row=3, padx=12, pady=12)
        lab3.grid(column=0, row=4)
        self.name_type_input.grid(
            column=1, row=4,  padx=12, pady=12, sticky='e')
        lab4.grid(column=2, row=4)
        self.name_input.grid(column=3, row=4, padx=12, pady=12)

        self.how.grid(column=0, row=5, padx=6, pady=6, columnspan=4)
        autosort.grid(column=0, row=6, padx=6, pady=6)
        self.order_frm.grid(column=1, row=6, columnspan=4, pady=24)
        self.buttonbox.grid(column=1, row=7, sticky='e')
        self.add_butt.grid(column=0, row=0, padx=6, pady=6, sticky='e')

        self.new_person_statusbar = StatusbarTooltips(self.parent, resizer=False)
        visited = (
            (self.gender_input, 
                "Gender Input", 
                "'Unknown' used if left blank."),
            (self.image_input, 
                "Image Input", 
                "Use an old photo of person's home town if no photo available."),
            (self.name_type_input, 
                "Name Type Input", 
                "Choose the name type."),
            (self.name_input, 
                "Name Input", 
                "Autofills but you can change it."),
            (autosort, 
                "Autosort Button", 
                "Click to auto-create a sortable name."),
            (self.order_frm, 
                "", 
                "Tab to focus name element. Arrow to change order.")
)        
        run_statusbar_tooltips(
            visited, 
            self.new_person_statusbar.status_label, 
            self.new_person_statusbar.tooltip_label)

        self.preset()

        rcm_widgets = (self.name_input, self.name_type_input)
        make_rc_menus(
            rcm_widgets, 
            self.rc_menu, 
            person_add_msg)
Beispiel #21
0
    def make_widgets(self):

        self.frm = Frame(self)
        self.frm.grid(column=0, row=0, pady=(0, 18))

        self.errlab = Label(self.frm, text='Input was: ')
        self.errlab.grid(column=0, row=0, padx=24, pady=(24, 0), sticky='w')
        self.errshow = LabelItalic(self.frm)
        self.errshow.grid(column=1, row=0, pady=(24, 0), sticky='w')

        self.errmsg = tk.Message(self.frm,
                                 text=self.message,
                                 bd=3,
                                 relief='raised',
                                 aspect=400)
        self.errmsg.grid(column=0, row=1, padx=36, pady=(0, 18), columnspan=2)

        self.promptlab = Label(self.frm)
        self.var = tk.StringVar()
        self.altentry = Entry(self.frm)
        self.altentry.config(textvariable=self.var)

        self.promptlab.grid(column=0, row=2, pady=24, padx=24, sticky='w')
        self.altentry.grid(column=1, row=2, pady=24, sticky='w')
        self.promptlab.grid_remove()
        self.altentry.grid_remove()

        self.altentry.focus_set()
        self.altentry.bind('<Return>', self.on_ok)

        self.bbox = Frame(self)
        self.bbox.grid(column=0, row=3, columnspan=2)

        self.done = Button(self.bbox, text='DONE', command=self.on_ok, width=9)
        self.done.grid(column=0, row=0, padx=24, pady=(12, 24))
        self.done.grid_remove()

        self.stop = Button(self.bbox,
                           text='CANCEL1',
                           command=self.on_cancel,
                           width=9)
        self.stop.grid(column=1, row=0, padx=24, pady=(12, 24))
        self.stop.grid_remove()

        self.done.focus_set()

        self.accept = Button(self.bbox,
                             text='Accept Original Input',
                             command=self.on_ok,
                             width=36)
        self.accept.grid(column=0, row=0, padx=24, pady=12)
        self.accept.grid_remove()

        self.edit = Button(self.bbox,
                           text='Submit Edited Input',
                           command=self.on_alt,
                           width=36)
        self.edit.grid(column=0, row=1, padx=24, pady=12)
        self.edit.grid_remove()

        self.cancel_all = Button(self.bbox,
                                 text="Cancel (Don't Submit Anything)",
                                 command=self.on_cancel,
                                 width=36)
        self.cancel_all.grid(column=0, row=2, padx=24, pady=(12, 36))
        self.cancel_all.grid_remove()

        self.bind('<Escape>', self.on_cancel)

        PlaySound('SystemHand', SND_ASYNC)

        self.protocol("WM_DELETE_WINDOW", self.on_cancel)
Beispiel #22
0
class MessageModel(Toplevelx):
    ''' 
        parent: modal dialog has no minimize/maximize buttons, goes where parent goes
        gparent: parent of parent might need to be destroyed on click of msg button
        title: goes on title bar of dialog using w.title('title') method
        prompt: tells the user to enter some data in an entry or combobox
        message: multiline Message widget text to inform user why dialog opened
        input: bad input from user displayed in dialog so he sees his typo/bad data
        x = inst.show(): data input by user into dialog is returned on dialog close
    '''
    def __init__(self,
                 parent,
                 gparent=None,
                 title=None,
                 prompt=None,
                 message=None,
                 input_text=None,
                 *args,
                 **kwargs):
        Toplevelx.__init__(self, parent, title=None, *args, **kwargs)

        self.edit_input = False
        self.add_data_to_db = True

        self.parent = parent
        self.gparent = gparent
        self.prompt = prompt
        self.message = message
        self.input_text = input_text

        if title:
            self.title(title)

        self.grab_set()
        self.transient(parent)

        self.make_widgets()

    def make_widgets(self):

        self.frm = Frame(self)
        self.frm.grid(column=0, row=0, pady=(0, 18))

        self.errlab = Label(self.frm, text='Input was: ')
        self.errlab.grid(column=0, row=0, padx=24, pady=(24, 0), sticky='w')
        self.errshow = LabelItalic(self.frm)
        self.errshow.grid(column=1, row=0, pady=(24, 0), sticky='w')

        self.errmsg = tk.Message(self.frm,
                                 text=self.message,
                                 bd=3,
                                 relief='raised',
                                 aspect=400)
        self.errmsg.grid(column=0, row=1, padx=36, pady=(0, 18), columnspan=2)

        self.promptlab = Label(self.frm)
        self.var = tk.StringVar()
        self.altentry = Entry(self.frm)
        self.altentry.config(textvariable=self.var)

        self.promptlab.grid(column=0, row=2, pady=24, padx=24, sticky='w')
        self.altentry.grid(column=1, row=2, pady=24, sticky='w')
        self.promptlab.grid_remove()
        self.altentry.grid_remove()

        self.altentry.focus_set()
        self.altentry.bind('<Return>', self.on_ok)

        self.bbox = Frame(self)
        self.bbox.grid(column=0, row=3, columnspan=2)

        self.done = Button(self.bbox, text='DONE', command=self.on_ok, width=9)
        self.done.grid(column=0, row=0, padx=24, pady=(12, 24))
        self.done.grid_remove()

        self.stop = Button(self.bbox,
                           text='CANCEL1',
                           command=self.on_cancel,
                           width=9)
        self.stop.grid(column=1, row=0, padx=24, pady=(12, 24))
        self.stop.grid_remove()

        self.done.focus_set()

        self.accept = Button(self.bbox,
                             text='Accept Original Input',
                             command=self.on_ok,
                             width=36)
        self.accept.grid(column=0, row=0, padx=24, pady=12)
        self.accept.grid_remove()

        self.edit = Button(self.bbox,
                           text='Submit Edited Input',
                           command=self.on_alt,
                           width=36)
        self.edit.grid(column=0, row=1, padx=24, pady=12)
        self.edit.grid_remove()

        self.cancel_all = Button(self.bbox,
                                 text="Cancel (Don't Submit Anything)",
                                 command=self.on_cancel,
                                 width=36)
        self.cancel_all.grid(column=0, row=2, padx=24, pady=(12, 36))
        self.cancel_all.grid_remove()

        self.bind('<Escape>', self.on_cancel)

        PlaySound('SystemHand', SND_ASYNC)

        self.protocol("WM_DELETE_WINDOW", self.on_cancel)

    def on_ok(self, event=None):
        print('original input is OK; input is:', self.input)

    def on_alt(self, event=None):
        self.edit_input = True
        self.destroy()

    def on_cancel(self, event=None):
        self.add_data_to_db = False
        self.destroy()
Beispiel #23
0
class CustomProgressDialog(SimpleDialog):
    label = None
    progressbar = None
    button_box = None
    cancel_btn = None
    result = None
    callback = None
    args = None
    msg = ''

    def __init__(self, parent, title, size=(500, 100), style=VERTICAL,
                 resizable=False, action_button=const.BUTTON_CANCEL,
                 add_line=False, margin=None,
                 button_box_padding=0):
        self.label = title
        self.action_button = action_button
        self.button_box_padding = button_box_padding
        SimpleDialog.__init__(self, parent, title, size, style, resizable,
                              self.on_load, add_line, margin)

    def build(self):
        self.panel.pack((5, 5))
        self.label = Label(self.panel, self.label)
        self.panel.pack(self.label, fill=True)
        self.progressbar = ProgressBar(self.panel)
        self.panel.pack(self.progressbar, fill=True, padding=15)

    def set_dialog_buttons(self):
        self.button_box = HPanel(self.box)
        self.box.pack(self.button_box, fill=True,
                      padding_all=self.button_box_padding)
        self.button_box.pack(HPanel(self.button_box), fill=True, expand=True)
        self.cancel_btn = Button(self.button_box, '', onclick=self.on_cancel,
                                 default=True, pid=const.BUTTON_CANCEL)
        self.cancel_btn.set_enable(False)
        self.button_box.pack(self.cancel_btn)
        self.fit()

    def on_cancel(self):
        self.end_modal(const.BUTTON_CANCEL)

    def show(self):
        self.show_modal()
        return self.result

    def update_data(self, value, msg):
        self.label.set_text(msg)
        self.label.Update()
        self.progressbar.set_value(value)
        self.progressbar.Update()
        self.Update()
        wx.Yield()

    def on_load(self, *args):
        self._timer.Stop()
        self.progressbar.set_value(5)
        try:
            if self.callback and self.args:
                self.result = self.callback(*self.args)
        except Exception as e:
            LOG.exception('Error in progress dialog running: %s', e)
        finally:
            self.progressbar.set_value(98)
            self.end_modal(const.BUTTON_CANCEL)

    def run(self, callback, args):
        self.callback, self.args = callback, args
        return self.show()
Beispiel #24
0
    def create_widgets(self):
        #Label((275,50,180,50), font=self.fonts[2], text=f"SCORE: {self.score}", bgcolor=BGCOLOR, fgcolor=BLACK).draw(self.screen)

        fonts = [
            pygame.font.SysFont('Arial', size, True) for size in (70, 40, 25)
        ]
        self.lose_label = Label(center=True,
                                size=(200, 100),
                                font=fonts[1],
                                text='You Lose',
                                fgcolor=BLACK)

        # Restart UI
        self.restartUI = Frame(pos=(45, 145),
                               size=(405, 405),
                               bgcolor=BLACK,
                               transparency=100)
        restart_lbl = Frame(parent=self.restartUI,
                            pos=(100, 100),
                            size=(205, 105),
                            bgcolor=(100, 100, 190))
        Label(parent=restart_lbl, center=True, font=fonts[1], text='Restart?')

        cancel_restart = Frame(parent=self.restartUI,
                               pos=(220, 215),
                               size=(75, 35),
                               bgcolor=(192, 100, 100))
        Button(parent=cancel_restart,
               center=True,
               font=fonts[1],
               text='No',
               command=lambda _: self.set_restart(False))

        do_restart = Frame(parent=self.restartUI,
                           pos=(115, 215),
                           size=(75, 35),
                           bgcolor=(192, 100, 100))
        Button(parent=do_restart,
               center=True,
               font=fonts[1],
               text='Yes',
               command=self.restart)

        # Main UI
        self.mainUI = Frame(pos=(0, 0),
                            size=(SCREENX, SCREENY),
                            bgcolor=BGCOLOR)

        undo_btn_image = Frame(parent=self.mainUI,
                               pos=(390, 95),
                               size=(50, 50),
                               image=pygame.image.load('undo.png'))
        Button(parent=undo_btn_image, command=self.undo)

        restart_btn_image = Frame(parent=self.mainUI,
                                  pos=(330, 95),
                                  size=(50, 50),
                                  image=pygame.image.load('restart.png'))
        Button(parent=restart_btn_image,
               command=lambda _: self.set_restart(True))

        title_frame = Frame(parent=self.mainUI, pos=(25, 50), size=(200, 80))
        Label(parent=title_frame, center=True, font=fonts[0], text="2048")

        score_frame = Frame(parent=self.mainUI, pos=(275, 50), size=(180, 50))
        self.score_label = Label(parent=score_frame,
                                 center=True,
                                 font=fonts[2],
                                 text='score')
Beispiel #25
0
        height=450, 
        values=caseless_colors,
        scrollbar_size=16)

    Combobox.combobox_selected = combobox_selected

    flat2 = ButtonFlatHilited(canvas_0.content, text='Apply Combo 2')
    flat2.config(command=lambda button=flat2: colorize(button))

    b.grid(column=0, row=0, padx=6, pady=6)
    flat.grid(column=1, row=0, padx=6, pady=6)
    bb.grid(column=2, row=0, padx=6, pady=6)
    flat2.grid(column=3, row=0, padx=6, pady=6)
        
    frm = FrameStay(canvas_0.content)
    for i in range(10):
        lab = Label(frm, text=i)
        lab.grid(column=0, row=i+1, sticky='ew')

    msg = 'No valid\ncolor\nhas been\nchosen'
    cbox_select = Label(canvas_0.content, text=msg)

    frm.grid(column=0, row=1, sticky='news', columnspan=3)
    cbox_select.grid(column=3, row=1, sticky='news')

    CanvasScrolled.config_scrolled_canvases(main_app=root)

    root.mainloop()


Beispiel #26
0
        conn.execute('PRAGMA foreign_keys = 1')
        cur = conn.cursor()
        cur.execute(update_format_fonts, tuple(self.font_scheme))
        conn.commit()
        cur.close()
        conn.close()

        config_generic(self.root)

        resize_scrollbar()

    def show_font_size(self, evt):
        self.fontSize = self.fontSizeVar.get()


if __name__ == "__main__":

    root = tk.Tk()

    t = FontPicker(root, root)
    t.grid()

    q = Label(
        root,
        text="This text represents everything outside of the "
        "font picker.\n It doesn't change until you click the APPLY button.")
    q.grid(padx=24, pady=48)

    config_generic(root)

    root.mainloop()
Beispiel #27
0
    def make_widgets(self):

        if self.parent.winfo_class() == 'Toplevel':
            gallery_canvas = Canvas(
                self.parent,
                bd=0,
                highlightthickness=0)

            self.gallery_content = Frame(gallery_canvas)
            gallery_canvas.grid(row=0, column=0, sticky='nsew')

            self.parent.grid_columnconfigure(0, weight=1)
            self.parent.grid_rowconfigure(0, weight=1)
        else:
            self.gallery_content = Frame(self.parent)
            self.gallery_content.grid(column=0, row=0)

        self.thumb_canvas = Canvas(
            self.gallery_content, 
            bd=0, 
            highlightthickness=0,
            bg=formats['bg'])
        self.thumb_canvas.pack(padx=12, pady=12)

        self.thumbstrip = Frame(self.thumb_canvas)
        self.thumbstrip.pack(side='top')

        self.previous_img = Button(self.gallery_content, text='<<', width=6)

        self.pic_canvas = Canvas(
            self.gallery_content, 
            highlightbackground=formats['bg'])
        self.pic_canvas.bind('<Button-1>', self.focus_clicked)
        self.pic_canvas.bind('<Button-1>', self.scroll_start, add='+')
        self.pic_canvas.bind('<B1-Motion>', self.scroll_move)     

        self.img_path = '{}treebard_gps\data\{}\images\{}'.format(
            root_drive, self.image_dir, self.main_pic)
        img_big = Image.open(self.img_path)
        self.tk_img = ImageTk.PhotoImage(img_big)
        self.pic_canvas.image = self.tk_img

        z = 0
        self.current_pictures = sorted(self.current_pictures)

        for img in self.current_pictures:
            pic_col = Frame(self.thumbstrip)
            pic_col.pack(side='left', expand=1, fill='y')

            pic_file = img
            self.img_path = '{}treebard_gps\data\{}\images\{}'.format(root_drive, self.image_dir, pic_file)
            idx = len(pic_file)
            bare = pic_file[0:idx-4]
            thumbsy = Image.open(self.img_path)
            self.width_strings.append(thumbsy.width)
            self.height_strings.append(thumbsy.height)
            thumbsy.thumbnail((185,85))
            thumb_path = 'images/{}_tmb.png'.format(bare)
            # overwrites file by same name if it exists 
            thumbsy.save(thumb_path)
            small = ImageTk.PhotoImage(file=thumb_path, master=self.thumbstrip)

            thumb = Label(
                pic_col,
                image=small)
            thumb.pack(expand=1, fill='y')
            thumb.image = small

            self.thumb_labels.append(thumb)

            # lambda used to save value in loop
            if self.parent.winfo_class() == 'Toplevel':
                rad = Radiobutton(
                    pic_col,
                    takefocus=0,
                    value=pic_file,
                    command=lambda pic_file=pic_file: self.set_main_pic(
                        pic_file))   
                rad.pack()

                if rad['value'] == self.main_pic:
                    rad.select()

            else:                
                rad = Frame(
                    pic_col,
                    height=24,
                    width=24)   
                rad.pack(expand=1, fill='both')
                if self.parent.winfo_name() == 'source_tab':
                    pic_file = '{}, {}'.format(self.source, pic_file)
            
            create_tooltip(rad, pic_file)

            z += 1

        self.pil_img = img_big
        self.fit_canvas_to_pic()

        self.thumb_dict = dict(zip(self.thumb_labels, self.current_pictures))
        self.next_img = Button(self.gallery_content, text='>>', width=6)

        panel = Frame(self.gallery_content)

        subject = LabelH3(panel, text=self.curr_entity)
        subject.grid(column=0, row=0, sticky='ew')

        # labels with selectable multiline text
        self.caption_lab = MessageCopiable(panel, width=36)
        self.picfile_lab = MessageCopiable(panel, width=36)
        self.picsize_lab = MessageCopiable(panel, width=36)
        edit = Button(
            panel, 
            text='EDIT', 
            width=8, 
            command=lambda graphics=self.t7: self.go_to_graphics(graphics))

        self.previous_img.config(command=self.back)
        self.next_img.config(command=self.forward)

        panel.grid_rowconfigure(0, weight=2)
        panel.grid_rowconfigure(1, weight=1)
        panel.grid_rowconfigure(4, weight=2)

        self.caption_lab.grid(column=0, row=1, pady=(12,12), sticky='ew')
        self.caption_lab.insert(1.0, self.caption_text)

        self.picfile_lab.grid(column=0, row=2, pady=(12,0), sticky='ew')
        self.picfile_lab.insert(1.0, self.img_path)

        self.picsize_lab.grid(column=0, row=3, pady=(0,24), sticky='ew')
        self.picsize_lab.insert(
            1.0, 
            'width: {}, height: {}'.format(
                self.pil_img.width, self.pil_img.height))

        edit.grid(column=0, row=4)

        self.caption_lab.set_height()
        self.picfile_lab.set_height()
        self.picsize_lab.set_height()

        self.previous_img.pack(side='left', padx=12)
        self.pic_canvas.pack(side='left', expand=1, fill='y')
        self.next_img.pack(side='left', padx=12)

        panel.pack(side='left', expand=1, fill='y')

        for thumb in self.thumb_labels:
            thumb.bind('<Button-1>', self.show_clicked)

        self.pic_canvas.bind('<Key-Left>', lambda evt: self.back())

        self.pic_canvas.bind('<Key-Right>', lambda evt: self.forward())

        # add statusbar-tooltips

        self.visited = (
            (self.thumbstrip, 
                "Thumbnail Views", 
                "Click thumbnail to display. Hover below to see "
                   "file name. If radio, click to make main image."),
            (self.pic_canvas, 
                "Image", 
                "Arrow keys change image when it's in focus."),
            (self.previous_img, 
                "Left Button", 
                "Click with mouse or when highlighted click with spacebar."),
            (self.next_img, 
                "Right Button", 
                "Click with mouse or when highlighted click with spacebar.")) 

        if self.parent.winfo_class() == 'Toplevel':
     
            box = Frame(self.parent)
            box.grid(column=0, row=1, pady=12)

            close = Button(
                box, 
                text='CLOSE', 
                width=8, 
                command=self.cancel_gallery)  
            close.grid()
            self.parent.protocol('WM_DELETE_WINDOW', self.cancel_gallery)

        self.thumb_canvas.create_window(0, 0, anchor='nw', window=self.thumbstrip)
        self.thumb_canvas.config(
            scrollregion=(
                0, 0, 
                self.thumbstrip.winfo_reqwidth(), 
                self.thumbstrip.winfo_reqheight()))
        
        self.thumb_canvas.config(
            width=self.root.maxsize()[0], 
            height=self.thumbstrip.winfo_reqheight())
        
        scroll_width = int(self.thumb_canvas['scrollregion'].split(' ')[2])

        if scroll_width >= int(self.thumb_canvas['width']):
            for child in self.thumbstrip.winfo_children():
                for gchild in child.winfo_children():
                    gchild.bind("<Enter>", self.thumb_start)
                    gchild.bind("<Motion>", self.thumb_move)

        if self.parent.winfo_class() == 'Toplevel':

            gallery_canvas.create_window(
                0, 0, anchor=tk.NW, window=self.gallery_content)
            self.resize_scrollbar()
            self.resize_window()

        self.config_labels()
Beispiel #28
0
class FontPicker(Frame):
    def __init__(self, master, main, *args, **kwargs):
        Frame.__init__(self, master, *args, **kwargs)
        self.master = master
        self.root = main.root
        self.canvas = main.canvas
        self.content = main
        self.canvas_docs = main.canvas_docs
        self.content_docs = main.content_docs
        self.all_fonts = font.families()

        conn = sqlite3.connect(current_file)
        cur = conn.cursor()
        cur.execute(select_font_scheme)
        font_scheme = cur.fetchall()
        cur.close()
        conn.close()
        self.font_scheme = list(font_scheme[0])
        self.make_widgets()

    def make_widgets(self):
        def combobox_selected(combo):
            '''
                The reason this function is nested is that I have no experience 
                with overriding methods. When I tried to add `self` as the first 
                parameter, there was an error and I didn't know what to do. I 
                nested it so I wouldn't have to use `self`.
            '''
            if combo == self.combos["select_input_font"]:
                input_sample.config(font=(self.all_fonts[combo.current],
                                          self.fontSize))
            elif combo == self.combos["select_output_font"]:
                output_sample.config(font=(self.all_fonts[combo.current],
                                           self.fontSize))
            else:
                print("case not handled")
            # update_idletasks() seems to speed up the redrawing of the
            #   app with the new font
            self.update_idletasks()

        sample_text = ["Sample", "Text ABCDEFGHxyz 0123456789 iIl1 o0O"]

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

        sample = Frame(self)

        self.output_sample = Label(sample, text=" Output ".join(sample_text))

        self.input_sample = Entry(sample, width=50)
        self.input_sample.insert(0, " Input ".join(sample_text))

        self.fontSizeVar = tk.IntVar()
        self.fontSize = self.font_scheme[0]

        self.font_size = Scale(
            self,
            from_=8.0,
            to=26.0,
            tickinterval=6.0,
            label="Text Size",  # Can this be centered over the Scale?
            orient="horizontal",
            length=200,
            variable=self.fontSizeVar,
            command=self.show_font_size)
        self.font_size.set(self.fontSize)

        combo_names = ["select_output_font", "select_input_font"]
        self.combos = {}

        j = 2
        for name in combo_names:
            cbo = Combobox(self,
                           self.root,
                           values=self.all_fonts,
                           height=300,
                           scrollbar_size=12)
            self.combos[name] = cbo
            name = name.replace("_", " ").title()
            lab = Label(self, text=name)
            lab.grid(column=0, row=j, pady=(24, 6))
            cbo.grid(column=0, row=j + 1, pady=(6, 20))
            j += 2

        self.apply_button = Button(self, text="APPLY", command=self.apply)

        sample.grid(column=0, row=0)
        self.output_sample.grid(padx=24, pady=20)
        self.input_sample.grid(padx=24, pady=20)
        self.font_size.grid(column=0, row=1, pady=24)
        self.apply_button.grid(column=0,
                               row=7,
                               sticky="e",
                               padx=(0, 24),
                               pady=(0, 24))

        Combobox.combobox_selected = combobox_selected

    def apply(self):
        def resize_scrollbar():
            self.root.update_idletasks()
            self.canvas_docs.config(scrollregion=self.canvas_docs.bbox('all'))

        self.font_scheme[0] = self.fontSizeVar.get()
        if len(self.combos["select_output_font"].get()) != 0:
            self.font_scheme[1] = self.combos["select_output_font"].get()
        if len(self.combos["select_input_font"].get()) != 0:
            self.font_scheme[2] = self.combos["select_input_font"].get()
        conn = sqlite3.connect(current_file)
        conn.execute('PRAGMA foreign_keys = 1')
        cur = conn.cursor()
        cur.execute(update_format_fonts, tuple(self.font_scheme))
        conn.commit()
        cur.close()
        conn.close()

        config_generic(self.root)

        resize_scrollbar()

    def show_font_size(self, evt):
        self.fontSize = self.fontSizeVar.get()
Beispiel #29
0
 def build(self):
     self.panel.pack((5, 5))
     self.label = Label(self.panel, self.label)
     self.panel.pack(self.label, fill=True)
     self.progressbar = ProgressBar(self.panel)
     self.panel.pack(self.progressbar, fill=True, padding=15)
Beispiel #30
0
    def make_widgets(self):
        def combobox_selected(combo):
            '''
                The reason this function is nested is that I have no experience 
                with overriding methods. When I tried to add `self` as the first 
                parameter, there was an error and I didn't know what to do. I 
                nested it so I wouldn't have to use `self`.
            '''
            if combo == self.combos["select_input_font"]:
                input_sample.config(font=(self.all_fonts[combo.current],
                                          self.fontSize))
            elif combo == self.combos["select_output_font"]:
                output_sample.config(font=(self.all_fonts[combo.current],
                                           self.fontSize))
            else:
                print("case not handled")
            # update_idletasks() seems to speed up the redrawing of the
            #   app with the new font
            self.update_idletasks()

        sample_text = ["Sample", "Text ABCDEFGHxyz 0123456789 iIl1 o0O"]

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

        sample = Frame(self)

        self.output_sample = Label(sample, text=" Output ".join(sample_text))

        self.input_sample = Entry(sample, width=50)
        self.input_sample.insert(0, " Input ".join(sample_text))

        self.fontSizeVar = tk.IntVar()
        self.fontSize = self.font_scheme[0]

        self.font_size = Scale(
            self,
            from_=8.0,
            to=26.0,
            tickinterval=6.0,
            label="Text Size",  # Can this be centered over the Scale?
            orient="horizontal",
            length=200,
            variable=self.fontSizeVar,
            command=self.show_font_size)
        self.font_size.set(self.fontSize)

        combo_names = ["select_output_font", "select_input_font"]
        self.combos = {}

        j = 2
        for name in combo_names:
            cbo = Combobox(self,
                           self.root,
                           values=self.all_fonts,
                           height=300,
                           scrollbar_size=12)
            self.combos[name] = cbo
            name = name.replace("_", " ").title()
            lab = Label(self, text=name)
            lab.grid(column=0, row=j, pady=(24, 6))
            cbo.grid(column=0, row=j + 1, pady=(6, 20))
            j += 2

        self.apply_button = Button(self, text="APPLY", command=self.apply)

        sample.grid(column=0, row=0)
        self.output_sample.grid(padx=24, pady=20)
        self.input_sample.grid(padx=24, pady=20)
        self.font_size.grid(column=0, row=1, pady=24)
        self.apply_button.grid(column=0,
                               row=7,
                               sticky="e",
                               padx=(0, 24),
                               pady=(0, 24))

        Combobox.combobox_selected = combobox_selected