Отправить данные объекта класса в другой класс - PullRequest
0 голосов
/ 11 мая 2018

Мне нужна помощь. Я создал объект в одном классе и не могу передать информацию другому классу. Это класс, который я пытаюсь сделать объектом с

class BankAccount():
    def __init__(self, name, acct):
        self.full_name = name
        self.acctNum = acct
        self.balance = 0

    def withdraw(self, w):
        self.balance = self.balance - w
        w = float(w)
        return self.balance

    def deposit(self, d):
        self.balance = self.balance + d
        d = float(d)
        return self.balance

    def balance(self):
        return self.balance()

Это класс, который делает объект

class Window(QtWidgets.QWidget):
    def btnclicked(self):
        search_name = self.sender()
        if search_name.text() in namecheck:
            with open('C:/Users/rbell/PycharmProjects/SDEV140/Final_project/users.txt') as fhand:
                for line in fhand:
                    if search_name.text() in line:
                        line = line.rstrip('\n')
                        array = line.split(",")
                        stringtofloat = float(array[2])
                        x = BankAccount(array[0], array[1])
                        x.balance = stringtofloat
                        print(x.full_name,x.acctNum, x.balance)
            self.secwin.show()
        else:
            print('\nError\n')

    def __init__(self, parent=None):
        super(Window, self).__init__(parent)
        self.left = 440
        self.top = 260
        self.width = 640
        self.height = 480
        self.lineedit = QtWidgets.QLineEdit("");
        self.button1 = QtWidgets.QPushButton("OK");
        self.label1 = QtWidgets.QLabel("Welcome to Reese's Bank!\nEnter account number:")
        vbox = QtWidgets.QVBoxLayout()
        vbox.addWidget(self.label1)
        vbox.addWidget(self.lineedit)
        self.setLayout(vbox)
        self.setGeometry(self.top, self.left, self.width, self.height)
        self.setWindowTitle("first window")
        self.show()
        self.lineedit.editingFinished.connect(self.btnclicked)
        self.secwin = secondwindow()

Как взять данные x = BankAccount () и использовать их в другом классе, например

