Подсчет строк и запись данных

Автор Vashnaemnik, 09.10.24, 13:29:11

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Vashnaemnik

Всем добрый день.
Наконец я закончил свою таблицу.
Сделал свою базу для построения всяких фланцев, заглушек.
Сделал их построение. Теперь пытаюсь все это слепить в одну программу.
Но столкнулся, что после ввода данных пользователя, я не знаю сколько раз повторить построение, так как не знаю количества строк.
Подскажите, как, при нажатии кнопки "Завершить", в окне пользователя, программно определить количество строк в таблице и все данные построчно.
from tkinter import *
from tkinter import ttk
from tkinter.ttk import Combobox
import tkinter.filedialog as fd # работа с файлами

class MessageItem_2(Frame):
   
    def __init__(self, master, message, **kwds):
        Frame.__init__(self, master, **kwds)
        self.grid_rowconfigure(0, weight=1)
        self.grid_columnconfigure(0, weight=1)
        self.text = Label(self, text=message, anchor='w', bg='gold')
        self.text.grid(row=1, column=0, sticky='nsew')

        txt_0 = Entry(self, width=9, font=("Times New Roman", 10), justify = CENTER)
        txt_0.place(x=2, y=1)

        txt_1 = Entry(self, width=45, font=("Times New Roman", 10), justify = LEFT)
        txt_1.place(x=69, y=1)

        txt_2 = Entry(self, width=11, font=("Times New Roman", 10), justify = CENTER)
        txt_2.place(x=350, y=1)

        txt_3 = Entry(self, width=12, font=("Times New Roman", 10), justify = CENTER)
        txt_3.place(x=428, y=1)

        txt_4 = Entry(self, width=13, font=("Times New Roman", 10), justify = CENTER)
        txt_4.place(x=510, y=1)

        txt_5 = Entry(self, width=12, font=("Times New Roman", 10), justify = CENTER)
        txt_5.place(x=600, y=1)

        tip={"ГОСТ 33259-2015": ["", "A", "B", "C", "D", "E", "F", "J", "K", "L", "M"],
             "ГОСТ 28759.3-90": ["", 1, 2, 3, 4],
             "ГОСТ 28759.4-90": ["", 1]}
       
        def on_select(event):
            combo_2["values"] = tip[combo_1.get()]
            combo_2.current(0)

        combo_1 = Combobox(self, value = [k for k in tip], state="readonly", font=("Times New Roman", 8), justify=CENTER, width=16)
        combo_1.place(x=685, y=1)
        combo_2 = Combobox(self, state="readonly", font=("Times New Roman", 8), justify=CENTER, width=10)
        combo_2.place(x=810, y=1)
        combo_1.bind("<<ComboboxSelected>>",on_select)

        combo_3 = Combobox(self, state="readonly", font=("Times New Roman", 8), justify=CENTER, width=13)
        combo_3['values'] = ("", "Фланец", "Заглушка")
        combo_3.current(0)  # установите вариант по умолчанию
        combo_3.place(x=900, y=1)

        tip_2={"A": ["", "ПОН-А", "ПОН-Б", "ПОН-В", "ПМБ", "ПМБ-1", "ПА", "ПК", "ПЭ", "СНП", "ПУТГ"],
               "B": ["", "ПОН-А", "ПОН-Б", "ПОН-В", "ПМБ", "ПМБ-1", "ПА", "ПК", "ПЭ", "СНП", "ПУТГ"],
               "C": ["", "ПОН-А", "ПОН-Б", "ПОН-В", "ПМБ", "ПМБ-1", "ПА", "ПК", "ПЭ", "СНП", "ПУТГ"],
               "D": ["", "ПОН-А", "ПОН-Б", "ПОН-В", "ПМБ", "ПМБ-1", "ПА", "ПК", "ПЭ", "СНП", "ПУТГ"],
               "E": ["", "ПОН-А", "ПОН-Б", "ПОН-В", "ПМБ", "ПМБ-1", "ПА", "ПК", "ПЭ", "СНП", "ПУТГ"],
               "F": ["", "ПОН-А", "ПОН-Б", "ПОН-В", "ПМБ", "ПМБ-1", "ПА", "ПК", "ПЭ", "СНП", "ПУТГ"],
               "K": ["", "ПОН-А", "ПОН-Б", "ПОН-В", "ПМБ", "ПМБ-1", "ПА", "ПК", "ПЭ", "СНП", "ПУТГ"],
               "L": ["", "ПОН-А", "ПОН-Б", "ПОН-В", "ПМБ", "ПМБ-1", "ПА", "ПК", "ПЭ", "СНП", "ПУТГ"],
               "M": ["", "ПОН-А", "ПОН-Б", "ПОН-В", "ПМБ", "ПМБ-1", "ПА", "ПК", "ПЭ", "СНП", "ПУТГ"],
               "1": ["", "ПОН-А", "ПОН-Б", "ПОН-В", "ПМБ", "ПМБ-1", "ПА", "ПК", "ПЭ", "СНП", "ПУТГ"],
               "2": ["", "ПОН-А", "ПОН-Б", "ПОН-В", "ПМБ", "ПМБ-1", "ПА", "ПК", "ПЭ", "СНП", "ПУТГ"],
               "3": ["", "ПОН-А", "ПОН-Б", "ПОН-В", "ПМБ", "ПМБ-1", "ПА", "ПК", "ПЭ", "СНП", "ПУТГ"],
               "4": ["", "ПОН-А", "ПОН-Б", "ПОН-В", "ПМБ", "ПМБ-1", "ПА", "ПК", "ПЭ", "СНП", "ПУТГ"],
               "J": ["", "Кольцо"]}
       
        tip_3={"ГОСТ 28759.4-90": ["", "Кольцо"]}

        def on_select_2(event):
            combo_4["values"] = tip_2[combo_2.get()]
            combo_4["values"] = tip_3[combo_1.get()]
            combo_4.current(0)

        combo_4 = Combobox(self, state="readonly", font=("Times New Roman", 8), justify=CENTER, width=13)
        combo_4.place(x=1008, y=1)
        combo_2.bind("<<ComboboxSelected>>",on_select_2)

        txt_6 = Entry(self, width=18, font=("Times New Roman", 10), justify = CENTER)
        txt_6.place(x=1116, y=1)

        txt_7 = Entry(self, width=18, font=("Times New Roman", 10), justify = CENTER)
        txt_7.place(x=1234, y=1)

        txt_8 = Entry(self, width=14, font=("Times New Roman", 10), justify = CENTER)
        txt_8.place(x=1350, y=1)

        txt_9 = Entry(self, width=15, font=("Times New Roman", 10), justify = CENTER)
        txt_9.place(x=1443, y=1)

        txt_10 = Entry(self, width=13, font=("Times New Roman", 10), justify = CENTER)
        txt_10.place(x=1543, y=1)

