QStackedWidget - Запустить функции кнопок для каждого окна из другого файла

Создан Qt проект с использованием QStackedWidget. На каждой его странице есть (или будут) кнопки, которые должны производить действия с SQLite базой. Так как функций много, я попробовала вынести их в отдельный .py-файл. Однако, я не могу понять как заставить их работать.

Если я добавляю все функции в main.py, все кнопки работают.

Попробовала создать в отдельном файле (customer_screen.py) класс с нажатием на кнопки и функциями, но получаю ошибку:

AttributeError: 'MainWindow' object has no attribute 'SoldTo_Functions'.

В идеале и команду нажатия кнопки перенести в customer_screen.py.

https://github.com/Masik84/My_Prog.git

main.py

from PyQt5.QtCore import QPropertyAnimation, QEasingCurve
from PyQt5.QtGui import QColor, QIcon
from PyQt5.QtWidgets import QMainWindow, QGraphicsDropShadowEffect, QSizeGrip

from ui_main import *
from customer_screen import SoldTo_Functions
import sys

class MainWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.setWindowFlag(QtCore.Qt.FramelessWindowHint)
        self.setAttribute(QtCore.Qt.WA_TranslucentBackground)

        self.ui.stackedWidget.setCurrentWidget(self.ui.home)

        self.ui.btn_home.clicked.connect(lambda: self.ui.stackedWidget.setCurrentWidget(self.ui.home))
        self.ui.btn_bonuses.clicked.connect(lambda: self.ui.stackedWidget.setCurrentWidget(self.ui.bonus_data_page))
        self.ui.btn_invoices.clicked.connect(lambda: self.ui.stackedWidget.setCurrentWidget(self.ui.widgets))
        self.ui.btn_customers.clicked.connect(lambda: self.ui.stackedWidget.setCurrentWidget(self.ui.cutomer_data_page))

        # page doesn't created yet
        #self.ui.btn_products.clicked.connect(lambda: self.ui.stackedWidget.setCurrentWidget(self.ui.product_data_page))


        # tried to import SoldTo_Functions
        # self.ui.soldto_update_btn.clicked.connect(self.SoldTo_Functions.upload_Soldto_from_DB)

if __name__ == "__main__":
    MainApp = QtWidgets.QApplication(sys.argv)
    App = MainWindow()
    App.show()
    sys.exit(MainApp.exec_())

customer_screen.py

from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QMainWindow

from ui_main import Ui_MainWindow
import sqlite3

db_path = 'Bonus_db.db'

class SoldTo_Functions():
    def __init__(self):
        super(SoldTo_Functions, self).__init__()

    # self.ui.soldto_update_btn.clicked.connect(self.upload_Soldto_from_DB)
    # self.ui.soldto_add_btn.clicked.connect(self.go_to_Create_Client)
    # self.ui.soldto_edit_btn.clicked.connect(self.go_to_Edit_Client)
    # self.ui.soldto_delete_btn.clicked.connect(self.go_to_Delete_Client)

    def upload_Soldto_from_DB(self):
                conn = sqlite3.Connection(db_path)
                create_customers_table = """
                                CREATE TABLE IF NOT EXISTS Customers (
                                id INTEGER PRIMARY KEY AUTOINCREMENT,
                                SoldTo INTEGER not null,
                                SoldTo_name VARCHAR (100),
                                CONSTRAINT Cust_Index UNIQUE (SoldTo, SoldTo_name) ON CONFLICT REPLACE);
                        """
                conn.execute(create_customers_table)
                conn.commit()

                show_customer_data = 'SELECT SoldTo, SoldTo_name FROM Customers'
                result = conn.execute(show_customer_data)
                self.ui.soldto_table.setRowCount(0)

                for row_number, row_data in enumerate(result):
                    self.ui.soldto_table.insertRow(row_number)
                    for column_number, data in enumerate(row_data):
                        self.ui.soldto_table.setItem(row_number, column_number, QtWidgets.QTableWidgetItem(str(data)))

                conn.close()
                self.ui.soldto_error_lable.setText('Table was updated successfully')

    def go_to_Create_Client(self):
        print('Sold-to Create Btn clicked')

    def go_to_Edit_Client(self):
        print('Sold-to Edit Btn clicked')

    def go_to_Delete_Client(self):
        print('Sold-to Delete Btn clicked')



Ответы (3 шт):

Автор решения: S. Nick

Класс QStackedWidget предоставляет стек виджетов, в котором одновременно виден только один виджет.

Обычная практика такая, что каждый виджет, который вы добавляете в стек - реализован в отдельном классе и этот класс вы при желании можете разместить в отдельный модуль.

Я очень грубо все что находится в модуле ui_main.py между строками:

    self.stackedWidget.addWidget(self.bonus_data_page)
    
    ...
    
    self.stackedWidget.addWidget(self.cutomer_data_page)