class ViewBalance(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(ViewBalance, self).__init__(parent)
        self.button1 = QtWidgets.QPushButton("Close");
        self.label1 = QtWidgets.QLabel("Your balance is: ")
        self.label2 = QtWidgets.QLabel("x.Balance")
        vbox = QtWidgets.QVBoxLayout()
        vbox.addWidget(self.label1)
        vbox.addWidget(self.label2)
        vbox.addWidget(self.button1)
        self.setLayout(vbox)

В self.label2 я хотел бы отобразить баланс объекта x BankAccount. Имеет ли значение порядок занятий? Класс BankAccount находится вверху под Imports, класс ViewBalance находится под BankAccount, а класс окна находится внизу.

Это код целиком

import sys
from PyQt5 import QtCore, QtWidgets, QtGui

with open('numlist.txt') as f:
     namecheck = [line.rstrip('\n') for line in f]
search_name=999
w=0
d=0
sendto=''

class BankAccount():
    def __init__(self, name, acct):
        self.full_name = name
        self.acctNum = acct
        self.balance = 0

    def withdraw(self, w):
        self.balance = self.balance - w
        w = float(w)
        return self.balance

    def deposit(self, d):
        self.balance = self.balance + d
        d = float(d)
        return self.balance

    def balance(self):
        return self.balance()

# def saveinfo():
#     accountname = str(x.full_name)
#     accountnumber= str(x.acctNum)
#     accountbalance= str(x.balance)
#     objectlist= [accountname + ', ' + accountnumber + ', ' + accountbalance]
#     savedata = (objectlist[0])
#     latestsave= savedata
#     with open('users.txt', 'r') as ds:
#         with open('tempuserlist.txt', 'w') as es:
#             for line in ds:
#                 if x.acctNum not in line:
#                     es.write(line)
#     with open('users.txt', 'r') as ds:
#         with open('lastuseredit.txt', 'w') as es:
#             if latestsave not in line:
#                 es.write('\n')
#                 es.write(savedata)
#     joinfiles=['tempuserlist.txt', 'lastuseredit.txt']
#     with open('users.txt', 'w') as output:
#         for thing in joinfiles:
#             with open(thing) as input:
#                 output.write(input.read())


class ViewBalance(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(ViewBalance, self).__init__(parent)
        self.button1 = QtWidgets.QPushButton("Close");
        self.label1 = QtWidgets.QLabel("Your balance is: ")
        self.label2 = QtWidgets.QLabel("x.Balance")
        vbox = QtWidgets.QVBoxLayout()
        vbox.addWidget(self.label1)
        vbox.addWidget(self.label2)
        vbox.addWidget(self.button1)
        self.setLayout(vbox)

class DepositMoney(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(DepositMoney, self).__init__(parent)
        self.button1 = QtWidgets.QPushButton("OK");
        self.label1 = QtWidgets.QLabel("How much would you like to deposit? ");
        self.lineedit1 = QtWidgets.QLineEdit();
        vbox = QtWidgets.QVBoxLayout()
        vbox.addWidget(self.label1)
        vbox.addWidget(self.lineedit1)
        vbox.addWidget(self.button1)
        self.setLayout(vbox)

class WithdrawMoney(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(WithdrawMoney, self).__init__(parent)
        self.button1 = QtWidgets.QPushButton("OK");
        self.label1 = QtWidgets.QLabel("How much would you like to withdraw? ");
        self.lineedit1 = QtWidgets.QLineEdit();
        vbox = QtWidgets.QVBoxLayout()
        vbox.addWidget(self.label1)
        vbox.addWidget(self.lineedit1)
        vbox.addWidget(self.button1)
        self.setLayout(vbox)

class secondwindow(QtWidgets.QMainWindow):
    def buttonclk(self):
        sender = self.sender()
        try:
            if sender.text() == "View Balance":
                self.vb.show()
            elif sender.text() == "Deposit":
                self.dm.show()
            elif sender.text() == "Withdraw":
                self.wm.show()
            elif sender.text() == "Save/Exit":
                exit()
        except ValueError:
            print("Try again")

    def __init__(self):
        super(secondwindow, self).__init__()
        central_widget = QtWidgets.QWidget()
        self.left = 440
        self.top = 260
        self.width = 640
        self.height = 480

        self.label1 = QtWidgets.QLabel("Hello x.Full_name");
        self.button1 = QtWidgets.QPushButton("View Balance");
        self.button2 = QtWidgets.QPushButton("Deposit");
        self.button3 = QtWidgets.QPushButton("Withdraw");
        self.button4 = QtWidgets.QPushButton("Save/Exit");

        hbox = QtWidgets.QHBoxLayout(central_widget)
        hbox.addWidget(self.label1)
        hbox.addWidget(self.button1)
        hbox.addWidget(self.button2)
        hbox.addWidget(self.button3)
        hbox.addWidget(self.button4)
        self.setCentralWidget(central_widget)

        self.button1.clicked.connect(self.buttonclk)
        self.button2.clicked.connect(self.buttonclk)
        self.button3.clicked.connect(self.buttonclk)
        self.button4.clicked.connect(self.buttonclk)

        self.vb = ViewBalance()
        self.dm = DepositMoney()
        self.wm = WithdrawMoney()

        self.setGeometry(self.top, self.left, self.width, self.height)
        self.setWindowTitle("Second window")


class Window(QtWidgets.QWidget):
    def btnclicked(self):
        search_name = self.sender()
        if search_name.text() in namecheck:
            with open('users.txt') as fhand:
                for line in fhand:
                    if search_name.text() in line:
                        line = line.rstrip('\n')
                        array = line.split(",")
                        stringtofloat = float(array[2])
                        x = BankAccount(array[0], array[1])
                        x.balance = stringtofloat
                        print(x)
                        print("it's here")
            self.secwin.show()
        else:
            print('\nError\n')


    def __init__(self, parent=None):
        super(Window, self).__init__(parent)

        self.left = 440
        self.top = 260
        self.width = 640
        self.height = 480

        self.lineedit = QtWidgets.QLineEdit();
        self.label2 = QtWidgets.QLabel("Press enter when ready!");
        self.label1 = QtWidgets.QLabel("Welcome to Reese's Bank!\nEnter account number:")

        vbox = QtWidgets.QVBoxLayout()
        vbox.addWidget(self.label1)
        vbox.addWidget(self.lineedit)
        vbox.addWidget(self.label2)
        self.setLayout(vbox)

        self.lineedit.editingFinished.connect(self.btnclicked)
        self.secwin = secondwindow()

        self.setGeometry(self.top, self.left, self.width, self.height)
        self.setWindowTitle("first window")
        self.show()



def main():
    app = QtWidgets.QApplication(sys.argv)
    main = Window()
    main.show
    sys.exit(app.exec())

if __name__ == '__main__':
    main()

Код читает и должен записывать в два разных файла для получения готовых объектов, таких как Reese, 000, 500.0.

1 Ответ

0 голосов
/ 11 мая 2018

Вам всегда нужно будет знать имя экземпляра , с которым вы работаете. Вот пример механизма: у меня не установлен PyQt5, и код на самом деле не минимален, но вот как вы можете настроить механизм в своем коде. Я удалил весь код, не относящийся к передаче объектов.

Так как у меня нет примеров данных, я просто назначаю то, что кажется нормальным ...

class BankAccount():            # Keeps bank account balance
    def __init__(self):
        self.balance = 445

class ViewBalance(): # Prints variable x of instancewin of class Window
    def show(self, b):
        print('ViewBalance print b:', b)

class Window(): 
    def __init__(self):
        x = BankAccount()       # Creates instance x of class BankAccount
        print('Window print x.balance:', x.balance)
        self.vb = ViewBalance()
        self.vb.show(x.balance) # Call instance vb of class ViewBalance
                                # to show balance

win = Window()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...