class scrollableContainer(Frame):

    def __init__(self, master, **kwargs):
        Frame.__init__(self, master, **kwargs) #holds canvas & scrollbars
        self.grid_rowconfigure(0, weight=1)
        self.grid_columnconfigure(0, weight=1)

        self.canv = Canvas(self, bd=0, highlightthickness=0, bg='green')
        self.vScroll = Scrollbar(self, orient='vertical',
                                 command=self.canv.yview)
        self.vScroll.grid(row=1, column=1, sticky='ns')
        self.canv.grid(row=1, column=0, sticky='nsew')       
        self.canv.configure(yscrollcommand=self.vScroll.set)

        self.frm = Frame(self.canv, bd=2, bg='green') #holds messages
        self.frm.grid_columnconfigure(0, weight=1)

        self.canv.create_window(0, 0, window=self.frm, anchor='nw', tags='inner')

        self.messages = []
        for i in range(1):
            m = MessageItem_2(self.frm, '', bd=2, bg='black')
            print(m)
            m.grid(row=i, column=0, sticky='nsew', padx=2, pady=2)
            self.messages.append(m)

        self.update_layout()       
        self.canv.bind('<Configure>', self.on_configure)

    def update_layout(self):
        self.frm.update_idletasks()
        self.canv.configure(scrollregion=self.canv.bbox('all'))
        self.canv.yview('moveto','1.0')
        self.size = self.frm.grid_size()

    def on_configure(self, event):
        w,h = event.width, event.height
        natural = self.frm.winfo_reqwidth()
        self.canv.itemconfigure('inner', width= w if w>natural else natural)
        self.canv.configure(scrollregion=self.canv.bbox('all'))

    def add_message(self, message):
        m = MessageItem_2(self.frm, message, bd=2, bg='black')
        m.grid(row=self.size[1], column=0, padx=2, pady=2, sticky='we')
        self.messages.append(m)
        self.update_layout()

# назначение пути для проекта
def clicked_1():
    directory = fd.askdirectory(title="Открыть папку", initialdir="/")

def new_message():
    test = ''
    sc.add_message(test)

def clicked_2():
    window.quit()

window = Tk()
window.resizable(False, False)
window.title("Таблица штуцеров")
window.geometry("1661x388")

frame_1 = Frame(window, bg='black')
frame_1.grid(row=0, column=0, sticky='nsew')

# надписи
lbl_0 = Label(frame_1, text="Обозна- \n чение", font=("Times New Roman", 13), height=4, width=7, justify=CENTER, background='gold')
lbl_0.grid(row=0, column=0, sticky=W, padx=2, pady=2)

lbl_1 = Label(frame_1, text="Наименование", font=("Times New Roman", 13), height=4, width=30, justify=CENTER, background='gold')
lbl_1.grid(row=0, column=1, sticky=W, padx=2, pady=2)

lbl_2 = Label(frame_1, text="Диаметр, \n мм", font=("Times New Roman", 13), height=4, justify=CENTER, background='gold')
lbl_2.grid(row=0, column=2, sticky=W, padx=2, pady=2)