перенес в модуль customer_screen222.py ,
а вместо перенесенных строк добавил одну:

    self.cutomer_data_page = SoldTo_Functions()

Я отметил те строки, которые также изменил. Вам надо будет немного поправить стили в модуле customer_screen222.py

Main.py

import sys
import sqlite3

from PyQt5 import QtWidgets, QtCore
from PyQt5.QtCore import QPropertyAnimation, QEasingCurve
from PyQt5.QtGui import QColor, QIcon
from PyQt5.QtWidgets import QMainWindow, QGraphicsDropShadowEffect, QSizeGrip

from ui_main import Ui_MainWindow                                             # !!!

#from customer_screen import SoldTo_Functions

db_path = 'Bonus_db.db'
WINDOW_SIZE = 0;


class MainWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.setWindowFlag(QtCore.Qt.FramelessWindowHint)
        self.setAttribute(QtCore.Qt.WA_TranslucentBackground)

        # DROP SHADOW
        self.shadow = QGraphicsDropShadowEffect(self)
        self.shadow.setBlurRadius(17)
        self.shadow.setXOffset(0)
        self.shadow.setYOffset(0)
        self.shadow.setColor(QColor(0, 0, 0, 150))
        self.ui.bgApp.setGraphicsEffect(self.shadow)

        # MINIMIZE
        self.ui.minimizeAppBtn.clicked.connect(lambda: self.showMinimized())
        # MAXIMIZE/RESTORE
        self.ui.maximizeRestoreAppBtn.clicked.connect(lambda: self.maximize_restore())
        # CLOSE APPLICATION
        self.ui.closeAppBtn.clicked.connect(lambda: self.close())
        # SLIDE MENU
        self.ui.toggleButton.clicked.connect(lambda: self.toggleMenu())
        self.ui.contentTopBg.mouseMoveEvent = self.MoveWindow

        self.ui.stackedWidget.setCurrentWidget(self.ui.home)

        self.ui.btn_home.clicked.connect(lambda: self.ui.stackedWidget.setCurrentWidget(self.ui.home))
        self.ui.btn_bonuses.clicked.connect(lambda: self.ui.stackedWidget.setCurrentWidget(self.ui.bonus_data_page))
        self.ui.btn_invoices.clicked.connect(lambda: self.ui.stackedWidget.setCurrentWidget(self.ui.widgets))
        self.ui.btn_customers.clicked.connect(lambda: self.ui.stackedWidget.setCurrentWidget(self.ui.cutomer_data_page))

        # page doesn't created yet
        #self.ui.btn_products.clicked.connect(lambda: self.ui.stackedWidget.setCurrentWidget(self.ui.product_data_page))
        # self.ui.soldto_update_btn.clicked.connect(self.SoldTo_Functions.upload_Soldto_from_DB)

    def maximize_restore(self):
# ???        global WINDOW_SIZE
        status = WINDOW_SIZE
        if status == 0:
            WINDOW_SIZE = 1
            self.showMaximized()

            self.ui.appMargins.setContentsMargins(0, 0, 0, 0)
            self.ui.maximizeRestoreAppBtn.setToolTip("Restore")
            self.ui.maximizeRestoreAppBtn.setIcon(QIcon(u":/icons/images/icons/icon_restore.png"))
        else:
            WINDOW_SIZE = 0
            self.showNormal()

            self.resize(self.width() + 1, self.height() + 1)
            self.ui.appMargins.setContentsMargins(10, 10, 10, 10)
            self.ui.maximizeRestoreAppBtn.setToolTip("Maximize")
            self.ui.maximizeRestoreAppBtn.setIcon(QIcon(u":/icons/images/icons/icon_maximize.png"))

    def MoveWindow(self, event):
        if self.isMaximized() == False:
            self.move(self.pos() + event.globalPos() - self.clickPosition)
            self.clickPosition = event.globalPos()
            event.accept()

    def mousePressEvent(self, event):
        self.clickPosition = event.globalPos()

    def toggleMenu(self):
        width = self.ui.leftMenuBg.width()
        maxExtend = 150
        standard = 60

            # SET MAX WIDTH
        if width == 60:
                widthExtended = maxExtend
        else:
                widthExtended = standard

        # ANIMATION
        self.animation = QPropertyAnimation(self.ui.leftMenuBg, b"minimumWidth")
        self.animation.setDuration(500)
        self.animation.setStartValue(width)
        self.animation.setEndValue(widthExtended)
        self.animation.setEasingCurve(QEasingCurve.InOutQuart)
        self.animation.start()


if __name__ == "__main__":
    MainApp = QtWidgets.QApplication(sys.argv)
    App = MainWindow()
    App.show()
    sys.exit(MainApp.exec_())

