예제 #1
0
파일: nodestable.py 프로젝트: fargelus/SAPR
    def __init__(self, parent=None):
        Frame.__init__(self, parent)
        self.pack()

        self.columns = ('№', 'F', 'Заделка')
        self.tbl = Table(self, title='Узлы', columns=('№', 'F', 'Заделка'))
        self.tbl.table_tree['show'] = 'headings'

        self.entr = Entrysnodes(self)
        self.btns = Tablebuttons(self)

        self.btns.plus_btn.bind('<Button-1>', self.add_new_node)
        self.btns.minus_btn.bind('<Button-1>', self.delete_node)
        self.btns.save_btn.bind('<Button-1>', self.save_all)
        self.entr.ready_btn.bind('<Button-1>', self.fetch_res)

        self.place_widgets()

        if Nodestable.dict_items:
            self.setter_nodes()
예제 #2
0
파일: nodestable.py 프로젝트: fargelus/SAPR
class Nodestable(Frame):
    count = 0
    dict_items = dict()

    @staticmethod
    def get_data_about_nodes():
        return Nodestable.dict_items

    @staticmethod
    def set_dict(data):
        if Nodestable.dict_items:
            Nodestable.dict_items.clear()

        for item in data:
            key = item[0]
            val = item[1:]
            Nodestable.dict_items[key] = val

    def __init__(self, parent=None):
        Frame.__init__(self, parent)
        self.pack()

        self.columns = ('№', 'F', 'Заделка')
        self.tbl = Table(self, title='Узлы', columns=('№', 'F', 'Заделка'))
        self.tbl.table_tree['show'] = 'headings'

        self.entr = Entrysnodes(self)
        self.btns = Tablebuttons(self)

        self.btns.plus_btn.bind('<Button-1>', self.add_new_node)
        self.btns.minus_btn.bind('<Button-1>', self.delete_node)
        self.btns.save_btn.bind('<Button-1>', self.save_all)
        self.entr.ready_btn.bind('<Button-1>', self.fetch_res)

        self.place_widgets()

        if Nodestable.dict_items:
            self.setter_nodes()

    def fetch_res(self, event):
        if self.entr.numb_entry.get():
            try:
                number_node = int(self.entr.numb_entry.get())
                if number_node <= 0:
                    showwarning('Предупреждение', 'Номер узла должен быть > 0', parent=self)
                    self.entr.numb_entry.delete(0, END)
            except ValueError:
                showerror('Ошибка', 'Значение должно быть целочисленным', parent=self)
                self.entr.numb_entry.delete(0, END)
                return
        else:
            showerror('Ошибка', 'Не введен № узла', parent=self)
            if self.entr.force_entrys.get():
                self.entr.force_entrys.delete(0, END)
            return

        if self.entr.force_entrys.get():
            try:
                force = int(self.entr.force_entrys.get())
            except ValueError:
                showerror('Ошибка', 'Значение должно быть целочисленным', parent=self)
                self.entr.force_entrys.delete(0, END)
                return
        else:
            force = 0

        check_block = self.entr.var.get()

        if number_node in Nodestable.dict_items.keys():
            Nodestable.dict_items[number_node] = (force, check_block)
            if number_node <= Nodestable.count:
                self.clear_table()
                self.fill_table()
            else:
                self.tbl.table_tree.delete(number_node)
                self.tbl.table_tree.insert('', number_node, iid=int(number_node),
                                           values=(number_node, force, check_block))

        else:
            if number_node > Nodestable.count:
                for i in range(Nodestable.count + 1, number_node):
                    Nodestable.dict_items[i] = (0, 0)
                    self.tbl.table_tree.insert('', i, values=(i, 0, 0))

            Nodestable.dict_items[number_node] = (force, check_block)
            self.tbl.table_tree.insert('', number_node, values=(number_node, force, check_block))

        Nodestable.count = len(Nodestable.dict_items)
        self.set_vals_on_center()

    def place_widgets(self):
        self.tbl.pack()
        self.btns.pack(anchor=SE)
        self.entr.pack(anchor=W, pady=4)

    def add_new_node(self, event):
        Nodestable.count += 1

        self.tbl.table_tree.insert('', 'end', iid=Nodestable.count, values=(Nodestable.count, 0, 0))

        self.set_vals_on_center()

        Nodestable.dict_items[Nodestable.count] = (0, 0)

    def clear_table(self):
        self.tbl.table_tree.delete(*self.tbl.table_tree.get_children())

    def fill_table(self):
        for key in sorted(Nodestable.dict_items):
            val1, val2 = Nodestable.dict_items[key]
            self.tbl.table_tree.insert('', 'end', iid=key, values=(key, val1, val2))

    def delete_node(self, event):
        if Nodestable.count == 0:
            showerror('Ошибка удаления', 'В таблице не осталось заполненных полей')
            return

        number_to_del = askinteger('', 'Введите № узла:', parent=self)
        if number_to_del not in Nodestable.dict_items:
            showwarning('Предупреждение', 'Вы пытаетесь удалить узел, которого '
                                          'не существует', parent=self)
            return

        self.clear_table()

        Nodestable.dict_items.pop(number_to_del)
        Nodestable.count -= 1
        for item in Nodestable.dict_items:
            if item > number_to_del:
                Nodestable.dict_items[item - 1] = (Nodestable.dict_items[item][0],
                                                   Nodestable.dict_items[item][1])
                Nodestable.dict_items.pop(item)

        self.fill_table()

    def set_vals_on_center(self):
        for col in self.columns:
            self.tbl.table_tree.column(col, anchor=CENTER)

    def setter_nodes(self):
        Nodestable.count = len(Nodestable.dict_items)
        self.clear_table()

        self.fill_table()

        self.set_vals_on_center()

    def save_all(self, event):
        if rodstable.Rodstable.dict_items:
            if len(Nodestable.dict_items) - len(rodstable.Rodstable.dict_items) != 1:
                showerror('Ошибка', 'Кол-во узлов должно быть на единицу больше кол-ва стержней', parent=self)
                self.tbl.table_tree.delete(Nodestable.count)
                Nodestable.dict_items.pop(Nodestable.count)
                Nodestable.count -= 1
            else:
                save_nodes(Nodestable.dict_items)
        else:
            save_nodes(Nodestable.dict_items)