lbl_3 = Label(frame_1, text="Давление, \n МПа", font=("Times New Roman", 13), height=4, justify=CENTER, background='gold')
lbl_3.grid(row=0, column=3, sticky=W, padx=2, pady=2)

lbl_4 = Label(frame_1, text="Диаметр \n патрубка \n наружний, \n мм", font=("Times New Roman", 13), height=4, justify=CENTER, background='gold')
lbl_4.grid(row=0, column=4, sticky=W, padx=2, pady=2)

lbl_5 = Label(frame_1, text="Стенка \n патрубка, \n мм", font=("Times New Roman", 13), height=4, justify=CENTER, background='gold')
lbl_5.grid(row=0, column=5, sticky=W, padx=2, pady=2)

lbl_6 = Label(frame_1, text="ГОСТ фланца", font=("Times New Roman", 13), height=4, width=13, justify=CENTER, background='gold')
lbl_6.grid(row=0, column=6, sticky=W, padx=2, pady=2)

lbl_7 = Label(frame_1, text="Фланец \n приварной", font=("Times New Roman", 13), height=4, justify=CENTER, background='gold')
lbl_7.grid(row=0, column=7, sticky=W, padx=2, pady=2)

lbl_8 = Label(frame_1, text="Элемент \n ответный", font=("Times New Roman", 13), height=4, width=11, justify=CENTER, background='gold')
lbl_8.grid(row=0, column=8, sticky=W, padx=2, pady=2)

lbl_9 = Label(frame_1, text="Прокладка", font=("Times New Roman", 13), height=4, width=11, justify=CENTER, background='gold')
lbl_9.grid(row=0, column=9, sticky=W, padx=2, pady=2)

lbl_10 = Label(frame_1, text="Ширина \n укрепляющего \n кольца, \n мм", font=("Times New Roman", 13), height=4, width=12, justify=CENTER, background='gold')
lbl_10.grid(row=0, column=10, sticky=W, padx=2, pady=2)

lbl_11 = Label(frame_1, text="Толщина \n укрепляющего \n кольца, \n мм", font=("Times New Roman", 13), height=4, width=12, justify=CENTER, background='gold')
lbl_11.grid(row=0, column=11, sticky=W, padx=2, pady=2)

lbl_12 = Label(frame_1, text="Высотная \n отметка, \n мм", font=("Times New Roman", 13), height=4, width=9, justify=CENTER, background='gold')
lbl_12.grid(row=0, column=12, sticky=W, padx=2, pady=2)

lbl_13 = Label(frame_1, text="Ориентация, \n градус ", font=("Times New Roman", 13), height=4, justify=CENTER, background='gold')
lbl_13.grid(row=0, column=13, sticky=W, padx=2, pady=2)

lbl_14 = Label(frame_1, text="Вылет, \n мм ", font=("Times New Roman", 13), height=4, width=11, justify=CENTER, background='gold')
lbl_14.grid(row=0, column=14, sticky=W, padx=2, pady=2)

window.grid_rowconfigure(0, weight=1)
window.grid_columnconfigure(0, weight=1)
sc = scrollableContainer(window, bd=2, bg='black')
sc.grid(row=1, column=0, sticky='nsew')

frame_2 = Frame(window, bg='blue', height=20)
frame_2.grid(row=2, column=0, sticky='nsew')

btn_1 = Button(frame_2, text="Добавить штуцер", command=new_message)
btn_1.grid(row=2, column=0, sticky='we', padx=20, pady=5)

btn_2 = Button(frame_2, text="Выбрать папку", command=clicked_1)
btn_2.grid(row=2, column=1, sticky='we', padx=600, pady=5)

btn_3 = Button(frame_2, text="Завершить", command=clicked_2)
btn_3.grid(row=2, column=2, sticky='we', padx=120, pady=5)

window.mainloop()

Валерий Изранов

Цитата: Vashnaemnik от 09.10.24, 13:29:11так как не знаю количества строк
В какую то любую изначально пустую ячейку после каждой записи добавляйте 1
Это будет последняя записанная строка.

Vashnaemnik

Цитата: Валерий Изранов от 09.10.24, 13:41:13В какую то любую изначально пустую ячейку после каждой записи добавляйте 1
Это будет последняя записанная строка.

Добавил с отработку кнопки
def clicked_2():
    list_of_nozzles = []
    for i in range(len(sc.messages)):
         print(i)
    window.quit()
количество строк определяет.
Остается, как вывести данные из каждой ячейки

Валерий Изранов


Vashnaemnik

Цитата: Валерий Изранов от 09.10.24, 14:48:20Расскажите что это такое.

Я не смог понять как мне таскать стандартные изделия из библиотеки компас.
Сделал ее вручную. Создал БД из ГОСТов, и сделал построения.
Будут строиться, сохраняться в стандартные изделия и вставляться.

Vashnaemnik

Все, решил свою проблему.
Всем спасибо.

