2015-01-12 4 views
0

У меня есть класс A с методом, который я хочу вызвать.Метод вызова PyQt4 из другого класса

class Class_A(QtGui.QMainWindow): 
    def __init__(self, database, tableName): 
     QtGui.QWidget.__init__(self) 
     self.dbu = database_manager_2.DatabaseUtility(database, tableName) 
     self.setupUi(self) 

    def setupUi(self, Class_A): 
     ... 

    def print_somethig (self): 
      print 'hello' 

Это класс B:

class class B(object):    
    def setupUi_1(self, Dialog): 
     ... 
     self.my_instance = Class_A() 
     QtCore.QObject.connect(self.pushButtonSecond, QtCore.SIGNAL(_fromUtf8("clicked()")),self.my_instance.print_something()) 

Как вы можете видеть, я создал экземпляр из класса А, так я могу назвать это метод в классе В.

Я получил эту ошибку:

TypeError: __init__() takes exactly 3 arguments (1 given)

Я знаю, что это связано с ООП.

+0

Я думаю, что сообщение об ошибке довольно само собой разумеется. Вам необходимо предоставить метод __init__ с тремя переменными при создании экземпляра класса: self, database и tableName. Python позаботится о первом сам по себе - всего два! –

+0

Да, но я думаю, что должен быть какой-то способ преодолеть этот переменный спрос, потому что, в конце концов, я не хочу поставлять и таблицу DB ar, я просто хочу вызвать метод, который находится внутри этого класса, вот и все. – user3532371

+0

@ user3532371: Я ответил на ваш вопрос. Есть только эти две возможности. Но с вашей оригинальной подписью не будет работать вызов Class_A(). – ProgrammingIsAwsome

ответ

1

Это ничего не связанное с ООП:

Вашего методом подпись:

def __init__(self, database, tableName): 

Так что, если вы звоните: a = Class_A() вы даете только 1 параметр (само неявно задан в качестве параметра). Нельзя преодолеть это. Можно определить значения по умолчанию так:

def __init__(self, database=None, tableName=None): 

Так что, если вы звоните:

a = Class_A() 

базы данных и TABLENAME будет None. Но тогда:

self.dbu = database_manager_2.DatabaseUtility(database, tableName) 

вызывает ошибку. Я думаю.

Но с вашей оригинальной сигнатурой метода, нет никакого способа обойти это.

Смежные вопросы