ui_main.py

from PyQt5 import QtCore, QtGui, QtWidgets

from customer_screen222 import SoldTo_Functions                      # !!!

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
    ...
    
        self.stackedWidget.addWidget(self.bonus_data_page)

# <----  cutomer_data_page   ---->

        self.cutomer_data_page = SoldTo_Functions()

        # все перенес в модуль customer_screen222.py                        # !!!     


# <----  cutomer_data_page   ----> 
        
        self.stackedWidget.addWidget(self.cutomer_data_page)
        self.verticalLayout_15.addWidget(self.stackedWidget)
 
    ...

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
    ...

        item.setText(_translate("MainWindow", "Valid To"))
 
# !!! 
# !!!        self.label.setText(_translate("MainWindow", "Customer Data"))
        self.cutomer_data_page.label.setText(_translate("MainWindow", "Customer Data"))        
# !!! ---->  ^^^^^^^^^^^^^^^^^
# !!! и так далее ...
# !!! но это нада перенести в модуль customer_screen222.py
       
        self.cutomer_data_page.label_2.setText(_translate("MainWindow", "Sold-To Data"))
        self.cutomer_data_page.soldto_update_btn.setText(_translate("MainWindow", "Update"))
        self.cutomer_data_page.soldto_delete_btn.setText(_translate("MainWindow", "Delete"))
        self.cutomer_data_page.soldto_edit_btn.setText(_translate("MainWindow", "Edit"))
        
        self.cutomer_data_page.soldto_add_btn.setText(_translate("MainWindow", "Create"))
        self.cutomer_data_page.soldto_table.setSortingEnabled(True)
        item = self.cutomer_data_page.soldto_table.horizontalHeaderItem(0)
        item.setText(_translate("MainWindow", "Sold-To"))
        item = self.cutomer_data_page.soldto_table.horizontalHeaderItem(1)
        item.setText(_translate("MainWindow", "Name (en)"))
        item = self.cutomer_data_page.soldto_table.horizontalHeaderItem(2)
        
        item.setText(_translate("MainWindow", "Name (ru)"))
        
        self.cutomer_data_page.label_3.setText(_translate("MainWindow", "Ship-To Data"))
        self.cutomer_data_page.shipto_edit_btn.setText(_translate("MainWindow", "Edit"))
        self.cutomer_data_page.shipto_delete_btn.setText(_translate("MainWindow", "Delete"))
        self.cutomer_data_page.shipto_update_btn.setText(_translate("MainWindow", "Update"))
        self.cutomer_data_page.shipto_add_btn.setText(_translate("MainWindow", "Create"))
        self.cutomer_data_page.shipto_table.setSortingEnabled(True)
        item = self.cutomer_data_page.shipto_table.horizontalHeaderItem(0)
        item.setText(_translate("MainWindow", "Ship-To"))
        item = self.cutomer_data_page.shipto_table.horizontalHeaderItem(1)
        item.setText(_translate("MainWindow", "Name (en)"))
        item = self.cutomer_data_page.shipto_table.horizontalHeaderItem(2)
        item.setText(_translate("MainWindow", "Name (ru)"))
        self.creditsLabel.setText(_translate("MainWindow", "By: Fokina Maria"))
        self.version.setText(_translate("MainWindow", "v1.0.3"))
        
import resources_rc

customer_screen222.py

Опубликую отдельно, потому что не помещается.


введите сюда описание изображения

введите сюда описание изображения

→ Ссылка
Автор решения: S. Nick

Продолжение ...

customer_screen222.py часть ПЕРВАЯ

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *

import sqlite3
db_path = 'Bonus_db.db'