Vashnaemnik

Добрый вечер. Снова застрял с запоминанием и передачей своих переменных.
Теперь, когда я передал свои переменный в следующий цикл, а именно диаметр и давление, у меня происходит перебор условий if ,которых там порядка 600 штук.
При чем внутри каждого if свои переменные. Например:
if DN == 15 and PN == 4.0:
    D2, D3, D4, D5, D6, D10, D11, h, h1, h2, h4, h5, Dm, Dn, d1, b, H, H1, D, D1, d, n, dsp = 47, 29, 39, 28, 40, 28, 40, 2, 4, 3, 4, 3, 30, 19, 12, 16, 35, 6, 95, 65, 14, 4, 12
if DN == 15 and PN == 6.3:
    D2, D3, D4, D5, D6, D7, D8, D9, D10, D11, b2, h, h1, h2, h3, h4, h5, Dm, Dn, d1, b, H, H1, D, D1, d, n, dsp = 47, 29, 39, 28, 40, 24, 35, 55, 28, 40, 9, 2, 4, 3, 6.5, 4, 3, 38, 19, 12, 18, 48, 6, 105, 75, 14, 4, 12
if DN == 900 and PN == 0.1:
    D2, h, h1, h2, Dm, Dn, d1, b, H, H1, D, D1, d, n, dsp = 980, 5, 5.5, 5, 944, 926, 892, 26, 65, 16, 1075, 1020, 30, 24, 27
Как мне, в зависимости, от условия ,которое выполнится, записать для передачи в следующий класс переменные?
Видел в примерах, создавали пустой список перед началом выборки условия. Но у меня разное количество переменных.
Подскажите, каким путем двигаться?

Vashnaemnik

Не нашел я что то проще  :) просто после каждого условия прописал return. Теперь я знаю все переменные какое бы условие не произошло.
Теперь пытаюсь сшить это воедино  :%:  и снова грусть печаль. капец, дремучее леса не видел.
Подскажите.
Когда я в таблицу штуцеров, в отдельном классе "App", записываю данные. В своем мейне я определяю все строки
import Tablica_shtycerov # импорт таблицы штуцеров

Tablica_shtycerov.App()

# вывод всех переменных
for i in Tablica_shtycerov.dannie_strok:
        for j in i:
            print(j.get())
Далее мне надо из этих строк взять только диаметр и давление. По позиции они расположены на 2 и 3 месте.
Как мне в моем новом классе, считать определенные переменные из строки, что бы сделать выбор условия из своей БД?
Вообще запутался.

Vashnaemnik

Очень жаль, что никто не может подсказать.
Совсем не охота это осуществлять все в одном едином коде, получится десятки тысяч строк.
Интернет уже весь облазил, понимаю как считать всю таблицу, конкретную строку.
А как забрать отдельные переменные из строки не пойму.
Варианты пробовал, но он почему то ругается.
А простым, народным языком нигде не прописано, все только терминами.

Валерий Изранов

Vashnaemnik, вы упорно не хотите принимать  помощь.
Вот таблица Excel для хранения любой информации.
Каждая ячейка адресуется. В ячейку можно записывать и считывать.
В ячейке М1 хранится количество записанных строк.

Vashnaemnik

Цитата: Валерий Изранов от 15.10.24, 14:58:37Vashnaemnik, вы упорно не хотите принимать  помощь.
Вот таблица Excel для хранения любой информации.
Каждая ячейка адресуется. В ячейку можно записывать и считывать.
В ячейке М1 хранится количество записанных строк.
Но я свои данные из таблицы не записывал в excel.
У меня через tkinter.
Дальше у меня другие БД (на фланцы, заглушки, поворотки, прокладки)
И они не в excel.
Все строки из таблицы или любую из них я вытаскиваю.
А вот конкретный столбец или конкретные ячейки из строки у меня никак не выходит вытащить.
Неужели это можно сделать только через excel?

Валерий Изранов

Из интернета.
"Tkinter – это кроссплатформенная библиотека для разработки графического интерфейса на языке Python"

Vashnaemnik, а что вы с ней делаете?

Vashnaemnik

Цитата: Валерий Изранов от 15.10.24, 15:49:51Из интернета.
"Tkinter – это кроссплатформенная библиотека для разработки графического интерфейса на языке Python"

Vashnaemnik, а что вы с ним делаете?
Там я вбиваю всю таблицу штуцеров и некоторые данные (высотная отметка, ориентация, вылет) для понимания количества и расположения на корпусе аппарата.
После по этим данным я буду строить аппарат.

Валерий Изранов

Цитата: Vashnaemnik от 15.10.24, 15:54:15Там я вбиваю всю таблицу штуцеров и некоторые данные
С этим прекрасно справится Питон без какой либо помощи.

p3452

