PyQt6\Pyside6 - Выполнить функцию в зависимости от нажатой кнопки

Рейтинг: 0Ответов: 2Опубликовано: 21.01.2023

Есть 2 кнопки в основном окне New transaction и Edit transaction, по нажатию на любую из них должно открыться дочернее окно. В дочернем окне есть кнопка Save transaction и в зависимости от того какая кнопка вызвала дочернее окно, к кнопке Save transaction должна быть привяза одна из функций add_new_transaction или edit_current_transaction... думаю со смысла понятно какая функция должна быть вызвана по нажатию на кнопку. Я так понимаю решить проблему может self.sender()

import sys

from PySide6 import QtWidgets
from PySide6.QtWidgets import QApplication, QMainWindow
from PySide6.QtSql import QSqlTableModel

from ui_main import Ui_MainWindow
from new_transaction import Ui_Dialog
from connection import Data


class ExpenseTracker(QMainWindow):
    def __init__(self):
        super(ExpenseTracker, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.conn = Data()
        self.view_data()
        self.ui.btn_new_transaction.clicked.connect(self.open_new_transaction_window)
        self.ui.btn_edit_transaction.clicked.connect(self.open_new_transaction_window)
        self.ui.btn_delete_transaction.clicked.connect(self.select_current_row)
        self.ui.current_balance.setText(self.conn.total_balance())

    def view_data(self):
        self.model = QSqlTableModel(self)
        self.model.setTable('expenses')
        self.model.select()
        self.ui.tableView.setModel(self.model)

    def open_new_transaction_window(self):
        self.new_window = QtWidgets.QDialog()
        self.ui_window = Ui_Dialog()
        self.ui_window.setupUi(self.new_window)
        self.new_window.show()
        sender = self.sender()
        print(sender)


    def add_new_transaction(self):
        date = self.ui_window.dateEdit.text()
        category = self.ui_window.cb_choose_category.currentText()
        description = self.ui_window.le_description.text()
        balance = self.ui_window.le_balance.text()
        status = self.ui_window.cb_status.currentText()
        self.ui_window.btn_new_transaction.clicked.connect(
            self.conn.add_new_transaction_query(date, category, description,
                                                balance, status))
        self.view_data()
        self.new_window.close()

    def edit_current_transaction(self):
        pass


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = ExpenseTracker()
    window.show()

    sys.exit(app.exec())

Ответы

▲ 1
sender = self.sender()
if sender.text() == "New transaction":
    self.ui_window.btn_new_transaction.clicked.connect(self.add_new_transaction)
else:
    self.ui_window.btn_new_transaction.clicked.connect(self.edit_current_transaction)
▲ 0
def open_new_transaction_window(self):
    self.new_window = QtWidgets.QDialog()
    self.ui_window = Ui_Dialog()
    self.ui_window.setupUi(self.new_window)
    self.new_window.show()
    sender = self.sender()
    if sender == self.ui.btn_new_transaction:
        self.ui_window.btn_save_transaction.clicked.connect(self.add_new_transaction)
    else:
        self.ui_window.btn_save_transaction.clicked.connect(self.edit_current_transaction)