class SoldTo_Functions(QtWidgets.QWidget):
    def __init__(self):
        super(SoldTo_Functions, self).__init__()

        self.cutomer_data_page = QtWidgets.QWidget(self)
        self.cutomer_data_page.setStyleSheet("QPushButton {\n"
"    border: 2px solid #6272a4;\n"
"    border-radius: 5px;    \n"
"    background-color: #6272a4;\n"
"    color: #f8f8f2;\n"
"}\n"
"QPushButton:hover {\n"
"    background-color: #bd93f9;\n"
"    border: 2px solid #7082b6;\n"
"}\n"
"QPushButton:pressed {    \n"
"    background-color: #ff79c6;\n"
"    border: 2px solid #ff79c6;\n"
"}")
        self.cutomer_data_page.setObjectName("cutomer_data_page")
        self.verticalLayout_20 = QtWidgets.QVBoxLayout(self.cutomer_data_page)
        self.verticalLayout_20.setContentsMargins(9, 9, 9, 9)
        self.verticalLayout_20.setSpacing(9)
        self.verticalLayout_20.setObjectName("verticalLayout_20")
        self.row_4 = QtWidgets.QFrame(self.cutomer_data_page)
        self.row_4.setMaximumSize(QtCore.QSize(16777215, 60))
        font = QtGui.QFont()
        font.setPointSize(10)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(50)
        self.row_4.setFont(font)
        self.row_4.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.row_4.setFrameShadow(QtWidgets.QFrame.Raised)
        self.row_4.setObjectName("row_4")
        self.verticalLayout_14 = QtWidgets.QVBoxLayout(self.row_4)
        self.verticalLayout_14.setObjectName("verticalLayout_14")
        self.label = QtWidgets.QLabel(self.row_4)
        font = QtGui.QFont()
        font.setFamily("Segoe UI")
        font.setPointSize(26)
        font.setBold(True)
        font.setItalic(False)
        font.setWeight(75)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.verticalLayout_14.addWidget(self.label, 0, QtCore.Qt.AlignHCenter|QtCore.Qt.AlignVCenter)
        self.verticalLayout_20.addWidget(self.row_4)
        self.row_5 = QtWidgets.QFrame(self.cutomer_data_page)
        self.row_5.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.row_5.setFrameShadow(QtWidgets.QFrame.Raised)
        self.row_5.setObjectName("row_5")
        self.horizontalLayout_6 = QtWidgets.QHBoxLayout(self.row_5)
        self.horizontalLayout_6.setObjectName("horizontalLayout_6")
        self.soldto_frame = QtWidgets.QFrame(self.row_5)
        self.soldto_frame.setStyleSheet("")
        self.soldto_frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.soldto_frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.soldto_frame.setObjectName("soldto_frame")
        self.verticalLayout_21 = QtWidgets.QVBoxLayout(self.soldto_frame)
        self.verticalLayout_21.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_21.setSpacing(0)
        self.verticalLayout_21.setObjectName("verticalLayout_21")
        self.soldto_heade_frame = QtWidgets.QFrame(self.soldto_frame)
        self.soldto_heade_frame.setMinimumSize(QtCore.QSize(0, 50))
        self.soldto_heade_frame.setMaximumSize(QtCore.QSize(16777215, 50))
        self.soldto_heade_frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.soldto_heade_frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.soldto_heade_frame.setObjectName("soldto_heade_frame")
        self.verticalLayout_27 = QtWidgets.QVBoxLayout(self.soldto_heade_frame)
        self.verticalLayout_27.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_27.setSpacing(0)
        self.verticalLayout_27.setObjectName("verticalLayout_27")
        self.gridLayout_4 = QtWidgets.QGridLayout()
        self.gridLayout_4.setObjectName("gridLayout_4")
        self.label_2 = QtWidgets.QLabel(self.soldto_heade_frame)
        self.label_2.setMinimumSize(QtCore.QSize(0, 50))
        self.label_2.setMaximumSize(QtCore.QSize(16777215, 50))
        font = QtGui.QFont()
        font.setPointSize(18)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(50)
        self.label_2.setFont(font)
        self.label_2.setAlignment(QtCore.Qt.AlignCenter)
        self.label_2.setObjectName("label_2")
        self.gridLayout_4.addWidget(self.label_2, 0, 0, 1, 1)
        self.verticalLayout_27.addLayout(self.gridLayout_4)
        self.verticalLayout_21.addWidget(self.soldto_heade_frame)

        self.soldto_body_frame = QtWidgets.QFrame(self.soldto_frame)
        self.soldto_body_frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.soldto_body_frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.soldto_body_frame.setObjectName("soldto_body_frame")
        self.verticalLayout_22 = QtWidgets.QVBoxLayout(self.soldto_body_frame)
        
        self.verticalLayout_22.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_22.setSpacing(0)
        self.verticalLayout_22.setObjectName("verticalLayout_22")
        self.gridLayout_3 = QtWidgets.QGridLayout()
        self.gridLayout_3.setContentsMargins(10, 15, 10, 9)
        self.gridLayout_3.setHorizontalSpacing(15)
        self.gridLayout_3.setVerticalSpacing(9)
        self.gridLayout_3.setObjectName("gridLayout_3")
        self.soldto_update_btn = QtWidgets.QPushButton(self.soldto_body_frame)
        self.soldto_update_btn.setMinimumSize(QtCore.QSize(120, 30))
        font = QtGui.QFont()
        font.setPointSize(10)
        self.soldto_update_btn.setFont(font)
        self.soldto_update_btn.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        icon11 = QtGui.QIcon()
        icon11.addPixmap(QtGui.QPixmap(":/icons/images/icons/cil-reload.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.soldto_update_btn.setIcon(icon11)
        self.soldto_update_btn.setObjectName("soldto_update_btn")
        self.gridLayout_3.addWidget(self.soldto_update_btn, 0, 0, 1, 1)
        self.soldto_delete_btn = QtWidgets.QPushButton(self.soldto_body_frame)
        self.soldto_delete_btn.setMinimumSize(QtCore.QSize(120, 30))
        font = QtGui.QFont()
        font.setFamily("Segoe UI")
        font.setPointSize(10)
        self.soldto_delete_btn.setFont(font)
        self.soldto_delete_btn.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        icon12 = QtGui.QIcon()
        icon12.addPixmap(QtGui.QPixmap(":/icons/images/icons/cil-user-unfollow.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.soldto_delete_btn.setIcon(icon12)
        self.soldto_delete_btn.setObjectName("soldto_delete_btn")
        self.gridLayout_3.addWidget(self.soldto_delete_btn, 0, 3, 1, 1)
        self.soldto_edit_btn = QtWidgets.QPushButton(self.soldto_body_frame)
        self.soldto_edit_btn.setMinimumSize(QtCore.QSize(120, 30))
        font = QtGui.QFont()
        font.setFamily("Segoe UI")
        font.setPointSize(10)
        self.soldto_edit_btn.setFont(font)
        self.soldto_edit_btn.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        icon13 = QtGui.QIcon()
        icon13.addPixmap(QtGui.QPixmap(":/icons/images/icons/cil-user.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.soldto_edit_btn.setIcon(icon13)
        self.soldto_edit_btn.setObjectName("soldto_edit_btn")
        self.gridLayout_3.addWidget(self.soldto_edit_btn, 0, 2, 1, 1)
        self.soldto_add_btn = QtWidgets.QPushButton(self.soldto_body_frame)
        self.soldto_add_btn.setMinimumSize(QtCore.QSize(120, 30))
        font = QtGui.QFont()
        font.setFamily("Segoe UI")
        font.setPointSize(10)
        self.soldto_add_btn.setFont(font)
        self.soldto_add_btn.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        icon14 = QtGui.QIcon()
        icon14.addPixmap(QtGui.QPixmap(":/icons/images/icons/cil-user-follow.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.soldto_add_btn.setIcon(icon14)
        self.soldto_add_btn.setObjectName("soldto_add_btn")
        self.gridLayout_3.addWidget(self.soldto_add_btn, 0, 1, 1, 1)
        self.verticalLayout_22.addLayout(self.gridLayout_3)
        self.frame_3 = QtWidgets.QFrame(self.soldto_body_frame)
        self.frame_3.setMinimumSize(QtCore.QSize(0, 30))
        font = QtGui.QFont()
        font.setPointSize(10)
        self.frame_3.setFont(font)
        self.frame_3.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame_3.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_3.setObjectName("frame_3")
        self.horizontalLayout_16 = QtWidgets.QHBoxLayout(self.frame_3)
        self.horizontalLayout_16.setObjectName("horizontalLayout_16")
        self.soldto_error_lable = QtWidgets.QLabel(self.frame_3)
        font = QtGui.QFont()
        font.setPointSize(10)
        self.soldto_error_lable.setFont(font)
        self.soldto_error_lable.setText("")
        self.soldto_error_lable.setAlignment(QtCore.Qt.AlignCenter)
        self.soldto_error_lable.setObjectName("soldto_error_lable")
        self.horizontalLayout_16.addWidget(self.soldto_error_lable)
        self.verticalLayout_22.addWidget(self.frame_3)
        self.soldto_table_frame = QtWidgets.QFrame(self.soldto_body_frame)
        self.soldto_table_frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.soldto_table_frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.soldto_table_frame.setObjectName("soldto_table_frame")
        self.horizontalLayout_13 = QtWidgets.QHBoxLayout(self.soldto_table_frame)
        self.horizontalLayout_13.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_13.setSpacing(0)
        self.horizontalLayout_13.setObjectName("horizontalLayout_13")
        self.soldto_table = QtWidgets.QTableWidget(self.soldto_table_frame)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.soldto_table.sizePolicy().hasHeightForWidth())
        self.soldto_table.setSizePolicy(sizePolicy)
        palette = QtGui.QPalette()
        brush = QtGui.QBrush(QtGui.QColor(51, 51, 51))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush)
        brush = QtGui.QBrush(QtGui.QColor(51, 51, 51))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Text, brush)
        brush = QtGui.QBrush(QtGui.QColor(51, 51, 51))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ButtonText, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.NoBrush)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush)
        brush = QtGui.QBrush(QtGui.QColor(51, 51, 51))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush)
        brush = QtGui.QBrush(QtGui.QColor(51, 51, 51))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Text, brush)
        brush = QtGui.QBrush(QtGui.QColor(51, 51, 51))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ButtonText, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.NoBrush)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush)
        brush = QtGui.QBrush(QtGui.QColor(51, 51, 51))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush)
        brush = QtGui.QBrush(QtGui.QColor(51, 51, 51))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Text, brush)
        brush = QtGui.QBrush(QtGui.QColor(51, 51, 51))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ButtonText, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.NoBrush)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush)
        self.soldto_table.setPalette(palette)
        font = QtGui.QFont()
        font.setPointSize(10)
        self.soldto_table.setFont(font)
        self.soldto_table.setFrameShape(QtWidgets.QFrame.NoFrame)
        self.soldto_table.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
        self.soldto_table.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustToContents)
        self.soldto_table.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
        self.soldto_table.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
        self.soldto_table.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
        self.soldto_table.setShowGrid(True)
        self.soldto_table.setGridStyle(QtCore.Qt.SolidLine)
        self.soldto_table.setRowCount(0)
        self.soldto_table.setColumnCount(3)
        self.soldto_table.setObjectName("soldto_table")
        item = QtWidgets.QTableWidgetItem()
        font = QtGui.QFont()
        font.setPointSize(10)
        item.setFont(font)
        self.soldto_table.setHorizontalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        font = QtGui.QFont()
        font.setPointSize(10)
        item.setFont(font)
        self.soldto_table.setHorizontalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        font = QtGui.QFont()
        font.setPointSize(10)
        item.setFont(font)
        self.soldto_table.setHorizontalHeaderItem(2, item)
        self.soldto_table.horizontalHeader().setVisible(False)
        self.soldto_table.horizontalHeader().setCascadingSectionResizes(True)
        self.soldto_table.horizontalHeader().setDefaultSectionSize(160)
        self.soldto_table.horizontalHeader().setStretchLastSection(True)
        self.soldto_table.verticalHeader().setVisible(False)
        self.soldto_table.verticalHeader().setCascadingSectionResizes(False)
        self.soldto_table.verticalHeader().setHighlightSections(False)
        self.soldto_table.verticalHeader().setStretchLastSection(False)
        self.horizontalLayout_13.addWidget(self.soldto_table)