Не хотел вмешиваться (епархия Python-истов, но видно, ИМ не до Вас!)...
Порассуждаем, вообщем - без привязки к конкретному языку программирования...
1. Вы пишите:
Цитата: Vashnaemnik от 09.10.24, 13:29:11Наконец я закончил свою таблицу.
а затем
Цитата: Vashnaemnik от 15.10.24, 15:40:19А вот конкретный столбец или конкретные ячейки из строки у меня никак не выходит вытащить.
из ЭТОГО следует, что никакой "Таблицы", на самом деле, у Вас нет, ибо если бы ОНА была то доступ к ЛЮБОЙ ячейке:
=Таблица[i,j], где i-номер строки, j-номер столбца.
или, в некоторых других случаях (языках программирования), могло бы быть так:
Cells[i,j], где i-номер строки, j-номер столбца.

2.  Вы пишите:
Цитата: Vashnaemnik от 09.10.24, 13:29:11Сделал свою базу для построения всяких фланцев, заглушек.
С учетом п.1 можно утверждать что, на самом деле, и никакой "Базы данных" у Вас нет!

p/s: ЭТО в качестве КОНСТРУКТИВНОЙ критики СТИМУЛИРУЮЩЕЙ к дальнейшим действиям...


Vashnaemnik

Цитата: Валерий Изранов от 15.10.24, 15:57:21С этим прекрасно справится Питон без какой либо помощи.

:) я знаю. Но вот как вытащить мне не всю строку, а только ее часть, мне пока не поддается. Понимаю, что в каждой строке каждая ячейка под своим номером, но как я только не пытался их вытащить, он постоянно матерится  :)

Валерий Изранов

Тут рядом Михаил88.
Он точно знает.

Vashnaemnik

Цитата: p3452 от 15.10.24, 16:03:34Не хотел вмешиваться (епархия Python-истов, но видно, ИМ не до Вас!)...
Порассуждаем, вообщем - без привязки к конкретному языку программирования...
1. Вы пишите:а затемиз ЭТОГО следует, что никакой "Таблицы", на самом деле, у Вас нет, ибо если бы ОНА была то доступ к ЛЮБОЙ ячейке:
=Таблица[i,j], где i-номер строки, j-номер столбца.
или, в некоторых других случаях (языках программирования), могло бы быть так:
Cells[i,j], где i-номер строки, j-номер столбца.

2.  Вы пишите:С учетом п.1 можно утверждать что, на самом деле, и никакой "Базы данных" у Вас нет!

p/s: ЭТО в качестве КОНСТРУКТИВНОЙ критики СТИМУЛИРУЮЩЕЙ к дальнейшим действиям...


Ну, возможно и так. Возможно я просто неправильно описал.
Например на фланцы 33259. У меня в пайтоне прописаны все варианты размеров и исполнений (порядка 600 if), вот мне из моей таблицы нужно вытащить данные, которые я возьму и вставлю в файл, где куча if-ов. Из всех них, подойдет только один. Он из нужной строки с помощью return заберет все переменные, и после построит этот фланец. И так же по всем другим деталя.
Возможно это не БД, может это и по другому называется.

Vashnaemnik

Цитата: p3452 от 15.10.24, 16:03:34Не хотел вмешиваться (епархия Python-истов, но видно, ИМ не до Вас!)...
Порассуждаем, вообщем - без привязки к конкретному языку программирования...
1. Вы пишите:а затемиз ЭТОГО следует, что никакой "Таблицы", на самом деле, у Вас нет, ибо если бы ОНА была то доступ к ЛЮБОЙ ячейке:
=Таблица[i,j], где i-номер строки, j-номер столбца.
или, в некоторых других случаях (языках программирования), могло бы быть так:
Cells[i,j], где i-номер строки, j-номер столбца.

2.  Вы пишите:С учетом п.1 можно утверждать что, на самом деле, и никакой "Базы данных" у Вас нет!

p/s: ЭТО в качестве КОНСТРУКТИВНОЙ критики СТИМУЛИРУЮЩЕЙ к дальнейшим действиям...


А вообще, вот моя таблица:
from tkinter import *
from tkinter import ttk
from tkinter.ttk import Combobox
import tkinter.filedialog as fd # работа с файлами

class MessageItem_2(Frame):
   
    def __init__(self, master, message, **kwds):
        Frame.__init__(self, master, **kwds)
        self.grid_rowconfigure(0, weight=1)
        self.grid_columnconfigure(0, weight=1)
        self.text = Label(self, text=message, anchor='w', bg='gold')
        self.text.grid(row=1, column=0, sticky='nsew')

        self.txt_0 = Entry(self, width=9, font=("Times New Roman", 10), justify = CENTER)
        self.txt_0.place(x=2, y=1)

        self.txt_1 = Entry(self, width=45, font=("Times New Roman", 10), justify = LEFT)
        self.txt_1.place(x=69, y=1)

        self.txt_2 = Entry(self, width=11, font=("Times New Roman", 10), justify = CENTER)
        self.txt_2.place(x=350, y=1)

        self.txt_3 = Entry(self, width=12, font=("Times New Roman", 10), justify = CENTER)
        self.txt_3.place(x=428, y=1)

        self.txt_4 = Entry(self, width=13, font=("Times New Roman", 10), justify = CENTER)
        self.txt_4.place(x=510, y=1)

        self.txt_5 = Entry(self, width=12, font=("Times New Roman", 10), justify = CENTER)
        self.txt_5.place(x=600, y=1)

        tip={"ГОСТ 33259-2015": ["", "A", "B", "C", "D", "E", "F", "J", "K", "L", "M"],
             "ГОСТ 28759.3-90": ["", 1, 2, 3, 4],
             "ГОСТ 28759.4-90": ["", 1]}
       
        def on_select(event):
            self.combo_2["values"] = tip[self.combo_1.get()]
            self.combo_2.current(0)

        self.combo_1 = Combobox(self, value = [k for k in tip], state="readonly", font=("Times New Roman", 8), justify=CENTER, width=16)
        self.combo_1.place(x=685, y=1)
        self.combo_1.bind("<<ComboboxSelected>>",on_select)

        self.combo_2 = Combobox(self, state="readonly", font=("Times New Roman", 8), justify=CENTER, width=10)
        self.combo_2.place(x=810, y=1)
       

        self.combo_3 = Combobox(self, state="readonly", font=("Times New Roman", 8), justify=CENTER, width=13)
        self.combo_3['values'] = ("", "Фланец", "Заглушка")
        self.combo_3.current(0)  # установите вариант по умолчанию
        self.combo_3.place(x=900, y=1)

        tip_2={"A": ["", "ПОН-А", "ПОН-Б", "ПОН-В", "ПМБ", "ПМБ-1", "ПА", "ПК", "ПЭ", "СНП", "ПУТГ"],
               "B": ["", "ПОН-А", "ПОН-Б", "ПОН-В", "ПМБ", "ПМБ-1", "ПА", "ПК", "ПЭ", "СНП", "ПУТГ"],
               "C": ["", "ПОН-А", "ПОН-Б", "ПОН-В", "ПМБ", "ПМБ-1", "ПА", "ПК", "ПЭ", "СНП", "ПУТГ"],
               "D": ["", "ПОН-А", "ПОН-Б", "ПОН-В", "ПМБ", "ПМБ-1", "ПА", "ПК", "ПЭ", "СНП", "ПУТГ"],
               "E": ["", "ПОН-А", "ПОН-Б", "ПОН-В", "ПМБ", "ПМБ-1", "ПА", "ПК", "ПЭ", "СНП", "ПУТГ"],
               "F": ["", "ПОН-А", "ПОН-Б", "ПОН-В", "ПМБ", "ПМБ-1", "ПА", "ПК", "ПЭ", "СНП", "ПУТГ"],
               "K": ["", "ПОН-А", "ПОН-Б", "ПОН-В", "ПМБ", "ПМБ-1", "ПА", "ПК", "ПЭ", "СНП", "ПУТГ"],
               "L": ["", "ПОН-А", "ПОН-Б", "ПОН-В", "ПМБ", "ПМБ-1", "ПА", "ПК", "ПЭ", "СНП", "ПУТГ"],
               "M": ["", "ПОН-А", "ПОН-Б", "ПОН-В", "ПМБ", "ПМБ-1", "ПА", "ПК", "ПЭ", "СНП", "ПУТГ"],
               "1": ["", "ПОН-А", "ПОН-Б", "ПОН-В", "ПМБ", "ПМБ-1", "ПА", "ПК", "ПЭ", "СНП", "ПУТГ"],
               "2": ["", "ПОН-А", "ПОН-Б", "ПОН-В", "ПМБ", "ПМБ-1", "ПА", "ПК", "ПЭ", "СНП", "ПУТГ"],
               "3": ["", "ПОН-А", "ПОН-Б", "ПОН-В", "ПМБ", "ПМБ-1", "ПА", "ПК", "ПЭ", "СНП", "ПУТГ"],
               "4": ["", "ПОН-А", "ПОН-Б", "ПОН-В", "ПМБ", "ПМБ-1", "ПА", "ПК", "ПЭ", "СНП", "ПУТГ"],
               "J": ["", "Кольцо"]}
       
        tip_3={"ГОСТ 28759.4-90": ["", "Кольцо"]}

        def on_select_2(event):
            if self.combo_1.get() == 'ГОСТ 33259-2015' or self.combo_1.get() == 'ГОСТ 28759.3-90':
                self.combo_4["values"] = tip_2[self.combo_2.get()]
            elif self.combo_1.get() == 'ГОСТ 28759.4-90':
                self.combo_4["values"] = tip_3[self.combo_1.get()]
            self.combo_4.current(0)

        self.combo_4 = Combobox(self, state="readonly", font=("Times New Roman", 8), justify=CENTER, width=13)
        self.combo_4.place(x=1008, y=1)
        self.combo_2.bind("<<ComboboxSelected>>",on_select_2)

        self.txt_6 = Entry(self, width=18, font=("Times New Roman", 10), justify = CENTER)
        self.txt_6.place(x=1116, y=1)

        self.txt_7 = Entry(self, width=18, font=("Times New Roman", 10), justify = CENTER)
        self.txt_7.place(x=1234, y=1)

        self.txt_8 = Entry(self, width=14, font=("Times New Roman", 10), justify = CENTER)
        self.txt_8.place(x=1350, y=1)

        self.txt_9 = Entry(self, width=15, font=("Times New Roman", 10), justify = CENTER)
        self.txt_9.place(x=1443, y=1)

        self.txt_10 = Entry(self, width=13, font=("Times New Roman", 10), justify = CENTER)
        self.txt_10.place(x=1543, y=1)

        self.dannie_stroki = [self.txt_0, self.txt_1, self.txt_2, self.txt_3, self.txt_4, self.txt_5, self.combo_1, self.combo_2, self.combo_3, self.combo_4, self.txt_6, self.txt_7, self.txt_8, self.txt_9, self.txt_10]
        dannie_strok.append(self.dannie_stroki)