→ Ссылка
Автор решения: S. Nick

Продолжение ...

customer_screen222.py часть ВТОРАЯ

        self.verticalLayout_22.addWidget(self.soldto_table_frame)
        self.verticalLayout_21.addWidget(self.soldto_body_frame)
        self.horizontalLayout_6.addWidget(self.soldto_frame)
        self.shipto_frame = QtWidgets.QFrame(self.row_5)
        self.shipto_frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.shipto_frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.shipto_frame.setObjectName("shipto_frame")
        self.verticalLayout_23 = QtWidgets.QVBoxLayout(self.shipto_frame)
        self.verticalLayout_23.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_23.setSpacing(0)
        self.verticalLayout_23.setObjectName("verticalLayout_23")
        self.shipto_header_frame = QtWidgets.QFrame(self.shipto_frame)
        self.shipto_header_frame.setMinimumSize(QtCore.QSize(0, 50))
        self.shipto_header_frame.setMaximumSize(QtCore.QSize(16777215, 50))
        self.shipto_header_frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.shipto_header_frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.shipto_header_frame.setObjectName("shipto_header_frame")
        self.verticalLayout_26 = QtWidgets.QVBoxLayout(self.shipto_header_frame)
        self.verticalLayout_26.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_26.setSpacing(0)
        self.verticalLayout_26.setObjectName("verticalLayout_26")
        self.gridLayout_5 = QtWidgets.QGridLayout()
        self.gridLayout_5.setSpacing(0)
        self.gridLayout_5.setObjectName("gridLayout_5")
        self.label_3 = QtWidgets.QLabel(self.shipto_header_frame)
        self.label_3.setMaximumSize(QtCore.QSize(16777215, 40))
        font = QtGui.QFont()
        font.setPointSize(18)
        self.label_3.setFont(font)
        self.label_3.setAlignment(QtCore.Qt.AlignCenter)
        self.label_3.setObjectName("label_3")
        self.gridLayout_5.addWidget(self.label_3, 0, 0, 1, 1)
        self.verticalLayout_26.addLayout(self.gridLayout_5)
        self.verticalLayout_23.addWidget(self.shipto_header_frame)
        self.shipto_body_frame = QtWidgets.QFrame(self.shipto_frame)
        self.shipto_body_frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.shipto_body_frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.shipto_body_frame.setObjectName("shipto_body_frame")
        self.verticalLayout_24 = QtWidgets.QVBoxLayout(self.shipto_body_frame)
        self.verticalLayout_24.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_24.setSpacing(0)
        self.verticalLayout_24.setObjectName("verticalLayout_24")
        self.gridLayout_6 = QtWidgets.QGridLayout()
        self.gridLayout_6.setContentsMargins(10, 15, 10, 9)
        self.gridLayout_6.setHorizontalSpacing(15)
        self.gridLayout_6.setVerticalSpacing(9)
        self.gridLayout_6.setObjectName("gridLayout_6")
        self.shipto_edit_btn = QtWidgets.QPushButton(self.shipto_body_frame)
        self.shipto_edit_btn.setMinimumSize(QtCore.QSize(120, 30))
        font = QtGui.QFont()
        font.setFamily("Segoe UI")
        font.setPointSize(10)
        self.shipto_edit_btn.setFont(font)
        self.shipto_edit_btn.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.shipto_edit_btn.setIcon(icon13)
        self.shipto_edit_btn.setObjectName("shipto_edit_btn")
        self.gridLayout_6.addWidget(self.shipto_edit_btn, 0, 2, 1, 1)
        self.shipto_delete_btn = QtWidgets.QPushButton(self.shipto_body_frame)
        self.shipto_delete_btn.setMinimumSize(QtCore.QSize(120, 30))
        font = QtGui.QFont()
        font.setFamily("Segoe UI")
        font.setPointSize(10)
        self.shipto_delete_btn.setFont(font)
        self.shipto_delete_btn.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.shipto_delete_btn.setIcon(icon12)
        self.shipto_delete_btn.setObjectName("shipto_delete_btn")
        self.gridLayout_6.addWidget(self.shipto_delete_btn, 0, 3, 1, 1)
        self.shipto_update_btn = QtWidgets.QPushButton(self.shipto_body_frame)
        self.shipto_update_btn.setMinimumSize(QtCore.QSize(120, 30))
        font = QtGui.QFont()
        font.setFamily("Segoe UI")
        font.setPointSize(10)
        self.shipto_update_btn.setFont(font)
        self.shipto_update_btn.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.shipto_update_btn.setIcon(icon11)
        self.shipto_update_btn.setObjectName("shipto_update_btn")
        self.gridLayout_6.addWidget(self.shipto_update_btn, 0, 0, 1, 1)
        self.shipto_add_btn = QtWidgets.QPushButton(self.shipto_body_frame)
        self.shipto_add_btn.setMinimumSize(QtCore.QSize(120, 30))
        font = QtGui.QFont()
        font.setFamily("Segoe UI")
        font.setPointSize(10)
        self.shipto_add_btn.setFont(font)
        self.shipto_add_btn.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.shipto_add_btn.setIcon(icon14)
        self.shipto_add_btn.setObjectName("shipto_add_btn")
        self.gridLayout_6.addWidget(self.shipto_add_btn, 0, 1, 1, 1)
        self.verticalLayout_24.addLayout(self.gridLayout_6)
        self.frame_4 = QtWidgets.QFrame(self.shipto_body_frame)
        self.frame_4.setMinimumSize(QtCore.QSize(0, 30))
        font = QtGui.QFont()
        font.setPointSize(10)
        self.frame_4.setFont(font)
        self.frame_4.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame_4.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_4.setObjectName("frame_4")
        self.horizontalLayout_7 = QtWidgets.QHBoxLayout(self.frame_4)
        self.horizontalLayout_7.setContentsMargins(9, 9, 9, 9)
        self.horizontalLayout_7.setSpacing(6)
        self.horizontalLayout_7.setObjectName("horizontalLayout_7")
        self.shipto_error_lable = QtWidgets.QLabel(self.frame_4)
        font = QtGui.QFont()
        font.setPointSize(10)
        self.shipto_error_lable.setFont(font)
        self.shipto_error_lable.setText("")
        self.shipto_error_lable.setAlignment(QtCore.Qt.AlignCenter)
        self.shipto_error_lable.setObjectName("shipto_error_lable")
        self.horizontalLayout_7.addWidget(self.shipto_error_lable)
        self.verticalLayout_24.addWidget(self.frame_4)
        self.shipto_frame_table = QtWidgets.QFrame(self.shipto_body_frame)
        self.shipto_frame_table.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.shipto_frame_table.setFrameShadow(QtWidgets.QFrame.Raised)
        self.shipto_frame_table.setObjectName("shipto_frame_table")
        self.horizontalLayout_10 = QtWidgets.QHBoxLayout(self.shipto_frame_table)
        self.horizontalLayout_10.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_10.setSpacing(0)
        self.horizontalLayout_10.setObjectName("horizontalLayout_10")
        self.shipto_table = QtWidgets.QTableWidget(self.shipto_frame_table)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.shipto_table.sizePolicy().hasHeightForWidth())
        self.shipto_table.setSizePolicy(sizePolicy)
        palette = QtGui.QPalette()
        brush = QtGui.QBrush(QtGui.QColor(51, 51, 51))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush)
        brush = QtGui.QBrush(QtGui.QColor(51, 51, 51))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Text, brush)
        brush = QtGui.QBrush(QtGui.QColor(51, 51, 51))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ButtonText, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.NoBrush)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush)
        brush = QtGui.QBrush(QtGui.QColor(51, 51, 51))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush)
        brush = QtGui.QBrush(QtGui.QColor(51, 51, 51))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Text, brush)
        brush = QtGui.QBrush(QtGui.QColor(51, 51, 51))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ButtonText, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.NoBrush)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush)
        brush = QtGui.QBrush(QtGui.QColor(51, 51, 51))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush)
        brush = QtGui.QBrush(QtGui.QColor(51, 51, 51))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Text, brush)
        brush = QtGui.QBrush(QtGui.QColor(51, 51, 51))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ButtonText, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.NoBrush)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush)
        self.shipto_table.setPalette(palette)
        font = QtGui.QFont()
        font.setPointSize(10)
        self.shipto_table.setFont(font)
        self.shipto_table.setFrameShape(QtWidgets.QFrame.NoFrame)
        self.shipto_table.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
        self.shipto_table.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustToContents)
        self.shipto_table.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
        self.shipto_table.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
        self.shipto_table.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
        self.shipto_table.setShowGrid(True)
        self.shipto_table.setGridStyle(QtCore.Qt.SolidLine)
        self.shipto_table.setRowCount(0)
        self.shipto_table.setColumnCount(3)
        self.shipto_table.setObjectName("shipto_table")
        item = QtWidgets.QTableWidgetItem()
        font = QtGui.QFont()
        font.setPointSize(10)
        item.setFont(font)
        self.shipto_table.setHorizontalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        font = QtGui.QFont()
        font.setPointSize(10)
        item.setFont(font)
        self.shipto_table.setHorizontalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        font = QtGui.QFont()
        font.setPointSize(10)
        item.setFont(font)
        self.shipto_table.setHorizontalHeaderItem(2, item)
        self.shipto_table.horizontalHeader().setVisible(False)
        self.shipto_table.horizontalHeader().setCascadingSectionResizes(True)
        self.shipto_table.horizontalHeader().setDefaultSectionSize(160)
        self.shipto_table.horizontalHeader().setStretchLastSection(True)
        self.shipto_table.verticalHeader().setVisible(False)
        self.shipto_table.verticalHeader().setCascadingSectionResizes(False)
        self.shipto_table.verticalHeader().setHighlightSections(False)
        self.shipto_table.verticalHeader().setStretchLastSection(False)
        self.horizontalLayout_10.addWidget(self.shipto_table)
        self.verticalLayout_24.addWidget(self.shipto_frame_table)
        self.verticalLayout_23.addWidget(self.shipto_body_frame)
        self.horizontalLayout_6.addWidget(self.shipto_frame)
        self.verticalLayout_20.addWidget(self.row_5)

        self.soldto_update_btn.clicked.connect(self.upload_Soldto_from_DB)
        self.soldto_add_btn.clicked.connect(self.go_to_Create_Client)
        self.soldto_edit_btn.clicked.connect(self.go_to_Edit_Client)
        self.soldto_delete_btn.clicked.connect(self.go_to_Delete_Client)