class scrollableContainer(Frame):

    def __init__(self, master, **kwargs):
        Frame.__init__(self, master, **kwargs) #holds canvas & scrollbars
        self.grid_rowconfigure(0, weight=1)
        self.grid_columnconfigure(0, weight=1)

        self.canv = Canvas(self, bd=0, highlightthickness=0, bg='green')
        self.vScroll = Scrollbar(self, orient='vertical',
                                 command=self.canv.yview)
        self.vScroll.grid(row=1, column=1, sticky='ns')
        self.canv.grid(row=1, column=0, sticky='nsew')       
        self.canv.configure(yscrollcommand=self.vScroll.set)

        self.frm = Frame(self.canv, bd=2, bg='green') #holds messages
        self.frm.grid_columnconfigure(0, weight=1)

        self.canv.create_window(0, 0, window=self.frm, anchor='nw', tags='inner')

        #self.messages = []
        m = MessageItem_2(self.frm, '', bd=2, bg='black')
        m.grid(row=0, column=0, sticky='nsew', padx=2, pady=2)
        #self.messages.append(m)

        self.update_layout()       
        self.canv.bind('<Configure>', self.on_configure)

    def update_layout(self):
        self.frm.update_idletasks()
        self.canv.configure(scrollregion=self.canv.bbox('all'))
        self.canv.yview('moveto','1.0')
        self.size = self.frm.grid_size()

    def on_configure(self, event):
        w,h = event.width, event.height
        natural = self.frm.winfo_reqwidth()
        self.canv.itemconfigure('inner', width= w if w>natural else natural)
        self.canv.configure(scrollregion=self.canv.bbox('all'))

    def add_message(self):
        m = MessageItem_2(self.frm, '', bd=2, bg='black')
        m.grid(row=self.size[1], column=0, padx=2, pady=2, sticky='we')
        #self.messages.append(m)
        self.update_layout()

class App():

    def __init__(self):

        global dannie_strok
        dannie_strok = []
       
        self.window = Tk()
        self.window.resizable(False, False)
        self.window.title("Таблица штуцеров")
        self.window.geometry("1661x388")

        self.frame_1 = Frame(self.window, bg='black')
        self.frame_1.grid(row=0, column=0, sticky='nsew')

        # надписи
        self.lbl_0 = Label(self.frame_1, text="Обозна- \n чение", font=("Times New Roman", 13), height=4, width=7, justify=CENTER, background='gold')
        self.lbl_0.grid(row=0, column=0, sticky=W, padx=2, pady=2)

        self.lbl_1 = Label(self.frame_1, text="Наименование", font=("Times New Roman", 13), height=4, width=30, justify=CENTER, background='gold')
        self.lbl_1.grid(row=0, column=1, sticky=W, padx=2, pady=2)

        self.lbl_2 = Label(self.frame_1, text="Диаметр, \n мм", font=("Times New Roman", 13), height=4, justify=CENTER, background='gold')
        self.lbl_2.grid(row=0, column=2, sticky=W, padx=2, pady=2)

        self.lbl_3 = Label(self.frame_1, text="Давление, \n МПа", font=("Times New Roman", 13), height=4, justify=CENTER, background='gold')
        self.lbl_3.grid(row=0, column=3, sticky=W, padx=2, pady=2)

        self.lbl_4 = Label(self.frame_1, text="Диаметр \n патрубка \n наружний, \n мм", font=("Times New Roman", 13), height=4, justify=CENTER, background='gold')
        self.lbl_4.grid(row=0, column=4, sticky=W, padx=2, pady=2)

        self.lbl_5 = Label(self.frame_1, text="Стенка \n патрубка, \n мм", font=("Times New Roman", 13), height=4, justify=CENTER, background='gold')
        self.lbl_5.grid(row=0, column=5, sticky=W, padx=2, pady=2)

        self.lbl_6 = Label(self.frame_1, text="ГОСТ фланца", font=("Times New Roman", 13), height=4, width=13, justify=CENTER, background='gold')
        self.lbl_6.grid(row=0, column=6, sticky=W, padx=2, pady=2)

        self.lbl_7 = Label(self.frame_1, text="Фланец \n приварной", font=("Times New Roman", 13), height=4, justify=CENTER, background='gold')
        self.lbl_7.grid(row=0, column=7, sticky=W, padx=2, pady=2)

        self.lbl_8 = Label(self.frame_1, text="Элемент \n ответный", font=("Times New Roman", 13), height=4, width=11, justify=CENTER, background='gold')
        self.lbl_8.grid(row=0, column=8, sticky=W, padx=2, pady=2)

        self.lbl_9 = Label(self.frame_1, text="Прокладка", font=("Times New Roman", 13), height=4, width=11, justify=CENTER, background='gold')
        self.lbl_9.grid(row=0, column=9, sticky=W, padx=2, pady=2)

        self.lbl_10 = Label(self.frame_1, text="Ширина \n укрепляющего \n кольца, \n мм", font=("Times New Roman", 13), height=4, width=12, justify=CENTER, background='gold')
        self.lbl_10.grid(row=0, column=10, sticky=W, padx=2, pady=2)

        self.lbl_11 = Label(self.frame_1, text="Толщина \n укрепляющего \n кольца, \n мм", font=("Times New Roman", 13), height=4, width=12, justify=CENTER, background='gold')
        self.lbl_11.grid(row=0, column=11, sticky=W, padx=2, pady=2)

        self.lbl_12 = Label(self.frame_1, text="Высотная \n отметка, \n мм", font=("Times New Roman", 13), height=4, width=9, justify=CENTER, background='gold')
        self.lbl_12.grid(row=0, column=12, sticky=W, padx=2, pady=2)

        self.lbl_13 = Label(self.frame_1, text="Ориентация, \n градус ", font=("Times New Roman", 13), height=4, justify=CENTER, background='gold')
        self.lbl_13.grid(row=0, column=13, sticky=W, padx=2, pady=2)

        self.lbl_14 = Label(self.frame_1, text="Вылет, \n мм ", font=("Times New Roman", 13), height=4, width=11, justify=CENTER, background='gold')
        self.lbl_14.grid(row=0, column=14, sticky=W, padx=2, pady=2)

        self.window.grid_rowconfigure(0, weight=1)
        self.window.grid_columnconfigure(0, weight=1)
        self.sc = scrollableContainer(self.window, bd=2, bg='black')
        self.sc.grid(row=1, column=0, sticky='nsew')

        self.frame_2 = Frame(self.window, bg='blue', height=20)
        self.frame_2.grid(row=2, column=0, sticky='nsew')

        self.btn_1 = Button(self.frame_2, text="Добавить штуцер", command=self.sc.add_message)
        self.btn_1.grid(row=2, column=0, sticky='we', padx=20, pady=5)

        self.btn_2 = Button(self.frame_2, text="Выбрать папку", command=self.clicked_1)
        self.btn_2.grid(row=2, column=1, sticky='we', padx=600, pady=5)

        self.btn_3 = Button(self.frame_2, text="Завершить", command=self.clicked_2)
        self.btn_3.grid(row=2, column=2, sticky='we', padx=120, pady=5)

        self.window.mainloop()

    # назначение пути для проекта
    def clicked_1(self):
        directory = fd.askdirectory(title="Открыть папку", initialdir="/")

    def clicked_2(self):
        self.window.quit()
Или это не таблица?

Vashnaemnik

Цитата: p3452 от 15.10.24, 16:03:34Не хотел вмешиваться (епархия Python-истов, но видно, ИМ не до Вас!)...
Порассуждаем, вообщем - без привязки к конкретному языку программирования...
1. Вы пишите:а затемиз ЭТОГО следует, что никакой "Таблицы", на самом деле, у Вас нет, ибо если бы ОНА была то доступ к ЛЮБОЙ ячейке:
=Таблица[i,j], где i-номер строки, j-номер столбца.
или, в некоторых других случаях (языках программирования), могло бы быть так:
Cells[i,j], где i-номер строки, j-номер столбца.

2.  Вы пишите:С учетом п.1 можно утверждать что, на самом деле, и никакой "Базы данных" у Вас нет!

p/s: ЭТО в качестве КОНСТРУКТИВНОЙ критики СТИМУЛИРУЮЩЕЙ к дальнейшим действиям...


А вот от сюда я ее открываю
import Tablica_shtycerov # импорт таблицы штуцеров


Tablica_shtycerov.App()

# вывод всех переменных
for i in Tablica_shtycerov.dannie_strok:
        for j in i:
            print(j.get())

# вывод переменных первой (любой) строки
#for i in range(len(Tablica_shtycerov.dannie_strok[0])):
    #print(Tablica_shtycerov.dannie_strok[0][i].get())