# !!! обратите внимание что все .ui убраны
# !!! --> vvv
# !!! self.ui.soldto_table.setRowCount(0)

    def upload_Soldto_from_DB(self):
                conn = sqlite3.Connection(db_path)
                create_customers_table = """
                                CREATE TABLE IF NOT EXISTS Customers (
                                id INTEGER PRIMARY KEY AUTOINCREMENT,
                                SoldTo INTEGER not null,
                                SoldTo_name VARCHAR (100),
                                CONSTRAINT Cust_Index UNIQUE (SoldTo, SoldTo_name) ON CONFLICT REPLACE);
                        """
                conn.execute(create_customers_table)
                conn.commit()

                show_customer_data = 'SELECT SoldTo, SoldTo_name FROM Customers'
                result = conn.execute(show_customer_data)
                self.soldto_table.setRowCount(0)

                for row_number, row_data in enumerate(result):
                    self.soldto_table.insertRow(row_number)
                    for column_number, data in enumerate(row_data):
                        self.soldto_table.setItem(row_number, column_number, QtWidgets.QTableWidgetItem(str(data)))

                conn.close()
                self.soldto_error_lable.setText('Table was updated successfully')

    def go_to_Create_Client(self):
        print('Sold-to Create Btn clicked')

    def go_to_Edit_Client(self):
        print('Sold-to Edit Btn clicked')

    def go_to_Delete_Client(self):
        print('Sold-to Delete Btn clicked')
→ Ссылка